From 1d943bd8834109cd3e2f08bd8fd0a77245b3ef50 Mon Sep 17 00:00:00 2001 From: Ameya Chawla <88154798+ameyachawlaggsipu@users.noreply.github.com> Date: Mon, 17 Jan 2022 17:34:55 +0530 Subject: [PATCH] Add files via upload --- .../Spam-Ham-Classification.ipynb | 712 ++++++++++++++++++ 1 file changed, 712 insertions(+) create mode 100644 Spam-Ham-Classification/Spam-Ham-Classification.ipynb diff --git a/Spam-Ham-Classification/Spam-Ham-Classification.ipynb b/Spam-Ham-Classification/Spam-Ham-Classification.ipynb new file mode 100644 index 00000000..7725a133 --- /dev/null +++ b/Spam-Ham-Classification/Spam-Ham-Classification.ipynb @@ -0,0 +1,712 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c5259a75-2dc9-4714-878e-a813a76ac625", + "metadata": {}, + "source": [ + "## Spam-Ham Classification of Messages" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f712e20c-5817-480e-8d70-458d7c7e128a", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd # Used for reading Data" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5844ee86-d3bd-48c9-b6e7-a6611cbb7b16", + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"SMSSpamCollection\",sep=\"\\t\",names=[\"label\",\"message\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fff93f49-0347-440d-acd2-9f496f5e69d0", + "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", + "
labelmessage
0hamGo until jurong point, crazy.. Available only ...
1hamOk lar... Joking wif u oni...
2spamFree entry in 2 a wkly comp to win FA Cup fina...
3hamU dun say so early hor... U c already then say...
4hamNah I don't think he goes to usf, he lives aro...
\n", + "
" + ], + "text/plain": [ + " label message\n", + "0 ham Go until jurong point, crazy.. Available only ...\n", + "1 ham Ok lar... Joking wif u oni...\n", + "2 spam Free entry in 2 a wkly comp to win FA Cup fina...\n", + "3 ham U dun say so early hor... U c already then say...\n", + "4 ham Nah I don't think he goes to usf, he lives aro..." + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1e967f78-c314-4663-a7af-8369bc4ae4db", + "metadata": {}, + "outputs": [], + "source": [ + "import re # Used to generate regular expression" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "5c6ec64f-6f31-4dbb-8192-df0894879592", + "metadata": {}, + "outputs": [], + "source": [ + "import nltk # Used for stopwords" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d690ef2b-068b-463c-84b1-b1e732b1a52c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package stopwords to C:\\Users\\Anakin\n", + "[nltk_data] Skywalker\\AppData\\Roaming\\nltk_data...\n", + "[nltk_data] Package stopwords is already up-to-date!\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nltk.download('stopwords') # Downloading All StopWords" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "00d90789-81bf-4d9f-9a4b-80af85e22134", + "metadata": {}, + "outputs": [], + "source": [ + "from nltk.corpus import stopwords #Importing Stopwords" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e9bdc2a6-3863-4cd2-b22f-b271c8284cd8", + "metadata": {}, + "outputs": [], + "source": [ + "from nltk.stem.porter import PorterStemmer # Used to convert words to their root form" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "12c669da-8db8-4753-8578-4449354b0f0d", + "metadata": {}, + "outputs": [], + "source": [ + "ps = PorterStemmer()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4d7f175d-c457-4b78-8afc-4612bf15a06d", + "metadata": {}, + "outputs": [], + "source": [ + "corpus = []" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ab9378cc-bade-4ce2-ad76-0ce6d6721da1", + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(0,len(data)):\n", + " temp = re.sub('[^a-zA-z]',' ',data['message'][i]) # Removing all except words\n", + " temp = temp.lower()\n", + " temp = temp.split()\n", + " \n", + " temp = [ps.stem(word) for word in temp if not word in stopwords.words('english')]\n", + " temp = ' '.join(temp)\n", + " corpus.append(temp)\n", + " \n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "2c76e17b-8e91-468a-97be-d8e5416273ba", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.feature_extraction.text import CountVectorizer #Used to create bag of words" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a3a59459-6404-4a9c-81b1-122e534fe747", + "metadata": {}, + "outputs": [], + "source": [ + "cv = CountVectorizer() # Automatically detect unique words" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5e501301-9033-40ff-9dbc-d9173e3aec6e", + "metadata": {}, + "outputs": [], + "source": [ + "x = cv.fit_transform(corpus)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "7e7229a2-1a3a-430a-b801-51da6fd541c3", + "metadata": {}, + "outputs": [], + "source": [ + "x = x.toarray()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "36d161ee-a315-4e23-aaba-e3108a96948e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " ...,\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0]], dtype=int64)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "046b5e1a-8e4a-4004-a3dd-10d34f69d601", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5572, 6302)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "0bd8d4c8-5085-40ff-b24b-493b2f79ce3d", + "metadata": {}, + "outputs": [], + "source": [ + "y = pd.get_dummies(data['label']) #Making dummy variables" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "432991eb-2623-40dc-abbc-ddce976bf9fc", + "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", + "
hamspam
010
110
201
310
410
.........
556701
556810
556910
557010
557110
\n", + "

