{ "cells": [ { "cell_type": "markdown", "source": [ "# Setup\n", "Import libraries and mount your drive" ], "metadata": { "id": "RQAnOwCpK6L2" } }, { "cell_type": "markdown", "source": [ "Link to the Dataset:\n", "[Click Here](//drive.google.com/drive/folders/1yCejyr9fWoZlmP0aTgEbhkv9CvA1ltWr?usp=sharing)" ], "metadata": { "id": "I98aXUxZat7v" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "tq8JNMW9k4Yc" }, "outputs": [], "source": [ "import string\n", "import sklearn\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "import pandas as pd\n", "import numpy as np\n", "import math\n", "import os\n", "from matplotlib import pyplot as plt\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.naive_bayes import MultinomialNB\n", "from sklearn.model_selection import GridSearchCV\n", "import re\n", "from sklearn.feature_extraction.text import TfidfVectorizer\n", "import numpy as np\n", "from sklearn.metrics import classification_report" ] }, { "cell_type": "code", "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "VnDLLLcFk-7t", "outputId": "e71a4c48-89f4-4a8b-81d4-6862a8359038" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Mounted at /content/drive\n" ] } ] }, { "cell_type": "markdown", "source": [ "# Read Dataset\n", "Replace the paths with your paths to read the files" ], "metadata": { "id": "ZKkavoIhLCql" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "iaVvBZ0Lk4Yh" }, "outputs": [], "source": [ "#extract files\n", "tr = pd.read_csv('/content/drive/MyDrive/PA4_dataset/PA4_dataset/train.csv')\n", "ts = pd.read_csv('/content/drive/MyDrive/PA4_dataset/PA4_dataset/test.csv')\n", "stop = pd.read_table('/content/drive/MyDrive/PA4_dataset/PA4_dataset/stop_words.txt',header=None)[0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "4YRCOK-Bk4Yi" }, "outputs": [], "source": [ "#separate tweets from files\n", "tr_tweets = tr[\"Tweet\"]\n", "ts_tweets = ts[\"Tweet\"]\n", "tr_labels = tr[\"Sentiment\"]\n", "ts_labels = ts[\"Sentiment\"]\n", "tr_size = len(tr_tweets)\n", "ts_size = len(ts_tweets)" ] }, { "cell_type": "markdown", "source": [ "# Data Preprocessing\n", "Clean your data to remove unwanted symbols.
\n", "The following methods are helpful:
\n", "\n", "\n", "* [.casefold()](https://www.w3schools.com/python/ref_string_casefold.asp)\n", "* [.lstrip()](https://www.w3schools.com/python/ref_string_lstrip.asp)\n", "* [re.sub()](https://www.w3schools.com/python/python_regex.asp)\n", "* [.rstrip()](https://www.w3schools.com/python/ref_string_rstrip.asp)\n", "* [.replace](https://www.w3schools.com/python/ref_string_replace.asp)\n", "\n", "*Note: You may use other functions for processing but these should be enough*" ], "metadata": { "id": "vN5lOoInLPjq" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "RE60JSBUk4Yj" }, "outputs": [], "source": [ "#Part 1 - Data Preprocessing\n", "for indx in range(tr_size): # pre-process training data\n", " #convert strings to lowercase\n", " #remove usernames and hyperlinks\n", " #removing digits and next line symbols\n", " #remove punctuation and symbols\n", " # {Code here}\n", " for word in stop: #remove stop words\n", " # {Code here}\n", "for indx in range(ts_size): # pre-process testing data\n", " #convert strings to lowercase\n", " #remove usernames and hyperlinks\n", " #removing digits and next line symbols\n", " #remove punctuation and symbols\n", " # {Code here}\n", " for word in stop: #remove stop words\n", " # {Code here}" ] }, { "cell_type": "markdown", "source": [ "# Bag of Words" ], "metadata": { "id": "M9ZZJhkeON8F" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "gxsI2Nj6k4Yl" }, "outputs": [], "source": [ "#Part 2 - Bag Of Words\n", "# Extract vocab from training data set\n", "vocab_list = []\n", "for indx in range(tr_size):\n", " # read tweet\n", " tr_tweets[indx] = tr_tweets[indx].split()\n", " # append words from each tweet to vocab_list \n", " # make sure words don't get repeated\n", " # {Code Here}\n", "\n", "# Create Bag of Words Matrix of size (number of tweets in training data, size of vocabulary)\n", "# each row is a tweet and each column is a word\n", "matrix = np.zeros(('''Enter size here''')) \n", "\n", "# Populate BoW\n", "# Go through the words in each tweet \n", "# for each word append the count of the matrix at relevant position \n", "# {Code Here}" ] }, { "cell_type": "markdown", "source": [ "# Implement Naive Bayes\n", "\n", "\n", "* Step 01: Create a dictionary 'count' to store the number of times a word occurs in each class (positive, negative, neutral). You can do this by using the matrix. For each tweet use the index to access the actual label from tr_labels.
\n", "The dictionary will have the following structure:
\n", "$count[word] = [positive, negative, neutral]$
\n", "Example:
$count['to'] = [5,10,12]$\n", "\n" ], "metadata": { "id": "8wXjQexAQsE8" } }, { "cell_type": "code", "source": [ "count = {}\n", "# {Code Here}" ], "metadata": { "id": "MVms6fiznDtX" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "* Step 02: Find the prior probability of each class
\n", "To calculate the prior probability of a class calculate the ratio of
\n", "$N_{c}$ : $N_{t}$
\n", "where $N_{c}$ is the number of tweets belonging to the class and $N_{t}$ is the total number of tweets.
\n", "Store these in:
\n", "$prior = [positivePrior, negativePrior, neutralPrior]$" ], "metadata": { "id": "vRuXOnlZSPfx" } }, { "cell_type": "code", "source": [ "prior = []\n", "# {Code Here}" ], "metadata": { "id": "lSrK4pamXbOq" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "* Step 03: Find the likelihood of each word for every class
\n", "Each word will have 3 likelihoods, one corresponding to each class.
\n", "Calculate the likelihood of a word specific to a class:
\n", "\n", " * count($w_{i}$,c) : the number of times the word occurs in the specific class\n", " * $|V|$ : the size of vocabulary\n", " * Summation count(w,c) : sum of the number of times each word belonging to the vocabulary occurs in the specific class i.e. the word count of this class\n", "\n", "> ![image.png](data:image/png;base64,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)
\n", "Store inside a dictionary 'likelihoods' in the form:\n", "$likelihoods[word] = [positiveLikelihood, negativeLikelihood, neutralLikelihood]$
\n", "> For example :
$likelihoods['to']=[0.3,0.57,0.23]$" ], "metadata": { "id": "fITy2ozcXYCx" } }, { "cell_type": "code", "source": [ "likelihoods = {}\n", "# {Code Here}" ], "metadata": { "id": "I_1lINavXesD" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "labelsMap = {\"positive\":0, \"negative\":1, \"neutral\":2}" ], "metadata": { "id": "xpFHw53iXoO4" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Predictions and Evaluation\n", "Given a test data point, and the set of prior probabilities and likelihoods, we need to return the 'best' class c.
\n", "1. We will create a vector 'prob' of length equal to the number of classes, 3.
\n", "$prob = [0,0,0]$
\n", "2. For each class c, we will initially add our prior probability to prob.
\n", "3. Then for each word in the test data in our vocabulary, we will multiply the corresponding likelihood with prob.
\n", "4. Finally, the maximum index of our 'prob' vector will be the predicted class for the test data point.
\n", "5. Compare these to the actual labels to calculate F1_score, accuracy and confusion matrix. You can use scikit libraries for this.
" ], "metadata": { "id": "gDJkWdWSXtAH" } }, { "cell_type": "code", "source": [ "# Predictions\n", "for i,tweet in enumerate(ts_tweets):\n", " tweet = tweet.split(); \n", " actual_label = labelsMap[ts_labels[i]]; \n", " # {Code Here}" ], "metadata": { "id": "yPX3dbLmw6DV" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Evaluation\n", "# {Code Here}" ], "metadata": { "id": "D4a0Tc_BaCK7" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Scikit Implementation of Naive Bayes\n", "Use Scikit-Learn’s implementation of the na¨ıve Bayes classifier on the bag of words. Remember to implement one vs rest model with the in-built classifier in binary classification\n", "mode. Report the accuracy, F1 score, and confusion matrix of test using the library’s\n", "implementation." ], "metadata": { "id": "tgQgUubFaM0u" } }, { "cell_type": "code", "source": [ "# {Code Here}" ], "metadata": { "id": "Q1BzeUJfaYoL" }, "execution_count": null, "outputs": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" }, "colab": { "name": "PA4_Naive_Bayes", "provenance": [], "collapsed_sections": [] } }, "nbformat": 4, "nbformat_minor": 0 }