{"metadata":{"accelerator":"GPU","colab":{"machine_shape":"hm","provenance":[]},"gpuClass":"standard","kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":10737,"databundleVersionId":290346,"sourceType":"competition"}],"dockerImageVersionId":30732,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"\nOutline:\n- Download the Data\n- Prepare Data for Training\n- Logistic Regression Model\n- Feed Forward Nueral Network\n\n\nDataset: https://www.kaggle.com/c/quora-insincere-questions-classification","metadata":{"id":"exC2aQEp66Ql"}},{"cell_type":"code","source":"import pandas as pd","metadata":{"executionInfo":{"elapsed":832,"status":"ok","timestamp":1669200428038,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"Stp_PUrC-dE8","execution":{"iopub.status.busy":"2024-07-04T18:23:41.514641Z","iopub.execute_input":"2024-07-04T18:23:41.515523Z","iopub.status.idle":"2024-07-04T18:23:41.520056Z","shell.execute_reply.started":"2024-07-04T18:23:41.515490Z","shell.execute_reply":"2024-07-04T18:23:41.518908Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_fname = '/kaggle/input/quora-insincere-questions-classification/train.csv'\ntest_fname = '/kaggle/input/quora-insincere-questions-classification/test.csv'\nsample_fname = '/kaggle/input/quora-insincere-questions-classification/sample_submission.csv' ","metadata":{"execution":{"iopub.status.busy":"2024-07-04T18:23:41.521844Z","iopub.execute_input":"2024-07-04T18:23:41.522170Z","iopub.status.idle":"2024-07-04T18:23:41.529719Z","shell.execute_reply.started":"2024-07-04T18:23:41.522144Z","shell.execute_reply":"2024-07-04T18:23:41.528712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"raw_df = pd.read_csv(train_fname)\ntest_df = pd.read_csv(test_fname)\nsub_df = pd.read_csv(sample_fname)","metadata":{"executionInfo":{"elapsed":3713,"status":"ok","timestamp":1669200436499,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"Oe_RPQzs-bsH","execution":{"iopub.status.busy":"2024-07-04T18:23:41.531964Z","iopub.execute_input":"2024-07-04T18:23:41.532457Z","iopub.status.idle":"2024-07-04T18:23:45.674619Z","shell.execute_reply.started":"2024-07-04T18:23:41.532421Z","shell.execute_reply":"2024-07-04T18:23:45.673510Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"raw_df","metadata":{"executionInfo":{"elapsed":27,"status":"ok","timestamp":1669200436509,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"GNRb6AVE-ndv","outputId":"a5250a33-f887-4828-a801-4a189887149e","execution":{"iopub.status.busy":"2024-07-04T18:23:45.675796Z","iopub.execute_input":"2024-07-04T18:23:45.676107Z","iopub.status.idle":"2024-07-04T18:23:45.687427Z","shell.execute_reply.started":"2024-07-04T18:23:45.676081Z","shell.execute_reply":"2024-07-04T18:23:45.686455Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df","metadata":{"executionInfo":{"elapsed":4,"status":"ok","timestamp":1669200445009,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"f--oQb1l-vcN","outputId":"8ed73b33-4e4b-407a-bf4b-82fc8f04d50d","execution":{"iopub.status.busy":"2024-07-04T18:23:45.689647Z","iopub.execute_input":"2024-07-04T18:23:45.689985Z","iopub.status.idle":"2024-07-04T18:23:45.701467Z","shell.execute_reply.started":"2024-07-04T18:23:45.689958Z","shell.execute_reply":"2024-07-04T18:23:45.700473Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df","metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1669200447996,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"iqAbYXnw-v5H","outputId":"cee76c7c-4dd2-4b4e-d4d4-d49dca7fb723","execution":{"iopub.status.busy":"2024-07-04T18:23:45.702753Z","iopub.execute_input":"2024-07-04T18:23:45.703260Z","iopub.status.idle":"2024-07-04T18:23:45.714675Z","shell.execute_reply.started":"2024-07-04T18:23:45.703224Z","shell.execute_reply":"2024-07-04T18:23:45.713771Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"SAMPLE_SIZE = 100_000","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669200453731,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"WUlk0PaRBZKu","execution":{"iopub.status.busy":"2024-07-04T18:23:45.716054Z","iopub.execute_input":"2024-07-04T18:23:45.716538Z","iopub.status.idle":"2024-07-04T18:23:45.722918Z","shell.execute_reply.started":"2024-07-04T18:23:45.716504Z","shell.execute_reply":"2024-07-04T18:23:45.721947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_df = raw_df.sample(SAMPLE_SIZE, random_state=42)\nsample_df","metadata":{"execution":{"iopub.status.busy":"2024-07-04T18:23:45.724222Z","iopub.execute_input":"2024-07-04T18:23:45.724824Z","iopub.status.idle":"2024-07-04T18:23:45.805677Z","shell.execute_reply.started":"2024-07-04T18:23:45.724789Z","shell.execute_reply":"2024-07-04T18:23:45.804668Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"\n## Prepare Data for Training\n\n\nOutline:\n- Convert text to TF-IDF Vectors\n- Split training & validation set\n- Convert to PyTorch tensors","metadata":{"id":"sAzqMqJT7Lav"}},{"cell_type":"markdown","source":"### Conversion to TF-IDF Vectors","metadata":{"id":"lJfHJnBF_KdW"}},{"cell_type":"code","source":"import nltk\nfrom nltk.tokenize import word_tokenize\nfrom nltk.stem import SnowballStemmer\nfrom nltk.corpus import stopwords\nfrom sklearn.feature_extraction.text import TfidfVectorizer","metadata":{"executionInfo":{"elapsed":661,"status":"ok","timestamp":1669200498431,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"hPlfaQH9-bn7","execution":{"iopub.status.busy":"2024-07-04T18:23:45.806970Z","iopub.execute_input":"2024-07-04T18:23:45.807425Z","iopub.status.idle":"2024-07-04T18:23:45.812779Z","shell.execute_reply.started":"2024-07-04T18:23:45.807388Z","shell.execute_reply":"2024-07-04T18:23:45.811592Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nltk.download('punkt')","metadata":{"executionInfo":{"elapsed":915,"status":"ok","timestamp":1669200499869,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"Wf0hyAT9AbDM","outputId":"b9709e57-6888-43e6-c4c7-261c15b5ec25","execution":{"iopub.status.busy":"2024-07-04T18:23:45.814230Z","iopub.execute_input":"2024-07-04T18:23:45.814970Z","iopub.status.idle":"2024-07-04T18:23:45.825251Z","shell.execute_reply.started":"2024-07-04T18:23:45.814932Z","shell.execute_reply":"2024-07-04T18:23:45.824305Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"stemmer = SnowballStemmer(language='english')\n\ndef tokenize(text):\n    return [stemmer.stem(token) for token in word_tokenize(text)]","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669200501439,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"5U5gB9p__TEL","execution":{"iopub.status.busy":"2024-07-04T18:23:45.828869Z","iopub.execute_input":"2024-07-04T18:23:45.829507Z","iopub.status.idle":"2024-07-04T18:23:45.834122Z","shell.execute_reply.started":"2024-07-04T18:23:45.829479Z","shell.execute_reply":"2024-07-04T18:23:45.833209Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tokenize(\"Ain't nothin' (but a heartache)!\")","metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1669200504663,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"aIvMqAHq7LyZ","outputId":"e66b3dd4-cff2-4f41-d776-607b88e77ff0","execution":{"iopub.status.busy":"2024-07-04T18:23:45.835461Z","iopub.execute_input":"2024-07-04T18:23:45.836388Z","iopub.status.idle":"2024-07-04T18:23:45.845747Z","shell.execute_reply.started":"2024-07-04T18:23:45.836353Z","shell.execute_reply":"2024-07-04T18:23:45.844838Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nltk.download('stopwords')","metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1669200506551,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"4trUS8M8Ak0O","outputId":"6a83998a-b617-46f5-a053-194720513993","execution":{"iopub.status.busy":"2024-07-04T18:23:45.847023Z","iopub.execute_input":"2024-07-04T18:23:45.847703Z","iopub.status.idle":"2024-07-04T18:23:45.857035Z","shell.execute_reply.started":"2024-07-04T18:23:45.847667Z","shell.execute_reply":"2024-07-04T18:23:45.855981Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"english_stopwords = stopwords.words('english')","metadata":{"executionInfo":{"elapsed":1,"status":"ok","timestamp":1669200513694,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"47ShRjGw_Nkg","execution":{"iopub.status.busy":"2024-07-04T18:23:45.858283Z","iopub.execute_input":"2024-07-04T18:23:45.858595Z","iopub.status.idle":"2024-07-04T18:23:45.865372Z","shell.execute_reply.started":"2024-07-04T18:23:45.858561Z","shell.execute_reply":"2024-07-04T18:23:45.864381Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"vectorizer = TfidfVectorizer(lowercase=True, \n                             tokenizer=tokenize,\n                             stop_words=english_stopwords,\n                             max_features=1000)","metadata":{"executionInfo":{"elapsed":477,"status":"ok","timestamp":1669200515117,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"lkhboCe2_Nh7","execution":{"iopub.status.busy":"2024-07-04T18:23:45.866563Z","iopub.execute_input":"2024-07-04T18:23:45.866863Z","iopub.status.idle":"2024-07-04T18:23:45.875541Z","shell.execute_reply.started":"2024-07-04T18:23:45.866838Z","shell.execute_reply":"2024-07-04T18:23:45.874656Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_df.question_text","metadata":{"execution":{"iopub.status.busy":"2024-07-04T18:23:45.876732Z","iopub.execute_input":"2024-07-04T18:23:45.877239Z","iopub.status.idle":"2024-07-04T18:23:45.888725Z","shell.execute_reply.started":"2024-07-04T18:23:45.877204Z","shell.execute_reply":"2024-07-04T18:23:45.887829Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nvectorizer.fit(sample_df.question_text)","metadata":{"executionInfo":{"elapsed":26217,"status":"ok","timestamp":1669200627455,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"4HobEE0l_Nfn","outputId":"2ed2bd18-f8fa-43c3-80f8-80d6f4f5dd1b","execution":{"iopub.status.busy":"2024-07-04T18:23:45.889918Z","iopub.execute_input":"2024-07-04T18:23:45.890238Z","iopub.status.idle":"2024-07-04T18:24:18.857415Z","shell.execute_reply.started":"2024-07-04T18:23:45.890208Z","shell.execute_reply":"2024-07-04T18:24:18.856382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\ninputs = vectorizer.transform(sample_df.question_text)","metadata":{"executionInfo":{"elapsed":26883,"status":"ok","timestamp":1669200688229,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"37xM3K6HAm3d","execution":{"iopub.status.busy":"2024-07-04T18:24:18.858472Z","iopub.execute_input":"2024-07-04T18:24:18.858754Z","iopub.status.idle":"2024-07-04T18:24:51.784543Z","shell.execute_reply.started":"2024-07-04T18:24:18.858731Z","shell.execute_reply":"2024-07-04T18:24:51.783468Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"inputs.shape","metadata":{"executionInfo":{"elapsed":9,"status":"ok","timestamp":1669200688229,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"w3ydrqJGCIPu","outputId":"cd3562cd-4e8a-4ef5-bcbe-bba735a5fa5c","execution":{"iopub.status.busy":"2024-07-04T18:24:51.785960Z","iopub.execute_input":"2024-07-04T18:24:51.786274Z","iopub.status.idle":"2024-07-04T18:24:51.792840Z","shell.execute_reply.started":"2024-07-04T18:24:51.786248Z","shell.execute_reply":"2024-07-04T18:24:51.791701Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"targets = sample_df.target.values","metadata":{"executionInfo":{"elapsed":7,"status":"ok","timestamp":1669200688229,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"klBbovVDBuji","execution":{"iopub.status.busy":"2024-07-04T18:24:51.794162Z","iopub.execute_input":"2024-07-04T18:24:51.794487Z","iopub.status.idle":"2024-07-04T18:24:51.801032Z","shell.execute_reply.started":"2024-07-04T18:24:51.794462Z","shell.execute_reply":"2024-07-04T18:24:51.800208Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"targets.shape","metadata":{"executionInfo":{"elapsed":7,"status":"ok","timestamp":1669200688230,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"f7U3HA9KCJPy","outputId":"12e5cb6f-8810-4b57-fa8f-83b826707a5b","execution":{"iopub.status.busy":"2024-07-04T18:24:51.802128Z","iopub.execute_input":"2024-07-04T18:24:51.802480Z","iopub.status.idle":"2024-07-04T18:24:51.812829Z","shell.execute_reply.started":"2024-07-04T18:24:51.802448Z","shell.execute_reply":"2024-07-04T18:24:51.811756Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\ntest_inputs = vectorizer.transform(test_df.question_text)","metadata":{"executionInfo":{"elapsed":94315,"status":"ok","timestamp":1669200789739,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"UDW7CjfBHPsQ","execution":{"iopub.status.busy":"2024-07-04T18:24:51.814225Z","iopub.execute_input":"2024-07-04T18:24:51.814606Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Split training and validation set","metadata":{"id":"YJXojclVCaGN"}},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669201031983,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"Mpy4EEGw7KU9","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_inputs, val_inputs, train_targets, val_targets = train_test_split(inputs, targets, test_size=0.3, random_state=42)","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669201031983,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"GaM9kfFhB9zS","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_inputs.shape, val_inputs.shape","metadata":{"executionInfo":{"elapsed":4,"status":"ok","timestamp":1669201032591,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"QmOGpK_gCpy2","outputId":"042962f8-7ab2-43d8-f9d0-0c4f9831ee40","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_targets.shape","metadata":{"executionInfo":{"elapsed":4,"status":"ok","timestamp":1669201032592,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"M_1ft-gCDh30","outputId":"26def88d-ebb5-4f5d-9023-300789f723b2","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Convert to PyTorch Tensors","metadata":{"id":"cpv0-Ylzjevq"}},{"cell_type":"code","source":"import torch\nfrom torch.utils.data import TensorDataset, DataLoader\nimport torch.nn.functional as F","metadata":{"executionInfo":{"elapsed":2354,"status":"ok","timestamp":1669201693348,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"qFufsktvkPIA","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_tensors = F.normalize(torch.tensor(train_inputs.toarray()).float(), dim=0)\nval_tensors = F.normalize(torch.tensor(val_inputs.toarray()).float(), dim=0)\n","metadata":{"executionInfo":{"elapsed":811,"status":"ok","timestamp":1669201694156,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"BVLV0WU1kPEr","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_tensors.shape, val_tensors.shape","metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1669201716769,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"oE_3Mn_TLKLj","outputId":"d1ad3c46-20e5-4297-9725-27d0bca6c063","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_ds = TensorDataset(train_tensors, torch.tensor(train_targets))\nval_ds = TensorDataset(val_tensors, torch.tensor(val_targets))","metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1669201695995,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"fdGQ3diqkVy5","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"batch_size = 128\ntrain_dl = DataLoader(train_ds, batch_size, shuffle=True)\nval_dl = DataLoader(val_ds, batch_size)","metadata":{"executionInfo":{"elapsed":973,"status":"ok","timestamp":1669201696966,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"RGMC7U1skVqc","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for inputs_batch, targets_batch in train_dl:\n    print('inputs.shape', inputs_batch.shape)\n    print('targets.shape', targets_batch.shape)\n    print(targets_batch)\n    break","metadata":{"executionInfo":{"elapsed":671,"status":"ok","timestamp":1669201730505,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"Dxdm146YkPBz","outputId":"fbd5319b-300c-414d-ec7b-04f86c190e15","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Logistic Regression Model","metadata":{"id":"XElUh9tYky7r"}},{"cell_type":"code","source":"import torch.nn as nn","metadata":{"executionInfo":{"elapsed":653,"status":"ok","timestamp":1669202017454,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"l37mkj_Ik_aZ","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class LogReg(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.linear1 = nn.Linear(1000, 1)\n        \n    def forward(self, xb):\n        out = self.linear1(xb)\n        return out","metadata":{"executionInfo":{"elapsed":6,"status":"ok","timestamp":1669202962497,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"VcsWMmvckO_O","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.metrics import accuracy_score, f1_score","metadata":{"executionInfo":{"elapsed":6,"status":"ok","timestamp":1669202962498,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"7yG9eJAllL9z","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"logreg_model = LogReg()","metadata":{"executionInfo":{"elapsed":6,"status":"ok","timestamp":1669202962498,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"ch_bjmZAm7HB","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for batch in val_dl:\n    batch_inputs, batch_targets = batch\n    print('inputs.shape', batch_inputs.shape)\n    print('targets', batch_targets)\n    \n    batch_out = logreg_model(batch_inputs)\n    probs = torch.sigmoid(batch_out[:,0])\n    preds = (probs >= 0.5).int()\n    \n    print('outputs', preds)\n    print('accuracy', accuracy_score(batch_targets, preds))\n    print('f1_score', f1_score(batch_targets, preds))\n    break","metadata":{"executionInfo":{"elapsed":6,"status":"ok","timestamp":1669202962499,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"V-VjurhLmkxm","outputId":"70b0bff6-fe78-4e4d-cb29-1bc27d34a536","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def evaluate(model, dl):\n    losses, accs, f1s = [], [], []\n    for batch in dl:\n        inputs, targets = batch\n        out = model(inputs)\n        \n        probs = torch.sigmoid(out[:,0])\n        loss = F.binary_cross_entropy(probs, targets.float(), weight=torch.tensor(20.))\n        losses.append(loss.item())\n\n        preds = (probs > 0.5).int()\n        acc = accuracy_score(targets, preds)\n        f1 = f1_score(targets, preds)\n        \n        accs.append(acc)\n        f1s.append(f1)\n\n    return np.mean(losses), np.mean(accs), np.mean(f1s)","metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1669202962499,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"92Rvv5S8kO8y","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def fit(epochs, lr, model, train_loader, val_loader):\n    optimizer = torch.optim.Adam(model.parameters(), lr, weight_decay=1e-5)\n    history = [] # for recording epoch-wise results\n    \n    for epoch in range(epochs):\n        \n        # Training Phase \n        for batch in train_loader:\n            inputs, targets = batch\n            out = model(inputs)\n            probs = torch.sigmoid(out[:,0])\n            loss = F.binary_cross_entropy(probs, \n                                          targets.float(), \n                                          weight=torch.tensor(20.))\n            loss.backward()\n            optimizer.step()\n            optimizer.zero_grad()\n        \n        # Validation phase\n        result = evaluate(model, val_loader)\n        loss, acc, f1 = result\n        print('Epoch: {}; Loss: {:.4f}; Accuracy: {:.4f}; F1 Score: {:.4f}'.format(\n            epoch, loss, acc, f1))\n        history.append(result)\n\n    return history","metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1669202962499,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"jveJEPcKkOk3","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"logreg_model = LogReg()","metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1669202995769,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"MO0zOg5CqIRM","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = [evaluate(logreg_model, val_dl)]","metadata":{"executionInfo":{"elapsed":4,"status":"ok","timestamp":1669202995769,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"hqpcn0wnqMop","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history","metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1669202995769,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"TP-FwE0gM9ys","outputId":"d7f76bf6-a59e-4787-eed0-ca7d58a92b00","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history += fit(5, 0.01, logreg_model, train_dl, val_dl)","metadata":{"executionInfo":{"elapsed":6567,"status":"ok","timestamp":1669203003842,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"cyBfuvi7kOiB","outputId":"244a7056-8cc7-4416-caf4-6144bf29c97b","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history += fit(5, 0.01, logreg_model, train_dl, val_dl)","metadata":{"executionInfo":{"elapsed":6833,"status":"ok","timestamp":1669203017497,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"uptV6GfyQJsi","outputId":"bbabf0bc-c89e-4d67-da1a-fa1acfdc3b63","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history += fit(5, 0.01, logreg_model, train_dl, val_dl)","metadata":{"executionInfo":{"elapsed":6523,"status":"ok","timestamp":1669203027455,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"uAWwrUeBQMRy","outputId":"b6296bdb-b819-4117-8374-b699bd4c3c4c","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"losses = [item[0] for item in history]","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669202280845,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"D_vPYN2xkOfY","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt","metadata":{"executionInfo":{"elapsed":1,"status":"ok","timestamp":1669202281366,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"asZEyYTPwRfT","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(losses);\nplt.title('Loss')","metadata":{"executionInfo":{"elapsed":15,"status":"ok","timestamp":1669202290494,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"Tqidt-T0wppF","outputId":"d8d2d387-668d-41b7-aef5-0b192b655a5d","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"f1s = [item[2] for item in history]","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669202293760,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"CKLWhCtawuoH","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(f1s)\nplt.title('F1 Score')","metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1669202294879,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"M2wkIUAjwulR","outputId":"396e5260-bd45-488b-b39c-f52473a747eb","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"id":"nKwRPu0fwuiv"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Feed Forward Neural Network","metadata":{"id":"FIp03-aovGCQ"}},{"cell_type":"code","source":"import torch.nn.functional as F","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669202673906,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"1PER1VQkS_ts","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class FeedForwardModel(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.linear1 = nn.Linear(1000, 512)\n        self.linear2 = nn.Linear(512, 256)\n        self.linear3 = nn.Linear(256, 128)\n        self.linear4 = nn.Linear(128, 1)\n        \n    def forward(self, xb):\n        out = F.relu(self.linear1(xb))\n        out = F.relu(self.linear2(out))\n        out = F.relu(self.linear3(out))\n        out = self.linear4(out)\n        return out","metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1669202771059,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"SevQDYjOB9sQ","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ff_model = FeedForwardModel()","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669202855004,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"E7kRi7bMB9pu","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = [evaluate(ff_model, val_dl)]","metadata":{"executionInfo":{"elapsed":976,"status":"ok","timestamp":1669202855978,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"w4u7Vw7eRvUm","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history","metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1669202855979,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"Vd2WnPBbRvRs","outputId":"61a22c86-62d3-4d77-ad17-b15e76cc0208","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nhistory += fit(5, 0.001, ff_model, train_dl, val_dl)","metadata":{"executionInfo":{"elapsed":67443,"status":"ok","timestamp":1669202928341,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"wXLv-uQNRvOd","outputId":"88bbc3c4-5199-40ef-fff2-c0c35d901fbc","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Make Predictions and Submit","metadata":{"id":"8RpPHbz_vXYY"}},{"cell_type":"code","source":"test_tensors = torch.tensor(test_inputs.toarray()).float()","metadata":{"executionInfo":{"elapsed":2424,"status":"ok","timestamp":1669202367684,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"BNFlV0_EFUIh","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_ds = TensorDataset(test_tensors)","metadata":{"executionInfo":{"elapsed":1,"status":"ok","timestamp":1669202369809,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"8zBMX4An7RYq","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_dl = DataLoader(test_ds, batch_size)","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669202371353,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"Bxynl-bt7RtT","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def predict(model, dl):\n    all_preds = []\n    for batch in dl:\n        inputs, = batch\n        out = model(inputs)\n        probs = torch.sigmoid(out)[:,0]\n        preds = (probs > 0.5).int()\n        all_preds += list(preds.numpy())\n    return all_preds","metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1669202373721,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"FpuUlwyE7Tgn","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_preds = predict(ff_model, test_dl)","metadata":{"executionInfo":{"elapsed":5673,"status":"ok","timestamp":1669202381441,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"64GGFks17UCA","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_preds[:20]","metadata":{"executionInfo":{"elapsed":8,"status":"ok","timestamp":1669202381442,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"Qao-MsaUyvwF","outputId":"f5bbeeb8-d3a3-4db3-e92c-e5ed21d2d4f0","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df","metadata":{"executionInfo":{"elapsed":6,"status":"ok","timestamp":1669202381442,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"zkCv8HRlzsRF","outputId":"0fbfede2-c638-44a3-dbe4-6d0278121da5","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df.prediction = test_preds","metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1669202387751,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"qrAyOoInz6yP","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df.to_csv('submission.csv', index=None)","metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1669202387752,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"f1okzlOJz9Jc","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!head submission.csv","metadata":{"executionInfo":{"elapsed":1445,"status":"ok","timestamp":1669202389193,"user":{"displayName":"Aakash N S","userId":"03254185060287524023"},"user_tz":-330},"id":"0S7QBMB0z_yf","outputId":"7c6e6680-28a8-4eeb-bd60-1474bbd08bdf","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"id":"KTn2DeKZSCUB"},"execution_count":null,"outputs":[]}]}