diff --git a/Fake-News-Classification/Dataset/README.md b/Fake-News-Classification/Dataset/README.md new file mode 100644 index 000000000..d22ba02d2 --- /dev/null +++ b/Fake-News-Classification/Dataset/README.md @@ -0,0 +1,97 @@ +# Fake News Classification using DL + +## PROJECT TITLE + +Fake News Detection using Deep Learning + +## GOAL + +To identify whether the given news is fake or not. + +## DATASET + +The link for the dataset used in this project: https://www.kaggle.com/competitions/fake-news/data?select=train.csv + + +## DESCRIPTION + +This project aims to identify whether the given news is fake or not by extracting meaning and semantics of the given news. + +## WHAT I HAD DONE + +1. Data collection: From the link of the dataset given above. +2. Data preprocessing: Preprocessed the news by combining title and text to create a new feature and did some augementation like tokeinizing and vectorising before passing them to model training +3. Model selection: Self Designed model having a Embedding Layer followed by Global Pooling Layer and then 2 Dense layers and then output layer.Second model had a Embedding layer followed by a RNN layer and a Dense output layer. +4. Comparative analysis: Compared the accuracy score of all the models. + +## MODELS SUMMARY + +Model-1: "sequential" +_________________________________________________________________ + Layer (type) Output Shape Param # +================================================================= + embedding (Embedding) (None, 12140, 182) 30222010 + + global_average_pooling1d ( (None, 182) 0 + GlobalAveragePooling1D) + + dense (Dense) (None, 96) 17568 + + dense_1 (Dense) (None, 24) 2328 + + dense_2 (Dense) (None, 1) 25 + +================================================================= +Total params: 30241931 (115.36 MB) +Trainable params: 30241931 (115.36 MB) +Non-trainable params: 0 (0.00 Byte) + +Model-2: "sequential_3" +_________________________________________________________________ + Layer (type) Output Shape Param # +================================================================= + embedding_3 (Embedding) (None, 12140, 100) 16605500 + + simple_rnn (SimpleRNN) (None, 10) 1110 + + dense_5 (Dense) (None, 1) 11 + +================================================================= +Total params: 16606621 (63.35 MB) +Trainable params: 16606621 (63.35 MB) +Non-trainable params: 0 (0.00 Byte) + +## LIBRARIES NEEDED + +The following libraries are required to run this project: + +- nltk +- pandas +- matplotlib +- tensorflow +- keras +- sklearn + +## EVALUATION METRICS + +The evaluation metrics I used to assess the models: + +- Accuracy +- Loss + +It is shown using Confusion Matrix in the Images folder + +## RESULTS +Results on Val dataset: +For Model-1: +Accuracy:96.11% +loss: 0.1350 + +For Model-2: +Accuracy:85.03% +loss: 0.1439 + +## CONCLUSION +Based on results we can draw following conclusions: + +1.The model-1 showed high validation accuracy of 96.11% and loss of 0.1350.Thus the model-1 worked fairly well identifying 2874 fake articles from a total of 3044.The first model performed better.The second model had good training accuracy but less test accuracy hinting towards overfitting.Maybe the key reason being in fake news it is important to capture overall sentiment better than individual word sentiment. diff --git a/Fake-News-Classification/Images/Dataset.png b/Fake-News-Classification/Images/Dataset.png new file mode 100644 index 000000000..1e317542d Binary files /dev/null and b/Fake-News-Classification/Images/Dataset.png differ diff --git a/Fake-News-Classification/Images/EDA.png b/Fake-News-Classification/Images/EDA.png new file mode 100644 index 000000000..17401792b Binary files /dev/null and b/Fake-News-Classification/Images/EDA.png differ diff --git a/Fake-News-Classification/Images/EDA1.png b/Fake-News-Classification/Images/EDA1.png new file mode 100644 index 000000000..ddf9bc5f0 Binary files /dev/null and b/Fake-News-Classification/Images/EDA1.png differ diff --git a/Fake-News-Classification/Images/metrics.png b/Fake-News-Classification/Images/metrics.png new file mode 100644 index 000000000..1dc7d3150 Binary files /dev/null and b/Fake-News-Classification/Images/metrics.png differ diff --git a/Fake-News-Classification/Images/model.png b/Fake-News-Classification/Images/model.png new file mode 100644 index 000000000..a8cd84df6 Binary files /dev/null and b/Fake-News-Classification/Images/model.png differ diff --git a/Fake-News-Classification/Images/model2.png b/Fake-News-Classification/Images/model2.png new file mode 100644 index 000000000..b95d80c07 Binary files /dev/null and b/Fake-News-Classification/Images/model2.png differ diff --git a/Fake-News-Classification/Images/model2metrics.png b/Fake-News-Classification/Images/model2metrics.png new file mode 100644 index 000000000..e7631795b Binary files /dev/null and b/Fake-News-Classification/Images/model2metrics.png differ diff --git a/Fake-News-Classification/Model/PridictionModel.ipynb b/Fake-News-Classification/Model/PridictionModel.ipynb new file mode 100644 index 000000000..6b37ebbe1 --- /dev/null +++ b/Fake-News-Classification/Model/PridictionModel.ipynb @@ -0,0 +1,2513 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:29.636394Z", + "iopub.status.busy": "2021-05-25T06:50:29.636041Z", + "iopub.status.idle": "2021-05-25T06:50:29.643277Z", + "shell.execute_reply": "2021-05-25T06:50:29.642127Z", + "shell.execute_reply.started": "2021-05-25T06:50:29.636365Z" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import sklearn\n", + "import itertools\n", + "import numpy as np\n", + "import seaborn as sb\n", + "import re\n", + "import nltk\n", + "import pickle\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.metrics import accuracy_score\n", + "from sklearn.metrics import confusion_matrix\n", + "from matplotlib import pyplot as plt\n", + "from sklearn.linear_model import PassiveAggressiveClassifier,LogisticRegression\n", + "from nltk.stem import WordNetLemmatizer\n", + "from nltk.corpus import stopwords" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:29.656569Z", + "iopub.status.busy": "2021-05-25T06:50:29.656203Z", + "iopub.status.idle": "2021-05-25T06:50:32.048864Z", + "shell.execute_reply": "2021-05-25T06:50:32.047882Z", + "shell.execute_reply.started": "2021-05-25T06:50:29.65654Z" + } + }, + "outputs": [], + "source": [ + "train_df = pd.read_csv('train.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.05136Z", + "iopub.status.busy": "2021-05-25T06:50:32.051032Z", + "iopub.status.idle": "2021-05-25T06:50:32.089516Z", + "shell.execute_reply": "2021-05-25T06:50:32.088399Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.051329Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idtitleauthortextlabel
00House Dem Aide: We Didn’t Even See Comey’s Let...Darrell LucusHouse Dem Aide: We Didn’t Even See Comey’s Let...1
11FLYNN: Hillary Clinton, Big Woman on Campus - ...Daniel J. FlynnEver get the feeling your life circles the rou...0
22Why the Truth Might Get You FiredConsortiumnews.comWhy the Truth Might Get You Fired October 29, ...1
3315 Civilians Killed In Single US Airstrike Hav...Jessica PurkissVideos 15 Civilians Killed In Single US Airstr...1
44Iranian woman jailed for fictional unpublished...Howard PortnoyPrint \\nAn Iranian woman has been sentenced to...1
55Jackie Mason: Hollywood Would Love Trump if He...Daniel NussbaumIn these trying times, Jackie Mason is the Voi...0
66Life: Life Of Luxury: Elton John’s 6 Favorite ...NaNEver wonder how Britain’s most iconic pop pian...1
77Benoît Hamon Wins French Socialist Party’s Pre...Alissa J. RubinPARIS — France chose an idealistic, traditi...0
88Excerpts From a Draft Script for Donald Trump’...NaNDonald J. Trump is scheduled to make a highly ...0
99A Back-Channel Plan for Ukraine and Russia, Co...Megan Twohey and Scott ShaneA week before Michael T. Flynn resigned as nat...0
1010Obama’s Organizing for Action Partners with So...Aaron KleinOrganizing for Action, the activist group that...0
1111BBC Comedy Sketch \"Real Housewives of ISIS\" Ca...Chris TomlinsonThe BBC produced spoof on the “Real Housewives...0
1212Russian Researchers Discover Secret Nazi Milit...Amando FlavioThe mystery surrounding The Third Reich and Na...1
1313US Officials See No Link Between Trump and RussiaJason DitzClinton Campaign Demands FBI Affirm Trump's Ru...1
1414Re: Yes, There Are Paid Government Trolls On S...AnotherAnnieYes, There Are Paid Government Trolls On Socia...1
\n", + "
" + ], + "text/plain": [ + " id title \\\n", + "0 0 House Dem Aide: We Didn’t Even See Comey’s Let... \n", + "1 1 FLYNN: Hillary Clinton, Big Woman on Campus - ... \n", + "2 2 Why the Truth Might Get You Fired \n", + "3 3 15 Civilians Killed In Single US Airstrike Hav... \n", + "4 4 Iranian woman jailed for fictional unpublished... \n", + "5 5 Jackie Mason: Hollywood Would Love Trump if He... \n", + "6 6 Life: Life Of Luxury: Elton John’s 6 Favorite ... \n", + "7 7 Benoît Hamon Wins French Socialist Party’s Pre... \n", + "8 8 Excerpts From a Draft Script for Donald Trump’... \n", + "9 9 A Back-Channel Plan for Ukraine and Russia, Co... \n", + "10 10 Obama’s Organizing for Action Partners with So... \n", + "11 11 BBC Comedy Sketch \"Real Housewives of ISIS\" Ca... \n", + "12 12 Russian Researchers Discover Secret Nazi Milit... \n", + "13 13 US Officials See No Link Between Trump and Russia \n", + "14 14 Re: Yes, There Are Paid Government Trolls On S... \n", + "\n", + " author \\\n", + "0 Darrell Lucus \n", + "1 Daniel J. Flynn \n", + "2 Consortiumnews.com \n", + "3 Jessica Purkiss \n", + "4 Howard Portnoy \n", + "5 Daniel Nussbaum \n", + "6 NaN \n", + "7 Alissa J. Rubin \n", + "8 NaN \n", + "9 Megan Twohey and Scott Shane \n", + "10 Aaron Klein \n", + "11 Chris Tomlinson \n", + "12 Amando Flavio \n", + "13 Jason Ditz \n", + "14 AnotherAnnie \n", + "\n", + " text label \n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... 1 \n", + "1 Ever get the feeling your life circles the rou... 0 \n", + "2 Why the Truth Might Get You Fired October 29, ... 1 \n", + "3 Videos 15 Civilians Killed In Single US Airstr... 1 \n", + "4 Print \\nAn Iranian woman has been sentenced to... 1 \n", + "5 In these trying times, Jackie Mason is the Voi... 0 \n", + "6 Ever wonder how Britain’s most iconic pop pian... 1 \n", + "7 PARIS — France chose an idealistic, traditi... 0 \n", + "8 Donald J. Trump is scheduled to make a highly ... 0 \n", + "9 A week before Michael T. Flynn resigned as nat... 0 \n", + "10 Organizing for Action, the activist group that... 0 \n", + "11 The BBC produced spoof on the “Real Housewives... 0 \n", + "12 The mystery surrounding The Third Reich and Na... 1 \n", + "13 Clinton Campaign Demands FBI Affirm Trump's Ru... 1 \n", + "14 Yes, There Are Paid Government Trolls On Socia... 1 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.head(15)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.10674Z", + "iopub.status.busy": "2021-05-25T06:50:32.106434Z", + "iopub.status.idle": "2021-05-25T06:50:32.120541Z", + "shell.execute_reply": "2021-05-25T06:50:32.119386Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.106712Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(20800, 5)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.124489Z", + "iopub.status.busy": "2021-05-25T06:50:32.12414Z", + "iopub.status.idle": "2021-05-25T06:50:32.140229Z", + "shell.execute_reply": "2021-05-25T06:50:32.139288Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.124461Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 20800 entries, 0 to 20799\n", + "Data columns (total 5 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 id 20800 non-null int64 \n", + " 1 title 20242 non-null object\n", + " 2 author 18843 non-null object\n", + " 3 text 20761 non-null object\n", + " 4 label 20800 non-null int64 \n", + "dtypes: int64(2), object(3)\n", + "memory usage: 812.6+ KB\n" + ] + } + ], + "source": [ + "train_df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([10413, 10387], dtype=int64)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# def create_distribution(dataFile):\n", + "# return sb.countplot(x='label', data=dataFile, palette='hls')\n", + "\n", + "# #by calling below we can see that training, test and valid data seems to be failry evenly distributed between the classes\n", + "# create_distribution(train_df)\n", + "train_df['label'].value_counts().values" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAGdCAYAAAAbudkLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAosElEQVR4nO3df1SWdZ7/8ReCIiBcisp9x4gj05DR4mRRB8GZoKOiJuKOU7bhsnbW1MaSJTXT41ZWR0gbf0yxmlkr5o/RdndsO/1gxNVD4/oLKSqVbJ0YxeIWt/BGjEDx+v7h1+vsLUqaNyIfn49z7nO8r/t9X/f18ZxLnl7cNwTYtm0LAADAQJ3a+wAAAADaCqEDAACMRegAAABjEToAAMBYhA4AADAWoQMAAIxF6AAAAGMROgAAwFhB7X0A7ens2bP6+uuvFR4eroCAgPY+HAAAcBls29bJkycVHR2tTp1av2ZzQ4fO119/rZiYmPY+DAAA8CNUVVWpT58+rc7c0KETHh4u6dxfVERERDsfDQAAuBx1dXWKiYlxvo635oYOnfPfroqIiCB0AADoYC7nbSe8GRkAABiL0AEAAMYidHBd+vDDDzV69GhFR0crICBAb7/9ts/jtm1r3rx5io6OVkhIiNLS0rR///6L7su2bY0cOfKi+5k/f75SUlIUGhqq7t27t3juN998oxEjRig6OlrBwcGKiYnR448/rrq6Oj+tFLix+eNcnzJlim6++WaFhISod+/eGjNmjD7//HOfmS+++EJjxoxRr169FBERocGDB2vbtm3O44WFhQoICLjoraamps3Wj7ZH6OC6dOrUKd1+++0qKCi46OMLFy7U4sWLVVBQoNLSUrndbg0bNkwnT55sMbt06dJLfh+3qalJDzzwgH77299e9PFOnTppzJgxeuedd/TFF1+osLBQW7Zs0aOPPvrjFwfA4Y9zPTExUatWrVJFRYX+9Kc/ybZtpaenq7m52ZkZNWqUzpw5o61bt6qsrEwDBw5URkaGPB6PJOnBBx9UdXW1z2348OFKTU1VVFRU2/4loG3ZNzCv12tLsr1eb3sfClohyd60aZNz/+zZs7bb7bZffPFFZ9v3339vW5Zlv/rqqz7PLS8vt/v06WNXV1e32M//tWrVKtuyrMs6nt///vd2nz59rnQZAH7A1Zzr/9cnn3xiS7IPHTpk27ZtHz9+3JZkf/jhh85MXV2dLcnesmXLRfdRU1Njd+7c2X7zzTevclVoC1fy9ZsrOuhwKisr5fF4lJ6e7mwLDg5WamqqduzY4Wz77rvv9NBDD6mgoEBut9svr/3111/rj3/8o1JTU/2yPwCXdrnn+v916tQprVq1SrGxsc7PSevZs6fi4+P15ptv6tSpUzpz5oxWrFghl8ulxMTEi+7nzTffVGhoqO6//37/LwzXFKGDDuf8pWaXy+Wz3eVyOY9J0hNPPKGUlBSNGTPmql/zoYceUmhoqH7yk58oIiJCr7/++lXvE0DrLvdcl6Rly5apW7du6tatm4qKilRcXKwuXbpIOvcR5OLiYn388ccKDw9X165dtWTJEhUVFV30vXmS9K//+q/KyspSSEiI/xeGa4rQQYd14ftubNt2tr3zzjvaunWrli5d6pfXWrJkiT766CO9/fbb+stf/qLp06f7Zb8Aflhr5/p548eP18cff6ySkhLFxcVp3Lhx+v777535qVOnKioqSn/+85+1Z88ejRkzRhkZGaqurm7xejt37tSBAwc0ceLEtlsUrhlCBx3O+W9DXfg/upqaGud/flu3btVf/vIXde/eXUFBQQoKOvezMX/zm98oLS3tR73mrbfeqjFjxmjFihVavnz5Rf+BBOA/l3Oun2dZluLi4nTPPffo3//93/X5559r06ZNks79e/Duu+9qw4YNGjx4sO68804tW7ZMISEhWr16dYvXff311zVw4MBLflsLHQuhgw4nNjZWbrdbxcXFzrampiaVlJQoJSVFkjR79mx9+umnKi8vd27SuSszq1atuqrXt21bktTY2HhV+wHQuss51y/Ftm3nHP3uu+8kqcUvf+zUqZPOnj3rs62+vl5vvfUWV3MMckP/Cghcv+rr63Xo0CHnfmVlpcrLyxUZGam+ffsqNzdXeXl5iouLU1xcnPLy8hQaGqqsrCxJ5/4neLE3IPft21exsbHO/SNHjujbb7/VkSNH1Nzc7ATRz3/+c3Xr1k3vv/++jh07prvvvlvdunXTgQMHNGvWLA0ePFj9+vVr078D4EZwtef6l19+qY0bNyo9PV29e/fWV199pQULFigkJET33XefJCk5OVk9evTQhAkT9MwzzygkJEQrV65UZWWlRo0a5XM8Gzdu1JkzZzR+/Phr95eAttW2HwC7vvHx8uvXtm3bbEktbhMm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mj59unP/7Nmz+vbbb9WzZ89LPgdmqKurU0xMjKqqqhQREdHehwOgDXCe3zhs29bJkycVHR39g7MdNnR69eqlwMDAFldvampqWlzlOS84OFjBwcE+27p3795Wh4jrUEREBP8AAobjPL8x/NCVnPM67JuRu3TposTERBUXF/tsLy4uVkpKSjsdFQAAuJ502Cs6kjR9+nRlZ2frrrvuUnJysl577TUdOXJEjz76aHsfGgAAuA506NB58MEH9c033+j5559XdXW1EhIS9P777+unP/1pex8arjPBwcF69tlnW3zrEoA5OM9xMQH25Xw2CwAAoAPqsO/RAQAA+CGEDgAAMBahAwAAjEXoAAA6vMLCQn4uGi6K0EGHEhAQ0Ort4Ycfbu9DBHAVHn744Yue24cOHWrvQ0MH1aE/Xo4bT3V1tfPnjRs36plnntHBgwedbSEhIT7zp0+fVufOna/Z8QG4eiNGjNCqVat8tvXu3budjgYdHVd00KG43W7nZlmWAgICnPvff/+9unfvrrfeektpaWnq2rWr1q5dq3nz5mngwIE++1m6dKn69evns23VqlWKj49X165ddeutt2rZsmXXbmEAHMHBwT7nutvt1u9//3sNGDBAYWFhiomJ0dSpU1VfX3/JfXzyySe69957FR4eroiICCUmJmrv3r3O4zt27NA999yjkJAQxcTEKCcnR6dOnboWy8M1RujAOE899ZRycnJUUVGh4cOHX9ZzVq5cqblz52r+/PmqqKhQXl6enn76aa1evbqNjxbA5ejUqZNefvll7du3T6tXr9bWrVs1a9asS86PHz9effr0UWlpqcrKyjR79mzn6u5nn32m4cOHa+zYsfr000+1ceNGbd++XY8//vi1Wg6uIb51BePk5uZq7NixV/ScF154QYsWLXKeFxsbqwMHDmjFihWaMGFCWxwmgEt499131a1bN+f+yJEj9W//9m/O/djYWL3wwgv67W9/e8krr0eOHNGTTz6pW2+9VZIUFxfnPPbSSy8pKytLubm5zmMvv/yyUlNTtXz5cnXt2rUNVoX2QujAOHfdddcVzR8/flxVVVWaOHGiJk2a5Gw/c+bMZf92XAD+c++992r58uXO/bCwMG3btk15eXk6cOCA6urqdObMGX3//fc6deqUwsLCWuxj+vTpeuSRR7RmzRoNHTpUDzzwgG6++WZJUllZmQ4dOqR169Y587Zt6+zZs6qsrFR8fHzbLxLXDKED41z4j16nTp104W86OX36tPPns2fPSjr37aukpCSfucDAwDY6SgCXEhYWpp///OfO/cOHD+u+++7To48+qhdeeEGRkZHavn27Jk6c6HMu/1/z5s1TVlaW3nvvPX3wwQd69tlntWHDBv3617/W2bNnNWXKFOXk5LR4Xt++fdtsXWgfhA6M17t3b3k8Htm2rYCAAElSeXm587jL5dJPfvITffnllxo/fnw7HSWAS9m7d6/OnDmjRYsWqVOnc28tfeutt37webfccotuueUWPfHEE3rooYe0atUq/frXv9add96p/fv3+8QUzEXowHhpaWk6fvy4Fi5cqPvvv19FRUX64IMPFBER4czMmzdPOTk5ioiI0MiRI9XY2Ki9e/eqtrZW06dPb8ejB3DzzTfrzJkzeuWVVzR69Gj993//t1599dVLzjc0NOjJJ5/U/fffr9jYWB09elSlpaX6zW9+I+ncBxYGDRqkxx57TJMmTVJYWJgqKipUXFysV1555VotC9cIn7qC8eLj47Vs2TL9y7/8i26//Xbt2bNHM2fO9Jl55JFH9Prrr6uwsFADBgxQamqqCgsLFRsb205HDeC8gQMHavHixVqwYIESEhK0bt065efnX3I+MDBQ33zzjf7hH/5Bt9xyi8aNG6eRI0fqueeekyT94he/UElJif7nf/5Hv/rVr3THHXfo6aef1k033XStloRrKMC+8M0LAAAAhuCKDgAAMBahAwAAjEXoAAAAYxE6AADAWIQOAAAwFqEDAACMRegAAABjEToAAMBYhA4AADAWoQMAAIxF6AAAAGMROgAAwFj/D+m7vKbLMKEfAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bars= plt.bar(['True','False'],train_df['label'].value_counts().values)\n", + "for bar in bars:\n", + " yval = bar.get_height()\n", + " plt.text(bar.get_x() + bar.get_width() / 2, yval, round(yval, 2), ha='center', va='bottom')\n", + "\n", + "plt.show()\n", + "#Hence data has nearly equal cases of True and False News." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.306146Z", + "iopub.status.busy": "2021-05-25T06:50:32.305826Z", + "iopub.status.idle": "2021-05-25T06:50:32.335357Z", + "shell.execute_reply": "2021-05-25T06:50:32.33417Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.306118Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1mCOLUMN\u001b[0m \u001b[1mNULL VALUES COUNT\u001b[0m\n", + "id 0\n", + "title 558\n", + "author 1957\n", + "text 39\n", + "label 0\n" + ] + } + ], + "source": [ + "def data_qualityCheck():\n", + " print(\"{:{}}\".format(\"\\033[1mCOLUMN\\033[0m\",38),end='')\n", + " print(\"{:{}}\".format(\"\\033[1mNULL VALUES COUNT\\033[0m\",18))\n", + " for x in train_df.columns:\n", + " print(\"{:{}}\".format(x,34),end='')\n", + " print(train_df[x].isnull().sum())\n", + "\n", + " \n", + "data_qualityCheck()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.337061Z", + "iopub.status.busy": "2021-05-25T06:50:32.336735Z", + "iopub.status.idle": "2021-05-25T06:50:32.367948Z", + "shell.execute_reply": "2021-05-25T06:50:32.366933Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.33703Z" + } + }, + "outputs": [], + "source": [ + "train_df=train_df.drop([\"id\", \"author\"], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.401314Z", + "iopub.status.busy": "2021-05-25T06:50:32.400868Z", + "iopub.status.idle": "2021-05-25T06:50:32.407806Z", + "shell.execute_reply": "2021-05-25T06:50:32.406589Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.401272Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(20800, 3)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.409912Z", + "iopub.status.busy": "2021-05-25T06:50:32.409162Z", + "iopub.status.idle": "2021-05-25T06:50:32.426843Z", + "shell.execute_reply": "2021-05-25T06:50:32.425727Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.409868Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titletextlabel
0House Dem Aide: We Didn’t Even See Comey’s Let...House Dem Aide: We Didn’t Even See Comey’s Let...1
1FLYNN: Hillary Clinton, Big Woman on Campus - ...Ever get the feeling your life circles the rou...0
2Why the Truth Might Get You FiredWhy the Truth Might Get You Fired October 29, ...1
315 Civilians Killed In Single US Airstrike Hav...Videos 15 Civilians Killed In Single US Airstr...1
4Iranian woman jailed for fictional unpublished...Print \\nAn Iranian woman has been sentenced to...1
\n", + "
" + ], + "text/plain": [ + " title \\\n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... \n", + "1 FLYNN: Hillary Clinton, Big Woman on Campus - ... \n", + "2 Why the Truth Might Get You Fired \n", + "3 15 Civilians Killed In Single US Airstrike Hav... \n", + "4 Iranian woman jailed for fictional unpublished... \n", + "\n", + " text label \n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... 1 \n", + "1 Ever get the feeling your life circles the rou... 0 \n", + "2 Why the Truth Might Get You Fired October 29, ... 1 \n", + "3 Videos 15 Civilians Killed In Single US Airstr... 1 \n", + "4 Print \\nAn Iranian woman has been sentenced to... 1 " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.457112Z", + "iopub.status.busy": "2021-05-25T06:50:32.45653Z", + "iopub.status.idle": "2021-05-25T06:50:32.46346Z", + "shell.execute_reply": "2021-05-25T06:50:32.461467Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.457067Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 1\n", + "1 0\n", + "2 1\n", + "3 1\n", + "4 1\n", + " ..\n", + "20795 0\n", + "20796 0\n", + "20797 0\n", + "20798 1\n", + "20799 1\n", + "Name: label, Length: 20800, dtype: int64" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "label_train = train_df['label']\n", + "label_train" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.46513Z", + "iopub.status.busy": "2021-05-25T06:50:32.46484Z", + "iopub.status.idle": "2021-05-25T06:50:32.479833Z", + "shell.execute_reply": "2021-05-25T06:50:32.478601Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.465102Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 1\n", + "1 0\n", + "2 1\n", + "3 1\n", + "4 1\n", + "5 0\n", + "6 1\n", + "7 0\n", + "8 0\n", + "9 0\n", + "Name: label, dtype: int64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "label_train.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.481757Z", + "iopub.status.busy": "2021-05-25T06:50:32.481439Z", + "iopub.status.idle": "2021-05-25T06:50:32.493571Z", + "shell.execute_reply": "2021-05-25T06:50:32.492736Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.481728Z" + } + }, + "outputs": [], + "source": [ + "train_df = train_df.drop(\"label\", axis = 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.495566Z", + "iopub.status.busy": "2021-05-25T06:50:32.495116Z", + "iopub.status.idle": "2021-05-25T06:50:32.513957Z", + "shell.execute_reply": "2021-05-25T06:50:32.51265Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.495526Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titletext
0House Dem Aide: We Didn’t Even See Comey’s Let...House Dem Aide: We Didn’t Even See Comey’s Let...
1FLYNN: Hillary Clinton, Big Woman on Campus - ...Ever get the feeling your life circles the rou...
2Why the Truth Might Get You FiredWhy the Truth Might Get You Fired October 29, ...
315 Civilians Killed In Single US Airstrike Hav...Videos 15 Civilians Killed In Single US Airstr...
4Iranian woman jailed for fictional unpublished...Print \\nAn Iranian woman has been sentenced to...
5Jackie Mason: Hollywood Would Love Trump if He...In these trying times, Jackie Mason is the Voi...
6Life: Life Of Luxury: Elton John’s 6 Favorite ...Ever wonder how Britain’s most iconic pop pian...
7Benoît Hamon Wins French Socialist Party’s Pre...PARIS — France chose an idealistic, traditi...
8Excerpts From a Draft Script for Donald Trump’...Donald J. Trump is scheduled to make a highly ...
9A Back-Channel Plan for Ukraine and Russia, Co...A week before Michael T. Flynn resigned as nat...
\n", + "
" + ], + "text/plain": [ + " title \\\n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... \n", + "1 FLYNN: Hillary Clinton, Big Woman on Campus - ... \n", + "2 Why the Truth Might Get You Fired \n", + "3 15 Civilians Killed In Single US Airstrike Hav... \n", + "4 Iranian woman jailed for fictional unpublished... \n", + "5 Jackie Mason: Hollywood Would Love Trump if He... \n", + "6 Life: Life Of Luxury: Elton John’s 6 Favorite ... \n", + "7 Benoît Hamon Wins French Socialist Party’s Pre... \n", + "8 Excerpts From a Draft Script for Donald Trump’... \n", + "9 A Back-Channel Plan for Ukraine and Russia, Co... \n", + "\n", + " text \n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... \n", + "1 Ever get the feeling your life circles the rou... \n", + "2 Why the Truth Might Get You Fired October 29, ... \n", + "3 Videos 15 Civilians Killed In Single US Airstr... \n", + "4 Print \\nAn Iranian woman has been sentenced to... \n", + "5 In these trying times, Jackie Mason is the Voi... \n", + "6 Ever wonder how Britain’s most iconic pop pian... \n", + "7 PARIS — France chose an idealistic, traditi... \n", + "8 Donald J. Trump is scheduled to make a highly ... \n", + "9 A week before Michael T. Flynn resigned as nat... " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def fill_data(data):\n", + " data[\"title\"] = data[\"title\"].fillna(\"Has No Title\")\n", + " data[\"text\"] = data[\"text\"].fillna(\"Has No text\")\n", + " return data\n", + "\n", + "train_df= fill_data(train_df)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1mCOLUMN\u001b[0m \u001b[1mNULL VALUES COUNT\u001b[0m\n", + "title 0\n", + "text 0\n" + ] + } + ], + "source": [ + "data_qualityCheck()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titletext
0House Dem Aide: We Didn’t Even See Comey’s Let...House Dem Aide: We Didn’t Even See Comey’s Let...
1FLYNN: Hillary Clinton, Big Woman on Campus - ...Ever get the feeling your life circles the rou...
2Why the Truth Might Get You FiredWhy the Truth Might Get You Fired October 29, ...
315 Civilians Killed In Single US Airstrike Hav...Videos 15 Civilians Killed In Single US Airstr...
4Iranian woman jailed for fictional unpublished...Print \\nAn Iranian woman has been sentenced to...
5Jackie Mason: Hollywood Would Love Trump if He...In these trying times, Jackie Mason is the Voi...
6Life: Life Of Luxury: Elton John’s 6 Favorite ...Ever wonder how Britain’s most iconic pop pian...
7Benoît Hamon Wins French Socialist Party’s Pre...PARIS — France chose an idealistic, traditi...
8Excerpts From a Draft Script for Donald Trump’...Donald J. Trump is scheduled to make a highly ...
9A Back-Channel Plan for Ukraine and Russia, Co...A week before Michael T. Flynn resigned as nat...
10Obama’s Organizing for Action Partners with So...Organizing for Action, the activist group that...
11BBC Comedy Sketch \"Real Housewives of ISIS\" Ca...The BBC produced spoof on the “Real Housewives...
12Russian Researchers Discover Secret Nazi Milit...The mystery surrounding The Third Reich and Na...
13US Officials See No Link Between Trump and RussiaClinton Campaign Demands FBI Affirm Trump's Ru...
14Re: Yes, There Are Paid Government Trolls On S...Yes, There Are Paid Government Trolls On Socia...
15In Major League Soccer, Argentines Find a Home...Guillermo Barros Schelotto was not the first A...
16Wells Fargo Chief Abruptly Steps Down - The Ne...The scandal engulfing Wells Fargo toppled its ...
17Anonymous Donor Pays $2.5 Million To Release E...A Caddo Nation tribal leader has just been fre...
18FBI Closes In On Hillary!FBI Closes In On Hillary! Posted on Home » Hea...
19Chuck Todd: ’BuzzFeed Did Donald Trump a Polit...Wednesday after Donald Trump’s press confere...
\n", + "
" + ], + "text/plain": [ + " title \\\n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... \n", + "1 FLYNN: Hillary Clinton, Big Woman on Campus - ... \n", + "2 Why the Truth Might Get You Fired \n", + "3 15 Civilians Killed In Single US Airstrike Hav... \n", + "4 Iranian woman jailed for fictional unpublished... \n", + "5 Jackie Mason: Hollywood Would Love Trump if He... \n", + "6 Life: Life Of Luxury: Elton John’s 6 Favorite ... \n", + "7 Benoît Hamon Wins French Socialist Party’s Pre... \n", + "8 Excerpts From a Draft Script for Donald Trump’... \n", + "9 A Back-Channel Plan for Ukraine and Russia, Co... \n", + "10 Obama’s Organizing for Action Partners with So... \n", + "11 BBC Comedy Sketch \"Real Housewives of ISIS\" Ca... \n", + "12 Russian Researchers Discover Secret Nazi Milit... \n", + "13 US Officials See No Link Between Trump and Russia \n", + "14 Re: Yes, There Are Paid Government Trolls On S... \n", + "15 In Major League Soccer, Argentines Find a Home... \n", + "16 Wells Fargo Chief Abruptly Steps Down - The Ne... \n", + "17 Anonymous Donor Pays $2.5 Million To Release E... \n", + "18 FBI Closes In On Hillary! \n", + "19 Chuck Todd: ’BuzzFeed Did Donald Trump a Polit... \n", + "\n", + " text \n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... \n", + "1 Ever get the feeling your life circles the rou... \n", + "2 Why the Truth Might Get You Fired October 29, ... \n", + "3 Videos 15 Civilians Killed In Single US Airstr... \n", + "4 Print \\nAn Iranian woman has been sentenced to... \n", + "5 In these trying times, Jackie Mason is the Voi... \n", + "6 Ever wonder how Britain’s most iconic pop pian... \n", + "7 PARIS — France chose an idealistic, traditi... \n", + "8 Donald J. Trump is scheduled to make a highly ... \n", + "9 A week before Michael T. Flynn resigned as nat... \n", + "10 Organizing for Action, the activist group that... \n", + "11 The BBC produced spoof on the “Real Housewives... \n", + "12 The mystery surrounding The Third Reich and Na... \n", + "13 Clinton Campaign Demands FBI Affirm Trump's Ru... \n", + "14 Yes, There Are Paid Government Trolls On Socia... \n", + "15 Guillermo Barros Schelotto was not the first A... \n", + "16 The scandal engulfing Wells Fargo toppled its ... \n", + "17 A Caddo Nation tribal leader has just been fre... \n", + "18 FBI Closes In On Hillary! Posted on Home » Hea... \n", + "19 Wednesday after Donald Trump’s press confere... " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.head(20)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "train_df[\"new_text\"] = train_df[\"title\"] + \" \" + train_df[\"text\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titletextnew_text
0House Dem Aide: We Didn’t Even See Comey’s Let...House Dem Aide: We Didn’t Even See Comey’s Let...House Dem Aide: We Didn’t Even See Comey’s Let...
1FLYNN: Hillary Clinton, Big Woman on Campus - ...Ever get the feeling your life circles the rou...FLYNN: Hillary Clinton, Big Woman on Campus - ...
2Why the Truth Might Get You FiredWhy the Truth Might Get You Fired October 29, ...Why the Truth Might Get You Fired Why the Trut...
315 Civilians Killed In Single US Airstrike Hav...Videos 15 Civilians Killed In Single US Airstr...15 Civilians Killed In Single US Airstrike Hav...
4Iranian woman jailed for fictional unpublished...Print \\nAn Iranian woman has been sentenced to...Iranian woman jailed for fictional unpublished...
5Jackie Mason: Hollywood Would Love Trump if He...In these trying times, Jackie Mason is the Voi...Jackie Mason: Hollywood Would Love Trump if He...
6Life: Life Of Luxury: Elton John’s 6 Favorite ...Ever wonder how Britain’s most iconic pop pian...Life: Life Of Luxury: Elton John’s 6 Favorite ...
7Benoît Hamon Wins French Socialist Party’s Pre...PARIS — France chose an idealistic, traditi...Benoît Hamon Wins French Socialist Party’s Pre...
8Excerpts From a Draft Script for Donald Trump’...Donald J. Trump is scheduled to make a highly ...Excerpts From a Draft Script for Donald Trump’...
9A Back-Channel Plan for Ukraine and Russia, Co...A week before Michael T. Flynn resigned as nat...A Back-Channel Plan for Ukraine and Russia, Co...
10Obama’s Organizing for Action Partners with So...Organizing for Action, the activist group that...Obama’s Organizing for Action Partners with So...
11BBC Comedy Sketch \"Real Housewives of ISIS\" Ca...The BBC produced spoof on the “Real Housewives...BBC Comedy Sketch \"Real Housewives of ISIS\" Ca...
12Russian Researchers Discover Secret Nazi Milit...The mystery surrounding The Third Reich and Na...Russian Researchers Discover Secret Nazi Milit...
13US Officials See No Link Between Trump and RussiaClinton Campaign Demands FBI Affirm Trump's Ru...US Officials See No Link Between Trump and Rus...
14Re: Yes, There Are Paid Government Trolls On S...Yes, There Are Paid Government Trolls On Socia...Re: Yes, There Are Paid Government Trolls On S...
15In Major League Soccer, Argentines Find a Home...Guillermo Barros Schelotto was not the first A...In Major League Soccer, Argentines Find a Home...
16Wells Fargo Chief Abruptly Steps Down - The Ne...The scandal engulfing Wells Fargo toppled its ...Wells Fargo Chief Abruptly Steps Down - The Ne...
17Anonymous Donor Pays $2.5 Million To Release E...A Caddo Nation tribal leader has just been fre...Anonymous Donor Pays $2.5 Million To Release E...
18FBI Closes In On Hillary!FBI Closes In On Hillary! Posted on Home » Hea...FBI Closes In On Hillary! FBI Closes In On Hil...
19Chuck Todd: ’BuzzFeed Did Donald Trump a Polit...Wednesday after Donald Trump’s press confere...Chuck Todd: ’BuzzFeed Did Donald Trump a Polit...
\n", + "
" + ], + "text/plain": [ + " title \\\n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... \n", + "1 FLYNN: Hillary Clinton, Big Woman on Campus - ... \n", + "2 Why the Truth Might Get You Fired \n", + "3 15 Civilians Killed In Single US Airstrike Hav... \n", + "4 Iranian woman jailed for fictional unpublished... \n", + "5 Jackie Mason: Hollywood Would Love Trump if He... \n", + "6 Life: Life Of Luxury: Elton John’s 6 Favorite ... \n", + "7 Benoît Hamon Wins French Socialist Party’s Pre... \n", + "8 Excerpts From a Draft Script for Donald Trump’... \n", + "9 A Back-Channel Plan for Ukraine and Russia, Co... \n", + "10 Obama’s Organizing for Action Partners with So... \n", + "11 BBC Comedy Sketch \"Real Housewives of ISIS\" Ca... \n", + "12 Russian Researchers Discover Secret Nazi Milit... \n", + "13 US Officials See No Link Between Trump and Russia \n", + "14 Re: Yes, There Are Paid Government Trolls On S... \n", + "15 In Major League Soccer, Argentines Find a Home... \n", + "16 Wells Fargo Chief Abruptly Steps Down - The Ne... \n", + "17 Anonymous Donor Pays $2.5 Million To Release E... \n", + "18 FBI Closes In On Hillary! \n", + "19 Chuck Todd: ’BuzzFeed Did Donald Trump a Polit... \n", + "\n", + " text \\\n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... \n", + "1 Ever get the feeling your life circles the rou... \n", + "2 Why the Truth Might Get You Fired October 29, ... \n", + "3 Videos 15 Civilians Killed In Single US Airstr... \n", + "4 Print \\nAn Iranian woman has been sentenced to... \n", + "5 In these trying times, Jackie Mason is the Voi... \n", + "6 Ever wonder how Britain’s most iconic pop pian... \n", + "7 PARIS — France chose an idealistic, traditi... \n", + "8 Donald J. Trump is scheduled to make a highly ... \n", + "9 A week before Michael T. Flynn resigned as nat... \n", + "10 Organizing for Action, the activist group that... \n", + "11 The BBC produced spoof on the “Real Housewives... \n", + "12 The mystery surrounding The Third Reich and Na... \n", + "13 Clinton Campaign Demands FBI Affirm Trump's Ru... \n", + "14 Yes, There Are Paid Government Trolls On Socia... \n", + "15 Guillermo Barros Schelotto was not the first A... \n", + "16 The scandal engulfing Wells Fargo toppled its ... \n", + "17 A Caddo Nation tribal leader has just been fre... \n", + "18 FBI Closes In On Hillary! Posted on Home » Hea... \n", + "19 Wednesday after Donald Trump’s press confere... \n", + "\n", + " new_text \n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let... \n", + "1 FLYNN: Hillary Clinton, Big Woman on Campus - ... \n", + "2 Why the Truth Might Get You Fired Why the Trut... \n", + "3 15 Civilians Killed In Single US Airstrike Hav... \n", + "4 Iranian woman jailed for fictional unpublished... \n", + "5 Jackie Mason: Hollywood Would Love Trump if He... \n", + "6 Life: Life Of Luxury: Elton John’s 6 Favorite ... \n", + "7 Benoît Hamon Wins French Socialist Party’s Pre... \n", + "8 Excerpts From a Draft Script for Donald Trump’... \n", + "9 A Back-Channel Plan for Ukraine and Russia, Co... \n", + "10 Obama’s Organizing for Action Partners with So... \n", + "11 BBC Comedy Sketch \"Real Housewives of ISIS\" Ca... \n", + "12 Russian Researchers Discover Secret Nazi Milit... \n", + "13 US Officials See No Link Between Trump and Rus... \n", + "14 Re: Yes, There Are Paid Government Trolls On S... \n", + "15 In Major League Soccer, Argentines Find a Home... \n", + "16 Wells Fargo Chief Abruptly Steps Down - The Ne... \n", + "17 Anonymous Donor Pays $2.5 Million To Release E... \n", + "18 FBI Closes In On Hillary! FBI Closes In On Hil... \n", + "19 Chuck Todd: ’BuzzFeed Did Donald Trump a Polit... " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.head(20)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "train_df=train_df.drop(['title','text'],axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
new_text
0House Dem Aide: We Didn’t Even See Comey’s Let...
1FLYNN: Hillary Clinton, Big Woman on Campus - ...
2Why the Truth Might Get You Fired Why the Trut...
315 Civilians Killed In Single US Airstrike Hav...
4Iranian woman jailed for fictional unpublished...
\n", + "
" + ], + "text/plain": [ + " new_text\n", + "0 House Dem Aide: We Didn’t Even See Comey’s Let...\n", + "1 FLYNN: Hillary Clinton, Big Woman on Campus - ...\n", + "2 Why the Truth Might Get You Fired Why the Trut...\n", + "3 15 Civilians Killed In Single US Airstrike Hav...\n", + "4 Iranian woman jailed for fictional unpublished..." + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "custom_download_dir = \"C:\\\\Users\\\\ysach/nltk\"\n", + "nltk.data.path.append(custom_download_dir)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package stopwords to C:\\Users\\ysach/nltk...\n", + "[nltk_data] Package stopwords is already up-to-date!\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nltk.download('stopwords',download_dir=custom_download_dir)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.51602Z", + "iopub.status.busy": "2021-05-25T06:50:32.515411Z", + "iopub.status.idle": "2021-05-25T06:50:32.531829Z", + "shell.execute_reply": "2021-05-25T06:50:32.530895Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.515972Z" + } + }, + "outputs": [], + "source": [ + "lemmatizer = WordNetLemmatizer()\n", + "stpwrds = list(stopwords.words('english'))" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['i',\n", + " 'me',\n", + " 'my',\n", + " 'myself',\n", + " 'we',\n", + " 'our',\n", + " 'ours',\n", + " 'ourselves',\n", + " 'you',\n", + " \"you're\",\n", + " \"you've\",\n", + " \"you'll\",\n", + " \"you'd\",\n", + " 'your',\n", + " 'yours',\n", + " 'yourself',\n", + " 'yourselves',\n", + " 'he',\n", + " 'him',\n", + " 'his',\n", + " 'himself',\n", + " 'she',\n", + " \"she's\",\n", + " 'her',\n", + " 'hers',\n", + " 'herself',\n", + " 'it',\n", + " \"it's\",\n", + " 'its',\n", + " 'itself',\n", + " 'they',\n", + " 'them',\n", + " 'their',\n", + " 'theirs',\n", + " 'themselves',\n", + " 'what',\n", + " 'which',\n", + " 'who',\n", + " 'whom',\n", + " 'this',\n", + " 'that',\n", + " \"that'll\",\n", + " 'these',\n", + " 'those',\n", + " 'am',\n", + " 'is',\n", + " 'are',\n", + " 'was',\n", + " 'were',\n", + " 'be',\n", + " 'been',\n", + " 'being',\n", + " 'have',\n", + " 'has',\n", + " 'had',\n", + " 'having',\n", + " 'do',\n", + " 'does',\n", + " 'did',\n", + " 'doing',\n", + " 'a',\n", + " 'an',\n", + " 'the',\n", + " 'and',\n", + " 'but',\n", + " 'if',\n", + " 'or',\n", + " 'because',\n", + " 'as',\n", + " 'until',\n", + " 'while',\n", + " 'of',\n", + " 'at',\n", + " 'by',\n", + " 'for',\n", + " 'with',\n", + " 'about',\n", + " 'against',\n", + " 'between',\n", + " 'into',\n", + " 'through',\n", + " 'during',\n", + " 'before',\n", + " 'after',\n", + " 'above',\n", + " 'below',\n", + " 'to',\n", + " 'from',\n", + " 'up',\n", + " 'down',\n", + " 'in',\n", + " 'out',\n", + " 'on',\n", + " 'off',\n", + " 'over',\n", + " 'under',\n", + " 'again',\n", + " 'further',\n", + " 'then',\n", + " 'once',\n", + " 'here',\n", + " 'there',\n", + " 'when',\n", + " 'where',\n", + " 'why',\n", + " 'how',\n", + " 'all',\n", + " 'any',\n", + " 'both',\n", + " 'each',\n", + " 'few',\n", + " 'more',\n", + " 'most',\n", + " 'other',\n", + " 'some',\n", + " 'such',\n", + " 'no',\n", + " 'nor',\n", + " 'not',\n", + " 'only',\n", + " 'own',\n", + " 'same',\n", + " 'so',\n", + " 'than',\n", + " 'too',\n", + " 'very',\n", + " 's',\n", + " 't',\n", + " 'can',\n", + " 'will',\n", + " 'just',\n", + " 'don',\n", + " \"don't\",\n", + " 'should',\n", + " \"should've\",\n", + " 'now',\n", + " 'd',\n", + " 'll',\n", + " 'm',\n", + " 'o',\n", + " 're',\n", + " 've',\n", + " 'y',\n", + " 'ain',\n", + " 'aren',\n", + " \"aren't\",\n", + " 'couldn',\n", + " \"couldn't\",\n", + " 'didn',\n", + " \"didn't\",\n", + " 'doesn',\n", + " \"doesn't\",\n", + " 'hadn',\n", + " \"hadn't\",\n", + " 'hasn',\n", + " \"hasn't\",\n", + " 'haven',\n", + " \"haven't\",\n", + " 'isn',\n", + " \"isn't\",\n", + " 'ma',\n", + " 'mightn',\n", + " \"mightn't\",\n", + " 'mustn',\n", + " \"mustn't\",\n", + " 'needn',\n", + " \"needn't\",\n", + " 'shan',\n", + " \"shan't\",\n", + " 'shouldn',\n", + " \"shouldn't\",\n", + " 'wasn',\n", + " \"wasn't\",\n", + " 'weren',\n", + " \"weren't\",\n", + " 'won',\n", + " \"won't\",\n", + " 'wouldn',\n", + " \"wouldn't\"]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stpwrds" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package punkt to C:\\Users\\ysach/nltk...\n", + "[nltk_data] Package punkt is already up-to-date!\n", + "[nltk_data] Downloading package wordnet to C:\\Users\\ysach/nltk...\n", + "[nltk_data] Package wordnet is already up-to-date!\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nltk.download('punkt',download_dir=custom_download_dir)\n", + "nltk.download('wordnet',download_dir=custom_download_dir)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package omw-1.4 to C:\\Users\\ysach/nltk...\n", + "[nltk_data] Package omw-1.4 is already up-to-date!\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nltk.download('omw-1.4',download_dir=custom_download_dir)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T06:50:32.54905Z", + "iopub.status.busy": "2021-05-25T06:50:32.548517Z", + "iopub.status.idle": "2021-05-25T06:53:51.648153Z", + "shell.execute_reply": "2021-05-25T06:53:51.647283Z", + "shell.execute_reply.started": "2021-05-25T06:50:32.549015Z" + } + }, + "outputs": [], + "source": [ + "for x in range(len(train_df)) :\n", + " corpus = []\n", + " review = train_df['new_text'][x]\n", + " review = re.sub(r'[^a-zA-Z\\s]', '', review)\n", + " review = review.lower()\n", + " review = nltk.word_tokenize(review)\n", + " for y in review :\n", + " if y not in stpwrds :\n", + " corpus.append(lemmatizer.lemmatize(y))\n", + " review = ' '.join(corpus)\n", + " train_df['new_text'][x] = review" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T07:14:51.798724Z", + "iopub.status.busy": "2021-05-25T07:14:51.798361Z", + "iopub.status.idle": "2021-05-25T07:14:51.805617Z", + "shell.execute_reply": "2021-05-25T07:14:51.804946Z", + "shell.execute_reply.started": "2021-05-25T07:14:51.798694Z" + }, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'actor steven seagal live tv erupts hillary obama intense comment actor steven seagal stood america rest hollywood remains silent week rough country first democratic nominee hillary clinton collapsed memorial called million hardworking american deplorable werent enough nfl player throughout country blatantly disrespecting american flag needle say seagal enough think important job secretary state ensuring people dont get killed seagal tweeted cant email protected pneumonia going disastrous american people notohillary continued course seagal quickly became target liberal fire comment refused break particularly lost one twitter user tried argued hillary capable presidency capable capable leaving american die capable disregarding law capable disrespecting rape survivor argued went address race relation united state true role president barack obama played social evolution country obama abysmal race relation usa truth need start honest dialog wrote seagal concluded pointing irony attack receiving liberal everywhere best thing worldmaking one statement freedom getting attacked every demo hypocritical tweeted america without democrat white house safer america think seagals comment'" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['new_text'][2188]" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "label_train[2188]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T07:16:37.152728Z", + "iopub.status.busy": "2021-05-25T07:16:37.152216Z", + "iopub.status.idle": "2021-05-25T07:16:37.163059Z", + "shell.execute_reply": "2021-05-25T07:16:37.161884Z", + "shell.execute_reply.started": "2021-05-25T07:16:37.152696Z" + } + }, + "outputs": [], + "source": [ + "X_train= train_df['new_text']" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 house dem aide didnt even see comeys letter ja...\n", + "1 flynn hillary clinton big woman campus breitba...\n", + "2 truth might get fired truth might get fired oc...\n", + "3 civilian killed single u airstrike identified ...\n", + "4 iranian woman jailed fictional unpublished sto...\n", + " ... \n", + "20795 rapper ti trump poster child white supremacy r...\n", + "20796 nfl playoff schedule matchup odds new york tim...\n", + "20797 macys said receive takeover approach hudson ba...\n", + "20798 nato russia hold parallel exercise balkan nato...\n", + "20799 keep f alive david swanson author activist jou...\n", + "Name: new_text, Length: 20800, dtype: object" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T07:17:50.592597Z", + "iopub.status.busy": "2021-05-25T07:17:50.592095Z", + "iopub.status.idle": "2021-05-25T07:17:50.598862Z", + "shell.execute_reply": "2021-05-25T07:17:50.597641Z", + "shell.execute_reply.started": "2021-05-25T07:17:50.592566Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(20800,)" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T07:18:05.89317Z", + "iopub.status.busy": "2021-05-25T07:18:05.892651Z", + "iopub.status.idle": "2021-05-25T07:18:05.902743Z", + "shell.execute_reply": "2021-05-25T07:18:05.901523Z", + "shell.execute_reply.started": "2021-05-25T07:18:05.893127Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(20800,)" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "label_train.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From c:\\Users\\ysach\\anaconda3\\lib\\site-packages\\keras\\src\\losses.py:2976: The name tf.losses.sparse_softmax_cross_entropy is deprecated. Please use tf.compat.v1.losses.sparse_softmax_cross_entropy instead.\n", + "\n" + ] + } + ], + "source": [ + "from keras.preprocessing.text import Tokenizer\n", + "from keras.preprocessing.sequence import pad_sequences" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Padding Sequance Shape is --> (20800, 12140)\n" + ] + } + ], + "source": [ + "tokenize = Tokenizer(oov_token=\"\")\n", + "tokenize.fit_on_texts(X_train)\n", + "word_idx = tokenize.word_index\n", + "\n", + "text2seq = tokenize.texts_to_sequences(X_train)\n", + "\n", + "# pad_seq = pad_sequences(text2seq, maxlen=150, padding=\"pre\", truncating=\"pre\")\n", + "\n", + "pad_seq = pad_sequences(text2seq, padding=\"pre\", truncating=\"pre\")\n", + "\n", + "\n", + "print(\"The Padding Sequance Shape is --> \", pad_seq.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "input_length = max(len(seq) for seq in text2seq)\n", + "\n", + "vocabulary_size = len(word_idx) + 1" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The maximum Sequance Length is --> 12140\n", + "The vocabulary size of dataset is --> 166055\n" + ] + } + ], + "source": [ + "print(\"The maximum Sequance Length is --> \", input_length)\n", + "print(\"The vocabulary size of dataset is --> \", vocabulary_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.feature_extraction.text import CountVectorizer\n", + "vectorizer = CountVectorizer(\n", + " ngram_range=(1,1),\n", + " max_features=250\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T07:18:10.901469Z", + "iopub.status.busy": "2021-05-25T07:18:10.901136Z", + "iopub.status.idle": "2021-05-25T07:18:22.003384Z", + "shell.execute_reply": "2021-05-25T07:18:22.002314Z", + "shell.execute_reply.started": "2021-05-25T07:18:10.90144Z" + } + }, + "outputs": [], + "source": [ + "#tfidf_v = TfidfVectorizer()\n", + "#tfidf_X_train = vectorizer.fit_transform(X_train)\n", + "#tfidf_X_test = vectorizer.transform(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T07:18:24.321674Z", + "iopub.status.busy": "2021-05-25T07:18:24.321329Z", + "iopub.status.idle": "2021-05-25T07:18:24.327063Z", + "shell.execute_reply": "2021-05-25T07:18:24.325975Z", + "shell.execute_reply.started": "2021-05-25T07:18:24.321644Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(7168, 250)" + ] + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#tfidf_X_train.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T07:18:31.418929Z", + "iopub.status.busy": "2021-05-25T07:18:31.418573Z", + "iopub.status.idle": "2021-05-25T07:18:31.427535Z", + "shell.execute_reply": "2021-05-25T07:18:31.426865Z", + "shell.execute_reply.started": "2021-05-25T07:18:31.418889Z" + } + }, + "outputs": [], + "source": [ + "def plot_confusion_matrix(cm, classes,\n", + " normalize=False,\n", + " title='Confusion matrix',\n", + " cmap=plt.cm.GnBu):\n", + " \n", + " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n", + " plt.title(title)\n", + " plt.colorbar()\n", + " tick_marks = np.arange(len(classes))\n", + " plt.xticks(tick_marks, classes, rotation=45)\n", + " plt.yticks(tick_marks, classes)\n", + "\n", + " if normalize:\n", + " cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", + " print(\"Normalized confusion matrix\")\n", + " else:\n", + " print('Confusion matrix, without normalization')\n", + "\n", + " thresh = cm.max() / 2.\n", + " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", + " plt.text(j, i, cm[i, j],\n", + " horizontalalignment=\"center\",\n", + " color=\"white\" if cm[i, j] > thresh else \"black\")\n", + "\n", + " plt.tight_layout()\n", + " plt.ylabel('True label')\n", + " plt.xlabel('Predicted label')" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: tensorflow in c:\\users\\ysach\\anaconda3\\lib\\site-packages (2.15.0)\n", + "Requirement already satisfied: tensorflow-intel==2.15.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow) (2.15.0)\n", + "Requirement already satisfied: opt-einsum>=2.3.2 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (3.3.0)\n", + "Requirement already satisfied: six>=1.12.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (1.16.0)\n", + "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (0.31.0)\n", + "Requirement already satisfied: setuptools in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (65.6.3)\n", + "Requirement already satisfied: keras<2.16,>=2.15.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (2.15.0)\n", + "Requirement already satisfied: wrapt<1.15,>=1.11.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (1.14.1)\n", + "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (0.5.4)\n", + "Requirement already satisfied: libclang>=13.0.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (16.0.6)\n", + "Requirement already satisfied: packaging in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (22.0)\n", + "Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (1.60.0)\n", + "Requirement already satisfied: astunparse>=1.6.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (1.6.3)\n", + "Requirement already satisfied: typing-extensions>=3.6.6 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (4.4.0)\n", + "Requirement already satisfied: tensorflow-estimator<2.16,>=2.15.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (2.15.0)\n", + "Requirement already satisfied: google-pasta>=0.1.1 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (0.2.0)\n", + "Requirement already satisfied: absl-py>=1.0.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (2.0.0)\n", + "Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (4.23.4)\n", + "Requirement already satisfied: flatbuffers>=23.5.26 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (23.5.26)\n", + "Requirement already satisfied: ml-dtypes~=0.2.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (0.2.0)\n", + "Requirement already satisfied: tensorboard<2.16,>=2.15 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (2.15.1)\n", + "Requirement already satisfied: termcolor>=1.1.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (2.4.0)\n", + "Requirement already satisfied: numpy<2.0.0,>=1.23.5 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (1.23.5)\n", + "Requirement already satisfied: h5py>=2.9.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.15.0->tensorflow) (3.7.0)\n", + "Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.15.0->tensorflow) (0.38.4)\n", + "Requirement already satisfied: google-auth<3,>=1.6.3 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (2.25.2)\n", + "Requirement already satisfied: markdown>=2.6.8 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (3.4.1)\n", + "Requirement already satisfied: google-auth-oauthlib<2,>=0.5 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (1.2.0)\n", + "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (0.7.2)\n", + "Requirement already satisfied: requests<3,>=2.21.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (2.28.1)\n", + "Requirement already satisfied: werkzeug>=1.0.1 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (2.2.2)\n", + "Requirement already satisfied: rsa<5,>=3.1.4 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (4.9)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (0.2.8)\n", + "Requirement already satisfied: cachetools<6.0,>=2.0.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (5.3.2)\n", + "Requirement already satisfied: requests-oauthlib>=0.7.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (1.3.1)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (1.26.14)\n", + "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (3.4)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (2023.11.17)\n", + "Requirement already satisfied: charset-normalizer<3,>=2 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (2.0.4)\n", + "Requirement already satisfied: MarkupSafe>=2.1.1 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from werkzeug>=1.0.1->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (2.1.1)\n", + "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (0.4.8)\n", + "Requirement already satisfied: oauthlib>=3.0.0 in c:\\users\\ysach\\anaconda3\\lib\\site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow-intel==2.15.0->tensorflow) (3.2.2)\n" + ] + } + ], + "source": [ + "!pip install tensorflow" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [], + "source": [ + "import keras\n", + "from keras.models import Sequential\n", + "from keras.utils import to_categorical\n", + "from keras import metrics as metrics1\n", + "from keras.layers import LeakyReLU\n", + "from keras.layers import Dense, Embedding, GlobalAveragePooling1D, LSTM, Bidirectional" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "x_train1, x_test, y_train1, y_test = train_test_split(pad_seq, label_train, train_size=0.7)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From c:\\Users\\ysach\\anaconda3\\lib\\site-packages\\keras\\src\\backend.py:873: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", + "\n", + "WARNING:tensorflow:From c:\\Users\\ysach\\anaconda3\\lib\\site-packages\\keras\\src\\optimizers\\__init__.py:309: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", + "\n" + ] + } + ], + "source": [ + "classifier = Sequential()\n", + "classifier.add(Embedding(vocabulary_size, 182, input_length=input_length))\n", + "classifier.add(GlobalAveragePooling1D())\n", + "classifier.add(Dense(96, activation='relu'))\n", + "classifier.add(Dense(24, activation='relu'))\n", + "classifier.add(Dense(1, activation='sigmoid'))\n", + "\n", + "# Compile the model\n", + "classifier.compile(optimizer='adam',\n", + " loss='binary_crossentropy',\n", + " metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " embedding (Embedding) (None, 12140, 182) 30222010 \n", + " \n", + " global_average_pooling1d ( (None, 182) 0 \n", + " GlobalAveragePooling1D) \n", + " \n", + " dense (Dense) (None, 96) 17568 \n", + " \n", + " dense_1 (Dense) (None, 24) 2328 \n", + " \n", + " dense_2 (Dense) (None, 1) 25 \n", + " \n", + "=================================================================\n", + "Total params: 30241931 (115.36 MB)\n", + "Trainable params: 30241931 (115.36 MB)\n", + "Non-trainable params: 0 (0.00 Byte)\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "classifier.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "WARNING:tensorflow:From c:\\Users\\ysach\\anaconda3\\lib\\site-packages\\keras\\src\\utils\\tf_utils.py:492: The name tf.ragged.RaggedTensorValue is deprecated. Please use tf.compat.v1.ragged.RaggedTensorValue instead.\n", + "\n", + "WARNING:tensorflow:From c:\\Users\\ysach\\anaconda3\\lib\\site-packages\\keras\\src\\engine\\base_layer_utils.py:384: The name tf.executing_eagerly_outside_functions is deprecated. Please use tf.compat.v1.executing_eagerly_outside_functions instead.\n", + "\n", + "455/455 [==============================] - 422s 923ms/step - loss: 0.6866 - accuracy: 0.5386 - val_loss: 0.6534 - val_accuracy: 0.5832\n", + "Epoch 2/10\n", + "455/455 [==============================] - 433s 952ms/step - loss: 0.4281 - accuracy: 0.8095 - val_loss: 0.3156 - val_accuracy: 0.8345\n", + "Epoch 3/10\n", + "455/455 [==============================] - 422s 927ms/step - loss: 0.2246 - accuracy: 0.9132 - val_loss: 0.2006 - val_accuracy: 0.9226\n", + "Epoch 4/10\n", + "455/455 [==============================] - 418s 919ms/step - loss: 0.1441 - accuracy: 0.9494 - val_loss: 0.1607 - val_accuracy: 0.9502\n", + "Epoch 5/10\n", + "455/455 [==============================] - 414s 910ms/step - loss: 0.1020 - accuracy: 0.9671 - val_loss: 0.1505 - val_accuracy: 0.9535\n", + "Epoch 6/10\n", + "455/455 [==============================] - 413s 909ms/step - loss: 0.0765 - accuracy: 0.9750 - val_loss: 0.1286 - val_accuracy: 0.9564\n", + "Epoch 7/10\n", + "455/455 [==============================] - 428s 942ms/step - loss: 0.0586 - accuracy: 0.9812 - val_loss: 0.1270 - val_accuracy: 0.9583\n", + "Epoch 8/10\n", + "455/455 [==============================] - 423s 930ms/step - loss: 0.0476 - accuracy: 0.9840 - val_loss: 0.1698 - val_accuracy: 0.9441\n", + "Epoch 9/10\n", + "455/455 [==============================] - 414s 911ms/step - loss: 0.0311 - accuracy: 0.9912 - val_loss: 0.1222 - val_accuracy: 0.9617\n", + "Epoch 10/10\n", + "455/455 [==============================] - 411s 904ms/step - loss: 0.0303 - accuracy: 0.9908 - val_loss: 0.1265 - val_accuracy: 0.9627\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "classifier.fit(x_train1,y_train1,epochs=10,validation_data=(x_test, y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "196/196 [==============================] - 29s 148ms/step\n" + ] + } + ], + "source": [ + "Y_pred = classifier.predict(x_test)\n", + "a=[]\n", + "for x in Y_pred:\n", + " if x>=0.5:\n", + " a.append(1)\n", + " else:\n", + " a.append(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "execution": { + "iopub.execute_input": "2021-05-25T07:18:41.422338Z", + "iopub.status.busy": "2021-05-25T07:18:41.421887Z", + "iopub.status.idle": "2021-05-25T07:18:41.673492Z", + "shell.execute_reply": "2021-05-25T07:18:41.672498Z", + "shell.execute_reply.started": "2021-05-25T07:18:41.422308Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 96.27%\n", + "Confusion matrix, without normalization\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "score = accuracy_score(y_test, a)\n", + "print(f'Accuracy: {round(score*100,2)}%')\n", + "cm = confusion_matrix(y_test, a)\n", + "plot_confusion_matrix(cm, classes=['FAKE Data', 'REAL Data'])" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.layers import SimpleRNN,LSTM" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [], + "source": [ + "model = Sequential()\n", + "model.add(Embedding(vocabulary_size, 100, input_length=input_length))\n", + "model.add(SimpleRNN(units=10, return_sequences=False))\n", + "model.add(Dense(units=1))" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [], + "source": [ + "model.compile(optimizer='adam',\n", + " loss='binary_crossentropy',\n", + " metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential_3\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " embedding_3 (Embedding) (None, 12140, 100) 16605500 \n", + " \n", + " simple_rnn (SimpleRNN) (None, 10) 1110 \n", + " \n", + " dense_5 (Dense) (None, 1) 11 \n", + " \n", + "=================================================================\n", + "Total params: 16606621 (63.35 MB)\n", + "Trainable params: 16606621 (63.35 MB)\n", + "Non-trainable params: 0 (0.00 Byte)\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/3\n", + "455/455 [==============================] - 2882s 6s/step - loss: 0.7130 - accuracy: 0.8058 - val_loss: 0.6941 - val_accuracy: 0.8763\n", + "Epoch 2/3\n", + "455/455 [==============================] - 3135s 7s/step - loss: 0.2564 - accuracy: 0.9559 - val_loss: 0.8114 - val_accuracy: 0.7906\n", + "Epoch 3/3\n", + "455/455 [==============================] - 3928s 9s/step - loss: 0.1439 - accuracy: 0.9792 - val_loss: 0.7665 - val_accuracy: 0.8503\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.fit(x_train1,y_train1,epochs=3,validation_data=(x_test, y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "196/196 [==============================] - 65s 328ms/step\n" + ] + } + ], + "source": [ + "Y_pred = model.predict(x_test)\n", + "a=[]\n", + "for x in Y_pred:\n", + " if x>=0.5:\n", + " a.append(1)\n", + " else:\n", + " a.append(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 85.03%\n", + "Confusion matrix, without normalization\n" + ] + }, + { + "data": { + "image/png": "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9fXq1avp0qULxYoVY+nSpezYsYM9e/bw3HPP2bTLiMwkK66urvTo0YO4uDhq1KhBq1atMvVeIpI+JTsi95ijoyMtWrRg3759aSYYp+fWF/7FixfTHPvrr78oXLhwjsV2KwmIj4+32f/feUEAjRo1Yv369URFRbFz506CgoIYOnQoK1assNt/oUKF7F4HkKPXkh1Lly6ldOnSrFy5kk6dOlG/fn1q166d5ueSEZlZeXXkyBHGjh1LnTp1+OWXX5gxY0am309E0lKyI5ILRo8ejcVioV+/fulO6E1MTGT9+vUANG/eHMA6wfiWPXv2cPz4cVq0aJFjcZUqVQpIvdnhv92KJT2Ojo7Uq1eP999/H4BffvnFbtsWLVqwZcsWa3Jzy6effkq+fPmoX79+FiPPWSaTCRcXF5tEJTw8PM1qLMi5qllMTAxPPfUUpUqVYuvWrQwaNIhXX32VXbt2ZbtvkQedU24HIPIgCgoKYv78+QwYMIBatWrx0ksvUbVqVRITE9m/fz8fffQR1apVo3379lSsWJH+/fszd+5cHBwcCA4O5syZM7zxxhsEBATw8ssv51hcjz76KN7e3vTt25c333wTJycnFi1axPnz523affDBB2zZsoXHHnuMEiVKEBcXxyeffAJAy5Yt7fY/btw4vv76a5o1a8bYsWPx9vZm2bJlfPPNN0yfPh2z2Zxj15Id7dq1Y/Xq1QwYMIAnn3yS8+fPM3HiRPz9/Tl58qRN28DAQMLCwli/fj3+/v54enpSsWLFTL/niy++yLlz59i9ezceHh68++677Nixg27durF//34KFCiQQ1cn8uBRsiOSS/r160fdunWZOXMm06ZNIzw8HGdnZypUqECPHj0YNGiQte38+fMpW7YsISEhvP/++5jNZtq2bcuUKVPSnaOTVV5eXoSGhjJ06FB69uxJgQIFeP755wkODub555+3tqtRowbfffcd48aNIzw8nPz581OtWjXWrVtH69at7fZfsWJFfv75Z1577TUGDhzIzZs3qVy5MgsXLkwzATs39enTh4iICD744AM++eQTypQpw6uvvsqFCxeYMGGCTdvZs2czcOBAunXrRmxsLE2aNCEsLCxT7/fxxx+zdOlSFi5cSNWqVYHUeUQrV67k4Ycfpk+fPnf1btoiRqc7KIuIiIihac6OiIiIGJqSHRERETE0JTsiIiJi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ySdJSEi4bT/vvvsuM2fOZNasWQQGBuLh4cHQoUNve56rq6vNpGsRERHgn7shZ/FcI8sTyU56Dh8+zN69ewkLC8Pb+58JddeuXaNx48YcOXKEatWqWfe7urqyevVqnnzySZo1a8b3339vczynpKSkMGfOHEqXLk3NmjWB1IpR7969efzxx4HUYbUzZ87YnOfi4mKd0HzLjz/+SMeOHenZs6e175MnT9qtTImIiNijYSz78sRqrPSEhIRQt25dGjduTLVq1axbw4YNCQoKIiQkJM05Li4ufPnllzRo0IDmzZtz+PBhm+MRERGEh4fbbImJibeNIzIykvDwcP744w/WrVtHy5Yt2b17t81qr3LlyrF69WoOHDjAwYMH6dGjBykptnfLLVWqFD/88AN//vknf//9t/W8TZs28fPPP3P8+HFeeOEFu/f9ERERuR0Hkylbm5HlyWQnISGBpUuX0rlz53SPd+7cmaVLl6Y73OPs7MyqVato3LgxzZs359ChQ9ZjFStWxN/f32bbt29fmj7+rWXLlvj7+xMYGMirr75K5cqVOXToEM2aNbO2mTlzJgULFqRBgwa0b9+eNm3a8PDDD9v08+abb3LmzBnKli1LkSJFAHjjjTd4+OGHadOmDU2bNsXPz49OnTpl9MckIiIiGWCy/PfWr3JfiY6Oxmw249pwNCYntzufIJKHXd38v9wOQSTboqOj8fUuQVRUlM3K4bv5fmazmcBpG3B0s7/A5XaS42I4POrRexbzvZZn5+yIiIhIxpnIxpydHI0k78mTw1giIiIiOUWVHREREQPQ0nP7lOyIiIgYgB4XYZ+SHREREQPQfXbs05wdERERMTRVdkRERAxAw1j2KdkRERExAE1Qtk/DWCIiImJoquyIiIgYQTYmKBv9roJKdkRERAxAc3bsU7IjIiJiANl5ermeei4iIiJyH1NlR0RExAB0U0H7lOyIiIgYgJae26dhLBERETE0JTsiIiIGkDqMZcrilrn3mjJlCnXq1MHT0xMfHx86derEiRMnbNpYLBbGjx9P0aJFcXd3p2nTphw9etSmTXx8PIMHD6Zw4cJ4eHjQoUMHLly4YNPm6tWr9OrVC7PZjNlsplevXly7di1T8SrZERERMYBbc3ayumXGtm3bGDhwIDt37mTTpk0kJSXRunVrYmJirG2mT5/OjBkzeO+999izZw9+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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#For second model\n", + "score = accuracy_score(y_test, a)\n", + "print(f'Accuracy: {round(score*100,2)}%')\n", + "cm = confusion_matrix(y_test, a)\n", + "plot_confusion_matrix(cm, classes=['FAKE Data', 'REAL Data'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#The first model performed better.The second model had good training accuracy but less test accuracy hinting towards overfitting.Maybe the key reason being in fake news it is important to capture overall sentiment better than individual word sentiment." + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [], + "source": [ + "def fake_news_det(news):\n", + " review = news\n", + " review = re.sub(r'[^a-zA-Z\\s]', '', review)\n", + " review = review.lower()\n", + " review = nltk.word_tokenize(review)\n", + " for y in review :\n", + " if y not in stpwrds :\n", + " corpus.append(lemmatizer.lemmatize(y)) \n", + " input_data = [' '.join(corpus)]\n", + " vectorized_input_data_pre = tokenize.texts_to_sequences(input_data)\n", + " vectorized_input_data=pad_sequences(vectorized_input_data_pre, padding=\"pre\", truncating=\"pre\")\n", + " prediction = classifier.predict(vectorized_input_data)\n", + " if prediction[0] == 1:\n", + " print(\"Prediction of the News : Looking Fake⚠ News📰 \")\n", + " else:\n", + " print(\"Prediction of the News : Looking Real News📰 \")" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1/1 [==============================] - 0s 86ms/step\n", + "Prediction of the News : Looking Fake⚠ News📰 \n" + ] + } + ], + "source": [ + "fake_news_det(\"actor steven seagal live tv erupts hillary obama intense comment actor steven seagal stood america rest hollywood remains silent week rough country first democratic nominee hillary clinton collapsed memorial called million hardworking american deplorable werent enough nfl player throughout country blatantly disrespecting american flag needle say seagal enough think important job secretary state ensuring people dont get killed seagal tweeted cant email protected pneumonia going disastrous american people notohillary continued course seagal quickly became target liberal fire comment refused break particularly lost one twitter user tried argued hillary capable presidency capable capable leaving american die capable disregarding law capable disrespecting rape survivor argued went address race relation united state true role president barack obama played social evolution country obama abysmal race relation usa truth need start honest dialog wrote seagal concluded pointing irony attack receiving liberal everywhere best thing worldmaking one statement freedom getting attacked every demo hypocritical tweeted america without democrat white house safer america think seagals comment\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Fake-News-Classification/README.md b/Fake-News-Classification/README.md new file mode 100644 index 000000000..d22ba02d2 --- /dev/null +++ b/Fake-News-Classification/README.md @@ -0,0 +1,97 @@ +# Fake News Classification using DL + +## PROJECT TITLE + +Fake News Detection using Deep Learning + +## GOAL + +To identify whether the given news is fake or not. + +## DATASET + +The link for the dataset used in this project: https://www.kaggle.com/competitions/fake-news/data?select=train.csv + + +## DESCRIPTION + +This project aims to identify whether the given news is fake or not by extracting meaning and semantics of the given news. + +## WHAT I HAD DONE + +1. Data collection: From the link of the dataset given above. +2. Data preprocessing: Preprocessed the news by combining title and text to create a new feature and did some augementation like tokeinizing and vectorising before passing them to model training +3. Model selection: Self Designed model having a Embedding Layer followed by Global Pooling Layer and then 2 Dense layers and then output layer.Second model had a Embedding layer followed by a RNN layer and a Dense output layer. +4. Comparative analysis: Compared the accuracy score of all the models. + +## MODELS SUMMARY + +Model-1: "sequential" +_________________________________________________________________ + Layer (type) Output Shape Param # +================================================================= + embedding (Embedding) (None, 12140, 182) 30222010 + + global_average_pooling1d ( (None, 182) 0 + GlobalAveragePooling1D) + + dense (Dense) (None, 96) 17568 + + dense_1 (Dense) (None, 24) 2328 + + dense_2 (Dense) (None, 1) 25 + +================================================================= +Total params: 30241931 (115.36 MB) +Trainable params: 30241931 (115.36 MB) +Non-trainable params: 0 (0.00 Byte) + +Model-2: "sequential_3" +_________________________________________________________________ + Layer (type) Output Shape Param # +================================================================= + embedding_3 (Embedding) (None, 12140, 100) 16605500 + + simple_rnn (SimpleRNN) (None, 10) 1110 + + dense_5 (Dense) (None, 1) 11 + +================================================================= +Total params: 16606621 (63.35 MB) +Trainable params: 16606621 (63.35 MB) +Non-trainable params: 0 (0.00 Byte) + +## LIBRARIES NEEDED + +The following libraries are required to run this project: + +- nltk +- pandas +- matplotlib +- tensorflow +- keras +- sklearn + +## EVALUATION METRICS + +The evaluation metrics I used to assess the models: + +- Accuracy +- Loss + +It is shown using Confusion Matrix in the Images folder + +## RESULTS +Results on Val dataset: +For Model-1: +Accuracy:96.11% +loss: 0.1350 + +For Model-2: +Accuracy:85.03% +loss: 0.1439 + +## CONCLUSION +Based on results we can draw following conclusions: + +1.The model-1 showed high validation accuracy of 96.11% and loss of 0.1350.Thus the model-1 worked fairly well identifying 2874 fake articles from a total of 3044.The first model performed better.The second model had good training accuracy but less test accuracy hinting towards overfitting.Maybe the key reason being in fake news it is important to capture overall sentiment better than individual word sentiment.