{"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":"code","source":"import sklearn, os\nimport numpy as np\nimport pandas as pd\nimport scipy\n\nfrom sklearn.feature_extraction.text import TfidfVectorizer\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.linear_model import LinearRegression, LogisticRegression\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import LabelEncoder","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-08-12T18:59:42.320296Z","iopub.execute_input":"2022-08-12T18:59:42.321524Z","iopub.status.idle":"2022-08-12T18:59:42.875174Z","shell.execute_reply.started":"2022-08-12T18:59:42.321401Z","shell.execute_reply":"2022-08-12T18:59:42.874196Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load train files\npath = '/kaggle/input/feedback-prize-effectiveness/'\ntrain_dir = path + 'train/'\ntest_dir = path + 'test/'\n\ntrain_df = pd.read_csv(path + 'train.csv')\ncorpus = train_df['discourse_text'].values\nlabels = train_df['discourse_effectiveness'].values\n\ntest_df = pd.read_csv(path + 'test.csv')\ntest_corpus = test_df['discourse_text'].values","metadata":{"execution":{"iopub.status.busy":"2022-08-12T18:59:42.877424Z","iopub.execute_input":"2022-08-12T18:59:42.877934Z","iopub.status.idle":"2022-08-12T18:59:43.210702Z","shell.execute_reply.started":"2022-08-12T18:59:42.877850Z","shell.execute_reply":"2022-08-12T18:59:43.209828Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"target_map = {\"Ineffective\":0, \"Adequate\":1,\"Effective\":2}\ntrain_df[\"target\"] = train_df[\"discourse_effectiveness\"].map(target_map)","metadata":{"execution":{"iopub.status.busy":"2022-08-12T18:59:43.211873Z","iopub.execute_input":"2022-08-12T18:59:43.212225Z","iopub.status.idle":"2022-08-12T18:59:43.225748Z","shell.execute_reply.started":"2022-08-12T18:59:43.212194Z","shell.execute_reply":"2022-08-12T18:59:43.224868Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def preprocess(corpus):\n    for i, doc in enumerate(corpus):\n        corpus[i] = doc.lower().rstrip()\n    return corpus","metadata":{"execution":{"iopub.status.busy":"2022-08-12T18:59:43.228693Z","iopub.execute_input":"2022-08-12T18:59:43.229572Z","iopub.status.idle":"2022-08-12T18:59:43.234878Z","shell.execute_reply.started":"2022-08-12T18:59:43.229537Z","shell.execute_reply":"2022-08-12T18:59:43.233873Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"corpus = preprocess(corpus)    \ntest_corpus = preprocess(test_corpus)\ntargets = train_df['target'].values\n\nx_train, x_val, y_train, y_val = train_test_split(corpus, targets, test_size=0.2, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2022-08-12T18:59:43.236878Z","iopub.execute_input":"2022-08-12T18:59:43.237355Z","iopub.status.idle":"2022-08-12T18:59:43.271730Z","shell.execute_reply.started":"2022-08-12T18:59:43.237322Z","shell.execute_reply":"2022-08-12T18:59:43.270924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"vectorizer = TfidfVectorizer(min_df=5)\nx_t = vectorizer.fit_transform(x_train)\nx_v = vectorizer.transform(x_val)\nx_test = vectorizer.transform(test_corpus)","metadata":{"execution":{"iopub.status.busy":"2022-08-12T18:59:43.272961Z","iopub.execute_input":"2022-08-12T18:59:43.273298Z","iopub.status.idle":"2022-08-12T18:59:44.504302Z","shell.execute_reply.started":"2022-08-12T18:59:43.273267Z","shell.execute_reply":"2022-08-12T18:59:44.503251Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = LogisticRegression(max_iter=500, class_weight=None)\nmode = model.fit(x_t, y_train)","metadata":{"execution":{"iopub.status.busy":"2022-08-12T19:03:22.704002Z","iopub.execute_input":"2022-08-12T19:03:22.704330Z","iopub.status.idle":"2022-08-12T19:03:32.267556Z","shell.execute_reply.started":"2022-08-12T19:03:22.704304Z","shell.execute_reply":"2022-08-12T19:03:32.266783Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_pred = model.predict(x_t)\nval_pred = model.predict(x_v)\ntest_pred = model.predict(x_test)\n\ntrain_proba = model.predict_proba(x_t)\nval_proba = model.predict_proba(x_v)\ntest_proba = model.predict_proba(x_test)","metadata":{"execution":{"iopub.status.busy":"2022-08-12T19:03:32.268927Z","iopub.execute_input":"2022-08-12T19:03:32.269421Z","iopub.status.idle":"2022-08-12T19:03:32.296418Z","shell.execute_reply.started":"2022-08-12T19:03:32.269393Z","shell.execute_reply":"2022-08-12T19:03:32.295669Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Train Metrics\nfrom sklearn.metrics import log_loss\nprint('Train Metrics:')\nprint('F1: ' + str(sklearn.metrics.f1_score(y_train, train_pred, average='micro')))\nprint('Accuracy: ' + str(sklearn.metrics.accuracy_score(y_train, train_pred)))\nprint('Log Loss: ' + str(log_loss(y_train, train_proba)))\n\ncm = sklearn.metrics.confusion_matrix(y_train, train_pred, normalize='true')\n\ndisp = sklearn.metrics.ConfusionMatrixDisplay(confusion_matrix=cm)\ndisp.plot()","metadata":{"execution":{"iopub.status.busy":"2022-08-12T19:03:32.300155Z","iopub.execute_input":"2022-08-12T19:03:32.302046Z","iopub.status.idle":"2022-08-12T19:03:32.478539Z","shell.execute_reply.started":"2022-08-12T19:03:32.302012Z","shell.execute_reply":"2022-08-12T19:03:32.477682Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Validation Metrics\nprint('Validation Metrics:')\nprint('F1: ' + str(sklearn.metrics.f1_score(y_val, val_pred, average='micro')))\nprint('Accuracy: ' + str(sklearn.metrics.accuracy_score(y_val, val_pred)))\nprint('Log Loss: ' + str(log_loss(y_val, val_proba)))\n\ncm = sklearn.metrics.confusion_matrix(y_val, val_pred, normalize='true')\n\ndisp = sklearn.metrics.ConfusionMatrixDisplay(confusion_matrix=cm)\ndisp.plot()","metadata":{"execution":{"iopub.status.busy":"2022-08-12T19:03:32.480619Z","iopub.execute_input":"2022-08-12T19:03:32.481133Z","iopub.status.idle":"2022-08-12T19:03:32.638134Z","shell.execute_reply.started":"2022-08-12T19:03:32.481099Z","shell.execute_reply":"2022-08-12T19:03:32.637075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit = pd.DataFrame(columns=['discourse_id', 'Ineffective', 'Adequate', 'Effective'])\n\nfor i, row in test_df.iterrows():\n    p = test_proba[i, :]\n    submit.loc[i] = [row['discourse_id'], p[0], p[1], p[2]]","metadata":{"execution":{"iopub.status.busy":"2022-08-12T19:03:32.639432Z","iopub.execute_input":"2022-08-12T19:03:32.639765Z","iopub.status.idle":"2022-08-12T19:03:32.669411Z","shell.execute_reply.started":"2022-08-12T19:03:32.639733Z","shell.execute_reply":"2022-08-12T19:03:32.668526Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-12T18:59:53.756793Z","iopub.execute_input":"2022-08-12T18:59:53.757711Z","iopub.status.idle":"2022-08-12T18:59:53.768990Z","shell.execute_reply.started":"2022-08-12T18:59:53.757675Z","shell.execute_reply":"2022-08-12T18:59:53.768002Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit","metadata":{"execution":{"iopub.status.busy":"2022-08-12T19:00:11.840981Z","iopub.execute_input":"2022-08-12T19:00:11.841300Z","iopub.status.idle":"2022-08-12T19:00:11.851689Z","shell.execute_reply.started":"2022-08-12T19:00:11.841276Z","shell.execute_reply":"2022-08-12T19:00:11.850945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}