5572 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " ham spam\n", + "0 1 0\n", + "1 1 0\n", + "2 0 1\n", + "3 1 0\n", + "4 1 0\n", + "... ... ...\n", + "5567 0 1\n", + "5568 1 0\n", + "5569 1 0\n", + "5570 1 0\n", + "5571 1 0\n", + "\n", + "[5572 rows x 2 columns]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "bc0ac4fb-80f2-4e17-bd71-8c9fefab846a", + "metadata": {}, + "outputs": [], + "source": [ + "y = y.iloc[:,1].values" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "87c8f461-201d-4f62-b8b6-992f90d0167b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5572,)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "943a437b-abeb-4284-95f3-2b2ec2bdca48", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 1, ..., 0, 0, 0], dtype=uint8)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y # Created Y output variable where 0 means ham and 1 means spam" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "81e95c1e-f041-422e-aa7b-2fc782dfc4d8", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "add6a6b5-9607-4e65-9fd8-52527331e482", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.naive_bayes import MultinomialNB" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "d0cbf4e9-1284-4a19-b344-d525e8c04144", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.978494623655914 Split is 0.1\n", + "0.9847533632286996 Split is 0.2\n", + "0.9760765550239234 Split is 0.30000000000000004\n", + "0.9775684163301929 Split is 0.4\n", + "0.9727207465900933 Split is 0.5\n" + ] + } + ], + "source": [ + "acclist = []\n", + "for j in range(1,6):\n", + " train_x, test_x, train_y, test_y = train_test_split(x, y, test_size =j*0.1 , random_state = 20+j)\n", + " model = MultinomialNB()\n", + " model.fit(train_x, train_y)\n", + " k = model.score(test_x, test_y)\n", + " acclist.append(k)\n", + " print(k , \"Split is \",0.1*j)" + ] + }, + { + "cell_type": "raw", + "id": "85116854-0d00-42bf-b0ca-73edeae3a23f", + "metadata": {}, + "source": [ + "Results for testing for Accuracy vs Split" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "09bcf7d0-0127-438d-85c1-2ecdcee694f2", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "a6080e5d-ce4e-4926-b90b-e8cf3aeb05bb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.978494623655914,\n", + " 0.9847533632286996,\n", + " 0.9760765550239234,\n", + " 0.9775684163301929,\n", + " 0.9727207465900933]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "acclist" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "946a07e2-345a-44ff-8600-5ccfe52dce4e", + "metadata": {}, + "outputs": [], + "source": [ + "z = []\n", + "for j in range(1,6,1):\n", + " z.append(j*0.1)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "544e1807-8b49-44ef-90ad-5a187012463e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "plt.scatter(z,acclist)\n", + "plt.xlabel(\" Different Train-Test-Split Chosen\")\n", + "plt.ylabel(\"Accuracies obtained for given Train-Test-SPlit\")\n", + "plt.title(\"Accuracy vs Train-Test-Split\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "b186f13c-8bf4-4875-9446-253944e4f748", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[944 14]\n", + " [ 7 150]]\n" + ] + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "train_x, test_x, train_y, test_y = train_test_split(x, y, test_size =2*0.1 , random_state = 20+j)\n", + "model = MultinomialNB()\n", + "model.fit(train_x, train_y)\n", + "cm=confusion_matrix(test_y, model.predict(test_x))\n", + "print(cm)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "e03b8ad4-3844-4a77-a776-cd9e148a46f3", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "from sklearn.metrics import confusion_matrix\n", + "plt.title('Confusion Matrix')\n", + "f = sns.heatmap(cm, annot=True, fmt='d')" + ] + }, + { + "cell_type": "raw", + "id": "bbdd36d6-49ae-4e6e-a6c1-135a099957f1", + "metadata": {}, + "source": [ + "Actual and Predicted Class0 - 944\n", + "Actual and Predicted Class1 - 150\n", + "Actual Class1 and Predicted Class0 - 7\n", + "Actual Class0 and Predicted Class1 - 14" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c2998828-6d9f-4542-ad86-841a1bc0c32c", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.9.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}