{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"df = pd.read_csv('../input/train.csv')\ndf_test = pd.read_csv('../input/test.csv')\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"69eb5cbc8bdcc4b74bd08936d00f305df00099cd"},"cell_type":"code","source":"df['target'].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b22351a90804dc93006cd631ba68c1e08727e615"},"cell_type":"markdown","source":"Appending test dataset to improve`CountVectorizer`fit:"},{"metadata":{"trusted":true,"_uuid":"1710d0d6d67450eea682436451a5fcb2266ac6ee"},"cell_type":"code","source":"from sklearn.feature_extraction.text import CountVectorizer\n\n\nvectorizer = CountVectorizer(binary=True, strip_accents='unicode',\n                                  max_features=90000)\nvectorizer = vectorizer.fit(df['question_text'].append(df_test['question_text']))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3e8dc86fa45c13f3919e5b2ac94f2de6f659f431"},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\n\nX_train, X_test, y_train, y_test = train_test_split(df['question_text'],\n                                                   df['target'],\n                                                   test_size=0.2)\n\nX_train = vectorizer.transform(X_train)\nX_test = vectorizer.transform(X_test)\nX_train.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e925d589ab2dc91192f98dacbf39a4ca73d6aad8"},"cell_type":"markdown","source":"Training model"},{"metadata":{"trusted":true,"_uuid":"8837e437c260a9c8ee8b8123f65c3588f2e4f8ea"},"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression\n\n\nclf = LogisticRegression(C=1.0, multi_class='multinomial', penalty='l2',\n                        solver='saga', n_jobs=1)\nclf.fit(X_train, y_train)\npredicted = clf.predict(X_test)\nnp.mean(predicted == y_test)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"fb53c1b4347387206e9323be80cd86779891ff11"},"cell_type":"markdown","source":"Evaluating with F1-score"},{"metadata":{"trusted":true,"_uuid":"53b6571af0ebd168177093a713b122afe2f34218"},"cell_type":"code","source":"from sklearn.metrics import f1_score\n\n\n[\n    f1_score(y_test, predicted),\n    f1_score(y_test, predicted, average='macro'),\n    f1_score(y_test, predicted, average='micro'),\n    f1_score(y_test, predicted, average='weighted'),\n    f1_score(y_test, predicted, average=None)\n]","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"10eab8a1712206b48b5e9405a2a7d674ac366d40"},"cell_type":"markdown","source":"### Submission"},{"metadata":{"trusted":true,"_uuid":"8a4c329407dacc757fa7a2e88d3d1ff98fbffe3b"},"cell_type":"code","source":"X_submission = vectorizer.transform(df_test['question_text'])\ndf_test['prediction'] = clf.predict(X_submission)\nsubmission = df_test.drop(columns=['question_text'])\nsubmission.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"78596d6888664ff6de97f81be4c0a4de8952dc40"},"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}