{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Quora Text Classification with SKLearn","metadata":{"papermill":{"duration":0.016073,"end_time":"2021-12-09T03:07:52.45781","exception":false,"start_time":"2021-12-09T03:07:52.441737","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.metrics import confusion_matrix, classification_report\nfrom sklearn.feature_extraction.text import TfidfVectorizer\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.naive_bayes import BernoulliNB","metadata":{"_kg_hide-input":true,"papermill":{"duration":6.2718,"end_time":"2021-12-09T03:07:58.744993","exception":false,"start_time":"2021-12-09T03:07:52.473193","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-11-19T15:53:08.137924Z","iopub.execute_input":"2022-11-19T15:53:08.138346Z","iopub.status.idle":"2022-11-19T15:53:08.146901Z","shell.execute_reply.started":"2022-11-19T15:53:08.138297Z","shell.execute_reply":"2022-11-19T15:53:08.145730Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Import datasets","metadata":{"papermill":{"duration":0.014897,"end_time":"2021-12-09T03:07:58.775164","exception":false,"start_time":"2021-12-09T03:07:58.760267","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train = pd.read_csv(\"/kaggle/input/quora-insincere-questions-classification/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/quora-insincere-questions-classification/test.csv\")","metadata":{"papermill":{"duration":0.096602,"end_time":"2021-12-09T03:07:58.886896","exception":false,"start_time":"2021-12-09T03:07:58.790294","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-11-19T15:54:36.353500Z","iopub.execute_input":"2022-11-19T15:54:36.353912Z","iopub.status.idle":"2022-11-19T15:54:40.424487Z","shell.execute_reply.started":"2022-11-19T15:54:36.353874Z","shell.execute_reply":"2022-11-19T15:54:40.423581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"papermill":{"duration":0.045674,"end_time":"2021-12-09T03:07:58.948024","exception":false,"start_time":"2021-12-09T03:07:58.90235","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-11-19T15:54:43.856170Z","iopub.execute_input":"2022-11-19T15:54:43.856592Z","iopub.status.idle":"2022-11-19T15:54:43.868771Z","shell.execute_reply.started":"2022-11-19T15:54:43.856555Z","shell.execute_reply":"2022-11-19T15:54:43.867441Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-19T15:54:46.031850Z","iopub.execute_input":"2022-11-19T15:54:46.032307Z","iopub.status.idle":"2022-11-19T15:54:46.044203Z","shell.execute_reply.started":"2022-11-19T15:54:46.032270Z","shell.execute_reply":"2022-11-19T15:54:46.042846Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Text Vectorization","metadata":{"papermill":{"duration":0.015415,"end_time":"2021-12-09T03:07:58.979241","exception":false,"start_time":"2021-12-09T03:07:58.963826","status":"completed"},"tags":[]}},{"cell_type":"code","source":"vectorizer = TfidfVectorizer()\ntrain_vec = vectorizer.fit_transform(train[\"question_text\"])\ntest_vec = vectorizer.transform(test[\"question_text\"])","metadata":{"papermill":{"duration":0.525781,"end_time":"2021-12-09T03:07:59.520747","exception":false,"start_time":"2021-12-09T03:07:58.994966","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-11-19T15:54:51.044284Z","iopub.execute_input":"2022-11-19T15:54:51.045695Z","iopub.status.idle":"2022-11-19T15:55:17.358074Z","shell.execute_reply.started":"2022-11-19T15:54:51.045636Z","shell.execute_reply":"2022-11-19T15:55:17.356799Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Train Validation Split","metadata":{"papermill":{"duration":0.015127,"end_time":"2021-12-09T03:07:59.551595","exception":false,"start_time":"2021-12-09T03:07:59.536468","status":"completed"},"tags":[]}},{"cell_type":"code","source":"x_train, x_val, y_train, y_val = train_test_split(train_vec, train[\"target\"], stratify=train[\"target\"], random_state=42)\nx_train.shape, x_val.shape, y_train.shape, y_val.shape","metadata":{"papermill":{"duration":0.028524,"end_time":"2021-12-09T03:07:59.595565","exception":false,"start_time":"2021-12-09T03:07:59.567041","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-11-19T15:55:25.142889Z","iopub.execute_input":"2022-11-19T15:55:25.143314Z","iopub.status.idle":"2022-11-19T15:55:25.922203Z","shell.execute_reply.started":"2022-11-19T15:55:25.143275Z","shell.execute_reply":"2022-11-19T15:55:25.920912Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Modelling","metadata":{"papermill":{"duration":0.015514,"end_time":"2021-12-09T03:07:59.626953","exception":false,"start_time":"2021-12-09T03:07:59.611439","status":"completed"},"tags":[]}},{"cell_type":"code","source":"from sklearn.metrics import confusion_matrix, accuracy_score, f1_score\nimport seaborn as sns\ndef run_experiment(model, x_train, y_train, x_val, y_val):\n    model.fit(x_train, y_train)\n    y_pred = model.predict(x_val)\n    acc = accuracy_score(y_val, y_pred)\n    cm = confusion_matrix(y_val, y_pred)\n    f1 = f1_score(y_val, y_pred)\n    print(\"Validation Accuracy:%.2f\"%(acc))\n    print(\"F1 score:%.2f\"%(f1))\n    sns.heatmap(cm, annot=True)\n    plt.title(\"Confusion Matrix\")\n    plt.show()\n    metric = dict()\n    metric[\"accuracy\"] = acc\n    metric[\"confusion_matrix\"] = cm\n    return model, metric","metadata":{"papermill":{"duration":0.025926,"end_time":"2021-12-09T03:07:59.668718","exception":false,"start_time":"2021-12-09T03:07:59.642792","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-11-19T15:55:52.453588Z","iopub.execute_input":"2022-11-19T15:55:52.454021Z","iopub.status.idle":"2022-11-19T15:55:52.462730Z","shell.execute_reply.started":"2022-11-19T15:55:52.453982Z","shell.execute_reply":"2022-11-19T15:55:52.461444Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models = []\nmetrics = []\nbase_models = [\n    LogisticRegression(),\n    BernoulliNB()\n]\nfor model in base_models:\n    print(\"Classification with %s\"%(model))\n    model, metric = run_experiment(\n        model, \n        x_train, y_train, x_val, y_val\n    )\n    models.append(model)\n    metrics.append(metric)","metadata":{"papermill":{"duration":251.086048,"end_time":"2021-12-09T03:12:10.77057","exception":false,"start_time":"2021-12-09T03:07:59.684522","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-11-19T15:56:18.083110Z","iopub.execute_input":"2022-11-19T15:56:18.083982Z","iopub.status.idle":"2022-11-19T15:56:53.548543Z","shell.execute_reply.started":"2022-11-19T15:56:18.083930Z","shell.execute_reply":"2022-11-19T15:56:53.547376Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Submission","metadata":{"papermill":{"duration":0.034847,"end_time":"2021-12-09T03:12:51.978953","exception":false,"start_time":"2021-12-09T03:12:51.944106","status":"completed"},"tags":[]}},{"cell_type":"code","source":"result = np.array(np.mean([model.predict_proba(test_vec)[:, 1] for model in models], axis=0) > 0.5, dtype=int)\nsubmission = pd.DataFrame({\"qid\": test[\"qid\"], \"prediction\": result})\nsubmission.to_csv(\"submission.csv\", index=False)\nsubmission.head()","metadata":{"papermill":{"duration":17.790469,"end_time":"2021-12-09T03:13:09.804541","exception":false,"start_time":"2021-12-09T03:12:52.014072","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-11-19T15:56:58.116467Z","iopub.execute_input":"2022-11-19T15:56:58.116894Z","iopub.status.idle":"2022-11-19T15:56:58.797158Z","shell.execute_reply.started":"2022-11-19T15:56:58.116854Z","shell.execute_reply":"2022-11-19T15:56:58.795901Z"},"trusted":true},"execution_count":null,"outputs":[]}]}