{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "qQg7y6QJ2Drm",
        "outputId": "40868762-1f72-49c0-b072-27b2bf9e0c1b"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Warning: Looks like you're using an outdated `kaggle` version (installed: 2.0.0), please consider upgrading to the latest version (2.0.1)\n",
            "Dataset URL: https://www.kaggle.com/datasets/kazanova/sentiment140\n",
            "License(s): other\n",
            "Downloading sentiment140.zip to /content\n",
            "100% 80.9M/80.9M [00:06<00:00, 13.3MB/s]\n",
            "\n"
          ]
        }
      ],
      "source": [
        "!kaggle datasets download -d kazanova/sentiment140"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "!unzip -q sentiment140.zip"
      ],
      "metadata": {
        "id": "XbYi6dpm2lr6"
      },
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "import os\n",
        "os.listdir()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "B1wqBpoe2xwD",
        "outputId": "3eebface-14f2-4d03-ff58-080688a5b8d5"
      },
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['.config',\n",
              " 'training.1600000.processed.noemoticon.csv',\n",
              " 'sentiment140.zip',\n",
              " 'sample_data']"
            ]
          },
          "metadata": {},
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import pandas as pd\n",
        "\n",
        "df = pd.read_csv(\n",
        "    \"training.1600000.processed.noemoticon.csv\",\n",
        "    encoding=\"latin-1\",\n",
        "    header=None\n",
        ")\n",
        "\n",
        "df.head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "cNkavq2K2_76",
        "outputId": "53dbffb8-89f9-459b-ec17-874915d8eabe"
      },
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   0           1                             2         3                4  \\\n",
              "0  0  1467810369  Mon Apr 06 22:19:45 PDT 2009  NO_QUERY  _TheSpecialOne_   \n",
              "1  0  1467810672  Mon Apr 06 22:19:49 PDT 2009  NO_QUERY    scotthamilton   \n",
              "2  0  1467810917  Mon Apr 06 22:19:53 PDT 2009  NO_QUERY         mattycus   \n",
              "3  0  1467811184  Mon Apr 06 22:19:57 PDT 2009  NO_QUERY          ElleCTF   \n",
              "4  0  1467811193  Mon Apr 06 22:19:57 PDT 2009  NO_QUERY           Karoli   \n",
              "\n",
              "                                                   5  \n",
              "0  @switchfoot http://twitpic.com/2y1zl - Awww, t...  \n",
              "1  is upset that he can't update his Facebook by ...  \n",
              "2  @Kenichan I dived many times for the ball. Man...  \n",
              "3    my whole body feels itchy and like its on fire   \n",
              "4  @nationwideclass no, it's not behaving at all....  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-e1a4cc94-52de-4d43-a3a3-299e6fe47d52\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>0</th>\n",
              "      <th>1</th>\n",
              "      <th>2</th>\n",
              "      <th>3</th>\n",
              "      <th>4</th>\n",
              "      <th>5</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0</td>\n",
              "      <td>1467810369</td>\n",
              "      <td>Mon Apr 06 22:19:45 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>_TheSpecialOne_</td>\n",
              "      <td>@switchfoot http://twitpic.com/2y1zl - Awww, t...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0</td>\n",
              "      <td>1467810672</td>\n",
              "      <td>Mon Apr 06 22:19:49 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>scotthamilton</td>\n",
              "      <td>is upset that he can't update his Facebook by ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0</td>\n",
              "      <td>1467810917</td>\n",
              "      <td>Mon Apr 06 22:19:53 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>mattycus</td>\n",
              "      <td>@Kenichan I dived many times for the ball. Man...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0</td>\n",
              "      <td>1467811184</td>\n",
              "      <td>Mon Apr 06 22:19:57 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>ElleCTF</td>\n",
              "      <td>my whole body feels itchy and like its on fire</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0</td>\n",
              "      <td>1467811193</td>\n",
              "      <td>Mon Apr 06 22:19:57 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>Karoli</td>\n",
              "      <td>@nationwideclass no, it's not behaving at all....</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-e1a4cc94-52de-4d43-a3a3-299e6fe47d52')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-e1a4cc94-52de-4d43-a3a3-299e6fe47d52 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-e1a4cc94-52de-4d43-a3a3-299e6fe47d52');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df"
            }
          },
          "metadata": {},
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "df.columns = [\"sentiment\", \"id\", \"date\", \"query\", \"user\", \"text\"]\n",
        "df.head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "UV71ng0J3XxW",
        "outputId": "24062139-6e95-45ce-954d-ba4b045261aa"
      },
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   sentiment          id                          date     query  \\\n",
              "0          0  1467810369  Mon Apr 06 22:19:45 PDT 2009  NO_QUERY   \n",
              "1          0  1467810672  Mon Apr 06 22:19:49 PDT 2009  NO_QUERY   \n",
              "2          0  1467810917  Mon Apr 06 22:19:53 PDT 2009  NO_QUERY   \n",
              "3          0  1467811184  Mon Apr 06 22:19:57 PDT 2009  NO_QUERY   \n",
              "4          0  1467811193  Mon Apr 06 22:19:57 PDT 2009  NO_QUERY   \n",
              "\n",
              "              user                                               text  \n",
              "0  _TheSpecialOne_  @switchfoot http://twitpic.com/2y1zl - Awww, t...  \n",
              "1    scotthamilton  is upset that he can't update his Facebook by ...  \n",
              "2         mattycus  @Kenichan I dived many times for the ball. Man...  \n",
              "3          ElleCTF    my whole body feels itchy and like its on fire   \n",
              "4           Karoli  @nationwideclass no, it's not behaving at all....  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-7a8b35f2-803b-4f3a-a3da-973ac6d1cee5\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sentiment</th>\n",
              "      <th>id</th>\n",
              "      <th>date</th>\n",
              "      <th>query</th>\n",
              "      <th>user</th>\n",
              "      <th>text</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0</td>\n",
              "      <td>1467810369</td>\n",
              "      <td>Mon Apr 06 22:19:45 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>_TheSpecialOne_</td>\n",
              "      <td>@switchfoot http://twitpic.com/2y1zl - Awww, t...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0</td>\n",
              "      <td>1467810672</td>\n",
              "      <td>Mon Apr 06 22:19:49 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>scotthamilton</td>\n",
              "      <td>is upset that he can't update his Facebook by ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0</td>\n",
              "      <td>1467810917</td>\n",
              "      <td>Mon Apr 06 22:19:53 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>mattycus</td>\n",
              "      <td>@Kenichan I dived many times for the ball. Man...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0</td>\n",
              "      <td>1467811184</td>\n",
              "      <td>Mon Apr 06 22:19:57 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>ElleCTF</td>\n",
              "      <td>my whole body feels itchy and like its on fire</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0</td>\n",
              "      <td>1467811193</td>\n",
              "      <td>Mon Apr 06 22:19:57 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>Karoli</td>\n",
              "      <td>@nationwideclass no, it's not behaving at all....</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-7a8b35f2-803b-4f3a-a3da-973ac6d1cee5')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-7a8b35f2-803b-4f3a-a3da-973ac6d1cee5 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-7a8b35f2-803b-4f3a-a3da-973ac6d1cee5');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df"
            }
          },
          "metadata": {},
          "execution_count": 5
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "df = df.sample(n=40000, random_state=42)\n",
        "df = df.reset_index(drop=True)\n",
        "\n",
        "print(df.shape)\n",
        "df.head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 224
        },
        "id": "3MHX71gr5ujg",
        "outputId": "d856ea19-8279-432b-bae6-b8cf914a1515"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "(40000, 6)\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   sentiment          id                          date     query  \\\n",
              "0          0  2200003196  Tue Jun 16 18:18:12 PDT 2009  NO_QUERY   \n",
              "1          0  1467998485  Mon Apr 06 23:11:14 PDT 2009  NO_QUERY   \n",
              "2          0  2300048954  Tue Jun 23 13:40:11 PDT 2009  NO_QUERY   \n",
              "3          0  1993474027  Mon Jun 01 10:26:07 PDT 2009  NO_QUERY   \n",
              "4          0  2256550904  Sat Jun 20 12:56:51 PDT 2009  NO_QUERY   \n",
              "\n",
              "              user                                               text  \n",
              "0  LaLaLindsey0609             @chrishasboobs AHHH I HOPE YOUR OK!!!   \n",
              "1      sexygrneyes  @misstoriblack cool , i have no tweet apps  fo...  \n",
              "2       sammydearr  @TiannaChaos i know  just family drama. its la...  \n",
              "3      Lamb_Leanne  School email won't open  and I have geography ...  \n",
              "4      yogicerdito                             upper airways problem   "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-a85a4b82-56a9-4af4-9426-b6d7dda840b5\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sentiment</th>\n",
              "      <th>id</th>\n",
              "      <th>date</th>\n",
              "      <th>query</th>\n",
              "      <th>user</th>\n",
              "      <th>text</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0</td>\n",
              "      <td>2200003196</td>\n",
              "      <td>Tue Jun 16 18:18:12 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>LaLaLindsey0609</td>\n",
              "      <td>@chrishasboobs AHHH I HOPE YOUR OK!!!</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0</td>\n",
              "      <td>1467998485</td>\n",
              "      <td>Mon Apr 06 23:11:14 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>sexygrneyes</td>\n",
              "      <td>@misstoriblack cool , i have no tweet apps  fo...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0</td>\n",
              "      <td>2300048954</td>\n",
              "      <td>Tue Jun 23 13:40:11 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>sammydearr</td>\n",
              "      <td>@TiannaChaos i know  just family drama. its la...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0</td>\n",
              "      <td>1993474027</td>\n",
              "      <td>Mon Jun 01 10:26:07 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>Lamb_Leanne</td>\n",
              "      <td>School email won't open  and I have geography ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0</td>\n",
              "      <td>2256550904</td>\n",
              "      <td>Sat Jun 20 12:56:51 PDT 2009</td>\n",
              "      <td>NO_QUERY</td>\n",
              "      <td>yogicerdito</td>\n",
              "      <td>upper airways problem</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a85a4b82-56a9-4af4-9426-b6d7dda840b5')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-a85a4b82-56a9-4af4-9426-b6d7dda840b5 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-a85a4b82-56a9-4af4-9426-b6d7dda840b5');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df",
              "summary": "{\n  \"name\": \"df\",\n  \"rows\": 40000,\n  \"fields\": [\n    {\n      \"column\": \"sentiment\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 2,\n        \"min\": 0,\n        \"max\": 4,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          4,\n          0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"id\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 194330097,\n        \"min\": 1467815753,\n        \"max\": 2329200255,\n        \"num_unique_values\": 39999,\n        \"samples\": [\n          2191947560,\n          1976571380\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"date\",\n      \"properties\": {\n        \"dtype\": \"object\",\n        \"num_unique_values\": 38889,\n        \"samples\": [\n          \"Wed Jun 03 00:16:23 PDT 2009\",\n          \"Wed Jun 03 02:50:15 PDT 2009\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"query\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 1,\n        \"samples\": [\n          \"NO_QUERY\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"user\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 36353,\n        \"samples\": [\n          \"MichelleBaker91\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"text\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 39929,\n        \"samples\": [\n          \"@dulani247 woooo!  of course it is  we all love to spam them hehe\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import nltk\n",
        "nltk.download('punkt_tab')\n",
        "import re\n",
        "import nltk\n",
        "from nltk.corpus import stopwords\n",
        "from nltk.tokenize import word_tokenize\n",
        "from nltk.stem import PorterStemmer\n",
        "\n",
        "nltk.download('punkt')\n",
        "nltk.download('stopwords')\n",
        "\n",
        "stemmer = PorterStemmer()\n",
        "stop_words = set(stopwords.words('english'))\n",
        "\n",
        "def preprocess_text(text):\n",
        "    # 1. Lowercase\n",
        "    text = text.lower()\n",
        "\n",
        "    # 2. Remove URLs\n",
        "    text = re.sub(r'http\\S+|www\\S+', '', text)\n",
        "\n",
        "    # 3. Remove special characters\n",
        "    text = re.sub(r'[^a-zA-Z\\s]', '', text)\n",
        "\n",
        "    # 4. Tokenization\n",
        "    tokens = word_tokenize(text)\n",
        "\n",
        "    # 5. Remove stopwords\n",
        "    tokens = [word for word in tokens if word not in stop_words]\n",
        "\n",
        "    # 6. Stemming\n",
        "    tokens = [stemmer.stem(word) for word in tokens]\n",
        "\n",
        "    # 7. Join back\n",
        "    return \" \".join(tokens)\n",
        "\n",
        "df[\"clean_text\"] = df[\"text\"].apply(preprocess_text)\n",
        "\n",
        "df[[\"text\", \"clean_text\"]].head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 316
        },
        "id": "xG7EA1uP3kDP",
        "outputId": "7128570f-51cb-40fa-9ebd-2d699883ab41"
      },
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "[nltk_data] Downloading package punkt_tab to /root/nltk_data...\n",
            "[nltk_data]   Package punkt_tab is already up-to-date!\n",
            "[nltk_data] Downloading package punkt to /root/nltk_data...\n",
            "[nltk_data]   Package punkt is already up-to-date!\n",
            "[nltk_data] Downloading package stopwords to /root/nltk_data...\n",
            "[nltk_data]   Package stopwords is already up-to-date!\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "                                                text  \\\n",
              "0             @chrishasboobs AHHH I HOPE YOUR OK!!!    \n",
              "1  @misstoriblack cool , i have no tweet apps  fo...   \n",
              "2  @TiannaChaos i know  just family drama. its la...   \n",
              "3  School email won't open  and I have geography ...   \n",
              "4                             upper airways problem    \n",
              "\n",
              "                                          clean_text  \n",
              "0                          chrishasboob ahhh hope ok  \n",
              "1                  misstoriblack cool tweet app razr  \n",
              "2  tiannachao know famili drama lamehey next time...  \n",
              "3  school email wont open geographi stuff revis s...  \n",
              "4                               upper airway problem  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-79bada6a-d574-436e-86b4-14f6bc85a9b8\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>text</th>\n",
              "      <th>clean_text</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>@chrishasboobs AHHH I HOPE YOUR OK!!!</td>\n",
              "      <td>chrishasboob ahhh hope ok</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>@misstoriblack cool , i have no tweet apps  fo...</td>\n",
              "      <td>misstoriblack cool tweet app razr</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>@TiannaChaos i know  just family drama. its la...</td>\n",
              "      <td>tiannachao know famili drama lamehey next time...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>School email won't open  and I have geography ...</td>\n",
              "      <td>school email wont open geographi stuff revis s...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>upper airways problem</td>\n",
              "      <td>upper airway problem</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-79bada6a-d574-436e-86b4-14f6bc85a9b8')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-79bada6a-d574-436e-86b4-14f6bc85a9b8 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-79bada6a-d574-436e-86b4-14f6bc85a9b8');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"df[[\\\"text\\\", \\\"clean_text\\\"]]\",\n  \"rows\": 5,\n  \"fields\": [\n    {\n      \"column\": \"text\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"@misstoriblack cool , i have no tweet apps  for my razr 2\",\n          \"upper airways problem \",\n          \"@TiannaChaos i know  just family drama. its lame.hey next time u hang out with kim n u guys like have a sleepover or whatever, ill call u\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"clean_text\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"misstoriblack cool tweet app razr\",\n          \"upper airway problem\",\n          \"tiannachao know famili drama lamehey next time u hang kim n u guy like sleepov whatev ill call u\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 12
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "\n",
        "X = df[\"clean_text\"]\n",
        "y = df[\"sentiment\"]\n",
        "\n",
        "X_train, X_test, y_train, y_test = train_test_split(\n",
        "    X, y,\n",
        "    test_size=0.30,\n",
        "    random_state=42,\n",
        "    stratify=y\n",
        ")\n",
        "\n",
        "print(\"X_train shape:\", X_train.shape)\n",
        "print(\"X_test shape:\", X_test.shape)\n",
        "print(\"y_train shape:\", y_train.shape)\n",
        "print(\"y_test shape:\", y_test.shape)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "X1g1EBy26x8o",
        "outputId": "b0020cd5-19a8-4431-cf62-8baf314995fd"
      },
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "X_train shape: (28000,)\n",
            "X_test shape: (12000,)\n",
            "y_train shape: (28000,)\n",
            "y_test shape: (12000,)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.feature_extraction.text import TfidfVectorizer\n",
        "\n",
        "vectorizer = TfidfVectorizer()\n",
        "\n",
        "X_train_vec = vectorizer.fit_transform(X_train)\n",
        "X_test_vec = vectorizer.transform(X_test)\n",
        "\n",
        "print(\"X_train_vec shape:\", X_train_vec.shape)\n",
        "print(\"X_test_vec shape:\", X_test_vec.shape)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_TEcOx777EGW",
        "outputId": "b795efea-76da-4544-a427-af254c81a0e4"
      },
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "X_train_vec shape: (28000, 34763)\n",
            "X_test_vec shape: (12000, 34763)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt\n",
        "from sklearn.metrics import confusion_matrix\n",
        "\n",
        "def plot_confusion_matrix(y_true, y_pred, title):\n",
        "    cm = confusion_matrix(y_true, y_pred)\n",
        "\n",
        "    plt.figure(figsize=(5,4))\n",
        "    sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')\n",
        "    plt.xlabel(\"Predicted\")\n",
        "    plt.ylabel(\"Actual\")\n",
        "    plt.title(title)\n",
        "    plt.show()"
      ],
      "metadata": {
        "id": "iNbKnOuV8bBr"
      },
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report\n",
        "\n",
        "lr_model = LogisticRegression(max_iter=1000)\n",
        "lr_model.fit(X_train_vec, y_train)\n",
        "\n",
        "y_pred_lr = lr_model.predict(X_test_vec)\n",
        "\n",
        "print(\"Accuracy:\", accuracy_score(y_test, y_pred_lr))\n",
        "print(\"Precision:\", precision_score(y_test, y_pred_lr, average='weighted'))\n",
        "print(\"Recall:\", recall_score(y_test, y_pred_lr, average='weighted'))\n",
        "print(\"F1-score:\", f1_score(y_test, y_pred_lr, average='weighted'))\n",
        "\n",
        "print(\"\\nClassification Report:\")\n",
        "print(classification_report(y_test, y_pred_lr))\n",
        "plot_confusion_matrix(y_test, y_pred_lr, \"Logistic Regression\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 684
        },
        "id": "S0Jbvq397fP7",
        "outputId": "92d940c6-65a9-4fb6-876f-987ae38383fd"
      },
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Accuracy: 0.75425\n",
            "Precision: 0.7545425047183684\n",
            "Recall: 0.75425\n",
            "F1-score: 0.7541844654234939\n",
            "\n",
            "Classification Report:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.76      0.74      0.75      6005\n",
            "           4       0.75      0.77      0.76      5995\n",
            "\n",
            "    accuracy                           0.75     12000\n",
            "   macro avg       0.75      0.75      0.75     12000\n",
            "weighted avg       0.75      0.75      0.75     12000\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x400 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.ensemble import RandomForestClassifier\n",
        "\n",
        "rf_model = RandomForestClassifier(\n",
        "    n_estimators=30,\n",
        "    max_depth=20,\n",
        "    random_state=42,\n",
        "    n_jobs=-1\n",
        ")\n",
        "\n",
        "rf_model.fit(X_train_vec, y_train)\n",
        "\n",
        "y_pred_rf = rf_model.predict(X_test_vec)\n",
        "\n",
        "print(\"Accuracy:\", accuracy_score(y_test, y_pred_rf))\n",
        "print(\"Precision:\", precision_score(y_test, y_pred_rf, average='weighted'))\n",
        "print(\"Recall:\", recall_score(y_test, y_pred_rf, average='weighted'))\n",
        "print(\"F1-score:\", f1_score(y_test, y_pred_rf, average='weighted'))\n",
        "\n",
        "print(\"\\nClassification Report:\")\n",
        "print(classification_report(y_test, y_pred_rf))\n",
        "\n",
        "plot_confusion_matrix(y_test, y_pred_rf, \"Random Forest\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 684
        },
        "id": "8O0U4f8o7nuK",
        "outputId": "fdc5e7fd-1cf0-4bb7-e758-8e8feab690ac"
      },
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Accuracy: 0.70375\n",
            "Precision: 0.7045558101676707\n",
            "Recall: 0.70375\n",
            "F1-score: 0.703471189636717\n",
            "\n",
            "Classification Report:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.72      0.67      0.69      6005\n",
            "           4       0.69      0.73      0.71      5995\n",
            "\n",
            "    accuracy                           0.70     12000\n",
            "   macro avg       0.70      0.70      0.70     12000\n",
            "weighted avg       0.70      0.70      0.70     12000\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x400 with 2 Axes>"
            ],
            "image/png": "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zQH4+eefTd9N6XA48n0OEck/BaKUCR06dOCdd97B09OTGjVqUK7cf/9oe3t7u/Q9ffo0YWFhzJ492zRO9erVC3V+Ly+vAh9z+vRpABYvXswNN9zgss9utxdqHiJSeApEKRO8vb2pU6dOvvq2aNGCL774An9/f3x8fC7bJygoiH/961+0a9cOgPPnz7Np0yZatGhx2f6NGzcmLy+P1atX07FjR9P+ixVqbm6usy00NBS73c6+ffv+srJs2LAhCxcudGlbv3791S9SRApMi2rEch555BGqVatGt27d+OGHH9i9ezdJSUk888wz/P777wA8++yzTJo0iQULFrBz506efvrpKz5DeNNNNxEZGUn//v1ZsGCBc8wvv/wSgBtvvBGbzcaiRYs4fPgwp0+fplKlSowcOZLhw4cza9Ysdu3axY8//sj06dOZNWsWAIMGDeKXX35h1KhRpKamMmfOHBISEor7JRKxJAWiWE6FChVYs2YNtWrVokePHjRs2JABAwZw7tw5Z8U4YsQI+vbtS2RkJA6Hg0qVKnH//fdfcdx33nmHXr168fTTT9OgQQOeeOIJMjMzAbjhhht4+eWXee655wgICGDIkCEAvPLKK7z44ovExsbSsGFD7r33XhYvXkxISAgAtWrV4uuvv2bBggU0bdqU+Ph4Jk6cWIyvjoh12Yy/WiUgIiJiIaoQRUREUCCKiIgACkQRERFAgSgiIgIoEEVERAAFooiICKBAFBERARSIIiIigAJRREQEUCCKiIgACkQREREA/g8dNUsAIdWrWQAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.svm import LinearSVC\n",
        "\n",
        "svm_model = LinearSVC()\n",
        "svm_model.fit(X_train_vec, y_train)\n",
        "\n",
        "y_pred_svm = svm_model.predict(X_test_vec)\n",
        "\n",
        "print(\"Accuracy:\", accuracy_score(y_test, y_pred_svm))\n",
        "print(\"Precision:\", precision_score(y_test, y_pred_svm, average='weighted'))\n",
        "print(\"Recall:\", recall_score(y_test, y_pred_svm, average='weighted'))\n",
        "print(\"F1-score:\", f1_score(y_test, y_pred_svm, average='weighted'))\n",
        "\n",
        "print(\"\\nClassification Report:\")\n",
        "print(classification_report(y_test, y_pred_svm))\n",
        "\n",
        "plot_confusion_matrix(y_test, y_pred_svm, \"SVM\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 684
        },
        "id": "J5RGL8V28lpL",
        "outputId": "0f6ec3bc-24e2-410b-eeb7-50017daac896"
      },
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Accuracy: 0.7414166666666666\n",
            "Precision: 0.7414550297145575\n",
            "Recall: 0.7414166666666666\n",
            "F1-score: 0.7414084079338271\n",
            "\n",
            "Classification Report:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.74      0.74      0.74      6005\n",
            "           4       0.74      0.75      0.74      5995\n",
            "\n",
            "    accuracy                           0.74     12000\n",
            "   macro avg       0.74      0.74      0.74     12000\n",
            "weighted avg       0.74      0.74      0.74     12000\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x400 with 2 Axes>"
            ],
            "image/png": "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VatW5aGHHnLsM2vWLGJiYnj//ffZunUrv/76K6tXr77mOZ988kmWLVvGvHnz2L9/P2+99RZVq1alXr16fPrppwCkpqZy/Phx5s6dC0BUVBQffPABixYtYu/evYSHhzNkyBASExOBS8Hdv39/evfuTUpKCsOHD+eFF14oq69NxNzsIn9woaGh9r59+9rtdru9sLDQHh8fb7darfYJEybYQ0ND7X5+fvacnBxH+w8//NDeuHFje2FhoWNdTk6O3d3d3b5hwwa73W63165d2x4dHe3YnpeXZw8ICHCcx2632zt37mwfN26c3W6321NTU+2APT4+/op93Lx5sx2wnz592rHu4sWL9ipVqti3bdvm1PaZZ56x//nPf7bb7XZ7ZGSkPSgoyGn75MmTDccSkRune4hSIaxbt46qVauSl5dHYWEhgwYN4pVXXiEsLIzmzZs73TfctWsXBw8exNPT0+kYFy9e5NChQ5w9e5bjx487/SZkpUqVaNeunWHY9LKUlBRcXV3p3Llzkft88OBBLly4QI8ePZzW5+bm0rp1awD2799v+G1Km81W5HOISNEpEKVC6Nq1KwsXLsTNzY06depQqdL//mp7eHg4tT1//jxt27Zl6dKlhuPUqlWrROd3d3cv9j7nz58HIC4ujrp16zpts1qtJeqHiJScAlEqBA8PDxo2bFiktm3atGH58uX4+vri5eV1xTa1a9fmP//5D506dQIgPz+f5ORk2rRpc8X2zZs3p7CwkMTERLp3727YfrlCLSgocKwLCgrCarWSlpZ21cqyadOmrF271mnd9u3br3+RIlJsmlQjpjN48GBq1qxJ3759+eqrrzh8+DAJCQk899xz/PTTTwCMGzeOmTNnsmbNGg4cOMDo0aOv+Qzh7bffTmhoKE8//TRr1qxxHHPFihUANGjQAIvFwrp16zh58iTnz5/H09OTCRMmEB4ezpIlSzh06BDffPMNb7zxBkuWLAFg5MiRfP/990ycOJHU1FRiY2OJiYkp669IxJQUiGI6VapUYcuWLdSvX5/+/fvTtGlTnnnmGS5evOioGJ9//nmGDh1KaGgoNpsNT09PHn300Wsed+HChQwcOJDRo0fTpEkTRowYQVZWFgB169bl73//Oy+88AJ+fn6MGTMGgGnTpvHiiy8SFRVF06ZNeeihh4iLiyMwMBCA+vXr8+mnn7JmzRpatmzJokWLmDFjRhl+OyLmZbFfbZaAiIiIiahCFBERQYEoIiICKBBFREQABaKIiAigQBQREQEUiCIiIoACUUREBFAgioiIAApEERERQIEoIiICKBBFREQA+H/Qde3wqEfNOAAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.naive_bayes import MultinomialNB\n",
        "\n",
        "nb_model = MultinomialNB()\n",
        "nb_model.fit(X_train_vec, y_train)\n",
        "\n",
        "y_pred_nb = nb_model.predict(X_test_vec)\n",
        "\n",
        "print(\"Accuracy:\", accuracy_score(y_test, y_pred_nb))\n",
        "print(\"Precision:\", precision_score(y_test, y_pred_nb, average='weighted'))\n",
        "print(\"Recall:\", recall_score(y_test, y_pred_nb, average='weighted'))\n",
        "print(\"F1-score:\", f1_score(y_test, y_pred_nb, average='weighted'))\n",
        "\n",
        "print(\"\\nClassification Report:\")\n",
        "print(classification_report(y_test, y_pred_nb))\n",
        "\n",
        "plot_confusion_matrix(y_test, y_pred_nb, \"Naive Bayes\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 684
        },
        "id": "MStIOMHS8pum",
        "outputId": "24d5760d-2331-4184-8e56-1f661951a332"
      },
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Accuracy: 0.7368333333333333\n",
            "Precision: 0.7414239736347449\n",
            "Recall: 0.7368333333333333\n",
            "F1-score: 0.7355528939023437\n",
            "\n",
            "Classification Report:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.71      0.81      0.75      6005\n",
            "           4       0.77      0.67      0.72      5995\n",
            "\n",
            "    accuracy                           0.74     12000\n",
            "   macro avg       0.74      0.74      0.74     12000\n",
            "weighted avg       0.74      0.74      0.74     12000\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x400 with 2 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcQAAAGJCAYAAAAUmUOtAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQ+tJREFUeJzt3XlcVdX+//HXAeQICjgymFokpeIs9VVuN4c00cg0zbRScSwVLbXUuNcm/SVmmVlOpRXmUJqV1+SaEU6ZlIphTlE5pKXgDIp6QNi/P/x6vh23GSCDsd/PHvuRZ+2111n7ZL797L32wWYYhoGIiIjFuZX2BERERG4ECkQREREUiCIiIoACUUREBFAgioiIAApEERERQIEoIiICKBBFREQABaKIiAigQJQyqE2bNrRp06a0pyEifzMKRCkVcXFx2Gw2ypcvz++//27a36ZNGxo2bFgKMyu8Nm3aYLPZnJunpyfBwcE8/vjjHDp0qLSnJyJ/waO0JyDW5nA4mDx5Mm+99VaRjfnll18W2VgFVbNmTWJjYwHIzs5m9+7dzJkzh9WrV7Nnzx68vb1LbW4icm0KRClVTZs2Ze7cucTExFCjRo0iGdPT07NIxikMPz8/evfu7dIWHBzM8OHD+eabb7j33ntLaWYi8ld0yVRK1b/+9S9yc3OZPHnyX/Z9//33ueeee/D398dutxMaGsrs2bNN/f54DzE9PR0PDw9eeuklU7/U1FRsNhszZsxwtp0+fZqRI0dSq1Yt7HY7ISEhvPLKK+Tl5RX6HAMDAwHw8Pi/v3/++uuvDBs2jLp16+Ll5UXVqlXp0aMHBw4ccPbZt28fNpuNadOmmcbctGkTNpuNDz/80Nn2+++/M2DAAAICArDb7TRo0ID33nvPdOxbb71FgwYN8Pb2pnLlytxxxx0sXry40OcnUlaoQpRSFRwcTN++fZk7dy7PPvvsNavE2bNn06BBAx544AE8PDz4/PPPGTZsGHl5eURHR1/1mICAAFq3bs3SpUt54YUXXPYtWbIEd3d3evToAcC5c+do3bo1v//+O0888QS1a9dm06ZNxMTEcOTIEd54442/PJ/c3FyOHz8OQE5ODnv27OGFF14gJCSEu+66y9lvy5YtbNq0iV69elGzZk0OHDjA7NmzadOmDbt378bb25tbb72Vu+66i0WLFjFq1CiX91m0aBE+Pj506dIFuBT8LVu2xGazMXz4cKpXr86qVasYOHAgmZmZjBw5EoC5c+fy5JNP8tBDD/HUU09x4cIFfvjhB7777jseffTRvzw/kTLNECkF77//vgEYW7ZsMfbu3Wt4eHgYTz75pHN/69atjQYNGrgcc+7cOdM4ERERxq233urS1rp1a6N169bO12+//bYBGDt27HDpFxoaatxzzz3O1xMnTjQqVKhg/PTTTy79nn32WcPd3d04ePDgNc+pdevWBmDa6tevb+zbt+8vzyUpKckAjA8++MA09z179jjbsrOzjWrVqhlRUVHOtoEDBxpBQUHG8ePHXcbs1auX4efn53y/Ll26mD5XEblEl0yl1N1666306dOHd955hyNHjvxpPy8vL+evMzIyOH78OK1bt2bfvn1kZGT86XHdunXDw8ODJUuWONt27tzJ7t276dmzp7Pt448/5u6776Zy5cocP37cubVv357c3Fw2bNjwl+dyyy23kJCQQEJCAqtWreKNN94gIyODTp06cezYsaueS05ODidOnCAkJIRKlSqxbds2576HH36Y8uXLs2jRImfb6tWrOX78uPNepWEYfPLJJ3Tu3BnDMFzmHhERQUZGhnPMSpUq8dtvv7Fly5a/PBcRyyntRBZr+mOFaBiGqUq8WoW4ceNGo127doa3t7epCvv111+d/a6sEA3jUiV5++23O1+PHz/e8PDwMI4dO+Zs8/LyumqFd3l7/fXXr3lOV5uzYRjG1q1bDcAYPXq0s+3cuXPGc889Z9SsWdOw2Wwu79O/f3+X43v06OFSBffq1cu46aabjNzcXMMwDCM9Pf2a8waMTz/91DAMw9i9e7dx0003GYAREhJiDBs2zNi4ceM1z0vEKnQPUW4It956K7179+add97h2WefNe3fu3cv7dq1o169erz++uvUqlULT09P/vvf/zJt2rS/XPTSq1cv+vfvT0pKCk2bNmXp0qW0a9eOatWqOfvk5eVx7733Mnbs2KuOcfvttxfq3MLCwvDz83OpMEeMGMH777/PyJEjCQ8Px8/PD5vNRq9evUzn0rdvXz7++GM2bdpEo0aNWLFiBcOGDcPNzc05b4DevXsTFRV11Tk0btwYgPr165OamsrKlSv54osv+OSTT5g1axbPP//8VRceiViJAlFuGOPHj2fhwoW88sorpn2ff/45DoeDFStWULt2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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.tree import DecisionTreeClassifier\n",
        "\n",
        "dt_model = DecisionTreeClassifier(random_state=42)\n",
        "dt_model.fit(X_train_vec, y_train)\n",
        "\n",
        "y_pred_dt = dt_model.predict(X_test_vec)\n",
        "\n",
        "print(\"DT Accuracy:\", accuracy_score(y_test, y_pred_dt))\n",
        "print(\"DT Precision:\", precision_score(y_test, y_pred_dt, average='weighted'))\n",
        "print(\"DT Recall:\", recall_score(y_test, y_pred_dt, average='weighted'))\n",
        "print(\"DT F1:\", f1_score(y_test, y_pred_dt, average='weighted'))\n",
        "\n",
        "print(\"\\nClassification Report:\")\n",
        "print(classification_report(y_test, y_pred_dt))\n",
        "\n",
        "plot_confusion_matrix(y_test, y_pred_dt, \"Decision Tree\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 684
        },
        "id": "AqFIuZoMI4uV",
        "outputId": "12bb1a53-e808-425f-b721-38ee5fe3a2bb"
      },
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "DT Accuracy: 0.686\n",
            "DT Precision: 0.6860098114322309\n",
            "DT Recall: 0.686\n",
            "DT F1: 0.6859939291915125\n",
            "\n",
            "Classification Report:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.68      0.69      0.69      6005\n",
            "           4       0.69      0.68      0.68      5995\n",
            "\n",
            "    accuracy                           0.69     12000\n",
            "   macro avg       0.69      0.69      0.69     12000\n",
            "weighted avg       0.69      0.69      0.69     12000\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x400 with 2 Axes>"
            ],
            "image/png": "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27rJycmGe9Ivvb/0DOyr9cnIyOD8+fMFPi5dQxQRMaEbuQ/xSk8I++sDUi5Xv359EhMTSU9PZ+XKlYSHhxMfH09gYCDPPPO/r/8KCgrC39+fzp07c/DgQer+5dF+JU2BKCJiQjcyqeZKTwi7FhcXF+rVqwdAcHAw27ZtY86cObz99tuGvi1bXvwOzV9//ZW6devanmp2uZSUFODiE88u/e+ltsv7eHp64ubmVuBx6pSpiIgJleX3Iebn51/1mmNiYiIA/v7+AISEhLB7925OnDhh6xMbG4unp6fttGtISAgbNmyw205sbKzddcqCUIUoImJCpfXotsjISO677z5q1arFmTNnWLp0KXFxcaxfv56DBw+ydOlS7r//fipXrsyuXbsYOXIk7dq1o/F/H+DetWtXAgMD6dOnDzNmzCA5OZmJEycSERFhq1IHDx7MvHnzGDduHP3792fjxo0sX76cmJiYQo1VgSgiYkKldR/iiRMn6Nu3L8ePH8fLy4vGjRuzfv167rnnHn7//Xe+/vprZs+eTWZmJjVr1qRXr15MnPi/59U6Ojqydu1ahgwZQkhICJUqVSI8PNzuvsWAgABiYmIYOXIkc+bMoUaNGrz33nuFugcRdB+iyA3RfYhSWor7PsSmL224fqerSHypczGO5OahClFExIT0bRdGCkQRERNSHhopEEVETEgVopECUUTEhJSHRgpEERETUoVopBvzRUREUIUoImJKKhCNFIgiIiakU6ZGCkQRERNSHhopEEVETEgVopECUUTEhJSHRpplKiIigipEERFT0ilTIwWiiIgJKQ+NFIgiIiakCtFIgSgiYkIKRCMFooiICSkPjTTLVEREBFWIIiKmpFOmRgpEERETUh4aKRBFRExIFaKRAlFExISUh0YKRBERE3JQIhpolqmIiAiqEEVETEkFopECUUTEhDSpxkiBKCJiQg7KQwMFooiICalCNFIgioiYkPLQSLNMRUREUIUoImJKFlQi/pUCUUTEhDSpxkiBKCJiQppUY6RAFBExIeWhkQJRRMSE9CxTI80yFRERQRWiiIgpqUA0UiCKiJiQJtUYKRBFRExIeWikQBQRMSFNqjFSIIqImJDi0KhAgbhmzZoCb/DBBx8s8mBERETKSoECsUePHgXamMViIS8v70bGIyIipUCTaowKFIj5+fklPQ4RESlFepapka4h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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import pandas as pd\n",
        "\n",
        "results = pd.DataFrame([\n",
        "    {\n",
        "        \"Model\": \"Logistic Regression\",\n",
        "        \"Accuracy\": accuracy_score(y_test, y_pred_lr),\n",
        "        \"Precision\": precision_score(y_test, y_pred_lr, average='weighted'),\n",
        "        \"Recall\": recall_score(y_test, y_pred_lr, average='weighted'),\n",
        "        \"F1 Score\": f1_score(y_test, y_pred_lr, average='weighted')\n",
        "    },\n",
        "    {\n",
        "        \"Model\": \"Linear SVM\",\n",
        "        \"Accuracy\": accuracy_score(y_test, y_pred_svm),\n",
        "        \"Precision\": precision_score(y_test, y_pred_svm, average='weighted'),\n",
        "        \"Recall\": recall_score(y_test, y_pred_svm, average='weighted'),\n",
        "        \"F1 Score\": f1_score(y_test, y_pred_svm, average='weighted')\n",
        "    },\n",
        "    {\n",
        "        \"Model\": \"Naive Bayes\",\n",
        "        \"Accuracy\": accuracy_score(y_test, y_pred_nb),\n",
        "        \"Precision\": precision_score(y_test, y_pred_nb, average='weighted'),\n",
        "        \"Recall\": recall_score(y_test, y_pred_nb, average='weighted'),\n",
        "        \"F1 Score\": f1_score(y_test, y_pred_nb, average='weighted')\n",
        "    },\n",
        "    {\n",
        "    \"Model\": \"Random Forest\",\n",
        "    \"Accuracy\": accuracy_score(y_test, y_pred_rf),\n",
        "    \"Precision\": precision_score(y_test, y_pred_rf, average='weighted'),\n",
        "    \"Recall\": recall_score(y_test, y_pred_rf, average='weighted'),\n",
        "    \"F1 Score\": f1_score(y_test, y_pred_rf, average='weighted')\n",
        "},\n",
        "\n",
        "    {\n",
        "    \"Model\": \"Decision Tree\",\n",
        "    \"Accuracy\": accuracy_score(y_test, y_pred_dt),\n",
        "    \"Precision\": precision_score(y_test, y_pred_dt, average='weighted'),\n",
        "    \"Recall\": recall_score(y_test, y_pred_dt, average='weighted'),\n",
        "    \"F1 Score\": f1_score(y_test, y_pred_dt, average='weighted')\n",
        "}\n",
        "])\n",
        "\n",
        "results"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "8pqLd1obIR9K",
        "outputId": "aad3dc2b-261c-4003-f98e-71ee49a4a826"
      },
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "                 Model  Accuracy  Precision    Recall  F1 Score\n",
              "0  Logistic Regression  0.754250   0.754543  0.754250  0.754184\n",
              "1           Linear SVM  0.741417   0.741455  0.741417  0.741408\n",
              "2          Naive Bayes  0.736833   0.741424  0.736833  0.735553\n",
              "3        Random Forest  0.703750   0.704556  0.703750  0.703471\n",
              "4        Decision Tree  0.686000   0.686010  0.686000  0.685994"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-1a8673b2-645c-4370-801b-979564fe4cbf\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Model</th>\n",
              "      <th>Accuracy</th>\n",
              "      <th>Precision</th>\n",
              "      <th>Recall</th>\n",
              "      <th>F1 Score</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>Logistic Regression</td>\n",
              "      <td>0.754250</td>\n",
              "      <td>0.754543</td>\n",
              "      <td>0.754250</td>\n",
              "      <td>0.754184</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>Linear SVM</td>\n",
              "      <td>0.741417</td>\n",
              "      <td>0.741455</td>\n",
              "      <td>0.741417</td>\n",
              "      <td>0.741408</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>Naive Bayes</td>\n",
              "      <td>0.736833</td>\n",
              "      <td>0.741424</td>\n",
              "      <td>0.736833</td>\n",
              "      <td>0.735553</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>Random Forest</td>\n",
              "      <td>0.703750</td>\n",
              "      <td>0.704556</td>\n",
              "      <td>0.703750</td>\n",
              "      <td>0.703471</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>Decision Tree</td>\n",
              "      <td>0.686000</td>\n",
              "      <td>0.686010</td>\n",
              "      <td>0.686000</td>\n",
              "      <td>0.685994</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-1a8673b2-645c-4370-801b-979564fe4cbf')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-1a8673b2-645c-4370-801b-979564fe4cbf button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-1a8673b2-645c-4370-801b-979564fe4cbf');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "  <div id=\"id_fee68c56-0908-4618-aaf2-238bf255a47a\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('results')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_fee68c56-0908-4618-aaf2-238bf255a47a button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('results');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "results",
              "summary": "{\n  \"name\": \"results\",\n  \"rows\": 5,\n  \"fields\": [\n    {\n      \"column\": \"Model\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"Linear SVM\",\n          \"Decision Tree\",\n          \"Naive Bayes\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Accuracy\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.02844357230650809,\n        \"min\": 0.686,\n        \"max\": 0.75425,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.7414166666666666,\n          0.686,\n          0.7368333333333333\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Precision\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.028938251552300592,\n        \"min\": 0.6860098114322309,\n        \"max\": 0.7545425047183684,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.7414550297145575,\n          0.6860098114322309,\n          0.7414239736347449\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Recall\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.02844357230650809,\n        \"min\": 0.686,\n        \"max\": 0.75425,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.7414166666666666,\n          0.686,\n          0.7368333333333333\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"F1 Score\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.02834361839144913,\n        \"min\": 0.6859939291915125,\n        \"max\": 0.7541844654234939,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.7414084079338271,\n          0.6859939291915125,\n          0.7355528939023437\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 24
        }
      ]
    }
  ]
}