HarmanpreetKaur commited on
Commit
7669dc4
·
1 Parent(s): 9eef133
.ipynb_checkpoints/SpamFilteration-checkpoint.ipynb ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [],
3
+ "metadata": {},
4
+ "nbformat": 4,
5
+ "nbformat_minor": 5
6
+ }
.ipynb_checkpoints/Untitled-checkpoint.ipynb ADDED
@@ -0,0 +1,483 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "edd820ef-7d81-4bde-ab6e-e3ab552d3739",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "import pandas as pd\n",
11
+ "\n",
12
+ "df=pd.read_csv('spam.csv', encoding='ISO-8859-1')"
13
+ ]
14
+ },
15
+ {
16
+ "cell_type": "code",
17
+ "execution_count": 2,
18
+ "id": "8386dc03-5c8c-4315-9692-c05fa25f8311",
19
+ "metadata": {},
20
+ "outputs": [
21
+ {
22
+ "data": {
23
+ "text/html": [
24
+ "<div>\n",
25
+ "<style scoped>\n",
26
+ " .dataframe tbody tr th:only-of-type {\n",
27
+ " vertical-align: middle;\n",
28
+ " }\n",
29
+ "\n",
30
+ " .dataframe tbody tr th {\n",
31
+ " vertical-align: top;\n",
32
+ " }\n",
33
+ "\n",
34
+ " .dataframe thead th {\n",
35
+ " text-align: right;\n",
36
+ " }\n",
37
+ "</style>\n",
38
+ "<table border=\"1\" class=\"dataframe\">\n",
39
+ " <thead>\n",
40
+ " <tr style=\"text-align: right;\">\n",
41
+ " <th></th>\n",
42
+ " <th>v1</th>\n",
43
+ " <th>v2</th>\n",
44
+ " <th>Unnamed: 2</th>\n",
45
+ " <th>Unnamed: 3</th>\n",
46
+ " <th>Unnamed: 4</th>\n",
47
+ " </tr>\n",
48
+ " </thead>\n",
49
+ " <tbody>\n",
50
+ " <tr>\n",
51
+ " <th>0</th>\n",
52
+ " <td>ham</td>\n",
53
+ " <td>Go until jurong point, crazy.. Available only ...</td>\n",
54
+ " <td>NaN</td>\n",
55
+ " <td>NaN</td>\n",
56
+ " <td>NaN</td>\n",
57
+ " </tr>\n",
58
+ " <tr>\n",
59
+ " <th>1</th>\n",
60
+ " <td>ham</td>\n",
61
+ " <td>Ok lar... Joking wif u oni...</td>\n",
62
+ " <td>NaN</td>\n",
63
+ " <td>NaN</td>\n",
64
+ " <td>NaN</td>\n",
65
+ " </tr>\n",
66
+ " <tr>\n",
67
+ " <th>2</th>\n",
68
+ " <td>spam</td>\n",
69
+ " <td>Free entry in 2 a wkly comp to win FA Cup fina...</td>\n",
70
+ " <td>NaN</td>\n",
71
+ " <td>NaN</td>\n",
72
+ " <td>NaN</td>\n",
73
+ " </tr>\n",
74
+ " <tr>\n",
75
+ " <th>3</th>\n",
76
+ " <td>ham</td>\n",
77
+ " <td>U dun say so early hor... U c already then say...</td>\n",
78
+ " <td>NaN</td>\n",
79
+ " <td>NaN</td>\n",
80
+ " <td>NaN</td>\n",
81
+ " </tr>\n",
82
+ " <tr>\n",
83
+ " <th>4</th>\n",
84
+ " <td>ham</td>\n",
85
+ " <td>Nah I don't think he goes to usf, he lives aro...</td>\n",
86
+ " <td>NaN</td>\n",
87
+ " <td>NaN</td>\n",
88
+ " <td>NaN</td>\n",
89
+ " </tr>\n",
90
+ " </tbody>\n",
91
+ "</table>\n",
92
+ "</div>"
93
+ ],
94
+ "text/plain": [
95
+ " v1 v2 Unnamed: 2 \\\n",
96
+ "0 ham Go until jurong point, crazy.. Available only ... NaN \n",
97
+ "1 ham Ok lar... Joking wif u oni... NaN \n",
98
+ "2 spam Free entry in 2 a wkly comp to win FA Cup fina... NaN \n",
99
+ "3 ham U dun say so early hor... U c already then say... NaN \n",
100
+ "4 ham Nah I don't think he goes to usf, he lives aro... NaN \n",
101
+ "\n",
102
+ " Unnamed: 3 Unnamed: 4 \n",
103
+ "0 NaN NaN \n",
104
+ "1 NaN NaN \n",
105
+ "2 NaN NaN \n",
106
+ "3 NaN NaN \n",
107
+ "4 NaN NaN "
108
+ ]
109
+ },
110
+ "execution_count": 2,
111
+ "metadata": {},
112
+ "output_type": "execute_result"
113
+ }
114
+ ],
115
+ "source": [
116
+ "df.head()"
117
+ ]
118
+ },
119
+ {
120
+ "cell_type": "code",
121
+ "execution_count": 3,
122
+ "id": "9ed2ab97-333f-4799-88e3-3de58660aac7",
123
+ "metadata": {},
124
+ "outputs": [
125
+ {
126
+ "data": {
127
+ "text/plain": [
128
+ "(5572, 5)"
129
+ ]
130
+ },
131
+ "execution_count": 3,
132
+ "metadata": {},
133
+ "output_type": "execute_result"
134
+ }
135
+ ],
136
+ "source": [
137
+ "df.shape"
138
+ ]
139
+ },
140
+ {
141
+ "cell_type": "code",
142
+ "execution_count": 4,
143
+ "id": "29d9c604-6d5c-4963-a044-aebcb60c44f5",
144
+ "metadata": {},
145
+ "outputs": [
146
+ {
147
+ "data": {
148
+ "text/plain": [
149
+ "v1 0\n",
150
+ "v2 0\n",
151
+ "Unnamed: 2 5522\n",
152
+ "Unnamed: 3 5560\n",
153
+ "Unnamed: 4 5566\n",
154
+ "dtype: int64"
155
+ ]
156
+ },
157
+ "execution_count": 4,
158
+ "metadata": {},
159
+ "output_type": "execute_result"
160
+ }
161
+ ],
162
+ "source": [
163
+ "df.isnull().sum()"
164
+ ]
165
+ },
166
+ {
167
+ "cell_type": "code",
168
+ "execution_count": 5,
169
+ "id": "e101ce21-a112-478f-8538-5b3d767cffcb",
170
+ "metadata": {},
171
+ "outputs": [
172
+ {
173
+ "data": {
174
+ "text/plain": [
175
+ "Index(['v1', 'v2', 'Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'], dtype='object')"
176
+ ]
177
+ },
178
+ "execution_count": 5,
179
+ "metadata": {},
180
+ "output_type": "execute_result"
181
+ }
182
+ ],
183
+ "source": [
184
+ "df.columns"
185
+ ]
186
+ },
187
+ {
188
+ "cell_type": "code",
189
+ "execution_count": 6,
190
+ "id": "bf9f405c-c7bf-4a13-9861-8e69a22d2de3",
191
+ "metadata": {},
192
+ "outputs": [],
193
+ "source": [
194
+ "df=df.drop(['Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'],axis=1)"
195
+ ]
196
+ },
197
+ {
198
+ "cell_type": "code",
199
+ "execution_count": 7,
200
+ "id": "2cc8fd91-bc8c-4719-b823-852419430b07",
201
+ "metadata": {},
202
+ "outputs": [],
203
+ "source": [
204
+ "df.columns = ['label', 'text']"
205
+ ]
206
+ },
207
+ {
208
+ "cell_type": "code",
209
+ "execution_count": 8,
210
+ "id": "d36ba538-bfac-495d-b84a-a79f40109c01",
211
+ "metadata": {},
212
+ "outputs": [
213
+ {
214
+ "data": {
215
+ "text/html": [
216
+ "<div>\n",
217
+ "<style scoped>\n",
218
+ " .dataframe tbody tr th:only-of-type {\n",
219
+ " vertical-align: middle;\n",
220
+ " }\n",
221
+ "\n",
222
+ " .dataframe tbody tr th {\n",
223
+ " vertical-align: top;\n",
224
+ " }\n",
225
+ "\n",
226
+ " .dataframe thead th {\n",
227
+ " text-align: right;\n",
228
+ " }\n",
229
+ "</style>\n",
230
+ "<table border=\"1\" class=\"dataframe\">\n",
231
+ " <thead>\n",
232
+ " <tr style=\"text-align: right;\">\n",
233
+ " <th></th>\n",
234
+ " <th>label</th>\n",
235
+ " <th>text</th>\n",
236
+ " </tr>\n",
237
+ " </thead>\n",
238
+ " <tbody>\n",
239
+ " <tr>\n",
240
+ " <th>0</th>\n",
241
+ " <td>ham</td>\n",
242
+ " <td>Go until jurong point, crazy.. Available only ...</td>\n",
243
+ " </tr>\n",
244
+ " <tr>\n",
245
+ " <th>1</th>\n",
246
+ " <td>ham</td>\n",
247
+ " <td>Ok lar... Joking wif u oni...</td>\n",
248
+ " </tr>\n",
249
+ " <tr>\n",
250
+ " <th>2</th>\n",
251
+ " <td>spam</td>\n",
252
+ " <td>Free entry in 2 a wkly comp to win FA Cup fina...</td>\n",
253
+ " </tr>\n",
254
+ " <tr>\n",
255
+ " <th>3</th>\n",
256
+ " <td>ham</td>\n",
257
+ " <td>U dun say so early hor... U c already then say...</td>\n",
258
+ " </tr>\n",
259
+ " <tr>\n",
260
+ " <th>4</th>\n",
261
+ " <td>ham</td>\n",
262
+ " <td>Nah I don't think he goes to usf, he lives aro...</td>\n",
263
+ " </tr>\n",
264
+ " </tbody>\n",
265
+ "</table>\n",
266
+ "</div>"
267
+ ],
268
+ "text/plain": [
269
+ " label text\n",
270
+ "0 ham Go until jurong point, crazy.. Available only ...\n",
271
+ "1 ham Ok lar... Joking wif u oni...\n",
272
+ "2 spam Free entry in 2 a wkly comp to win FA Cup fina...\n",
273
+ "3 ham U dun say so early hor... U c already then say...\n",
274
+ "4 ham Nah I don't think he goes to usf, he lives aro..."
275
+ ]
276
+ },
277
+ "execution_count": 8,
278
+ "metadata": {},
279
+ "output_type": "execute_result"
280
+ }
281
+ ],
282
+ "source": [
283
+ "df.head()"
284
+ ]
285
+ },
286
+ {
287
+ "cell_type": "code",
288
+ "execution_count": 9,
289
+ "id": "eea8ed01-7993-4ab7-8719-69e0dc20f842",
290
+ "metadata": {},
291
+ "outputs": [
292
+ {
293
+ "data": {
294
+ "image/png": "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calv3rx5pW0cPXrUvHn0t84dO3LkiCRpypQpql+/vss0fvx4SdLPP/9cK8d1ruLiYh09elQhISHnrWnXrp0++eQTBQUF6ZFHHlG7du3Url07Pf/885e0r6p+RufjcDjOO3b06NFL2u+lOnr0aJW9VvyMzt1/YGCgy7y3t7ekyv+PAFbAPSXANei9995TcXGx3n33XbVq1cocz87OrrK+qps1AwMDtX379krjeXl5LvNNmzaVJE2bNk2DBw+ucvvh4eHVbf2SrFy5UuXl5Rd9jLd79+7q3r27ysvLtXPnTr3wwgtKTExUcHCwhg0bVq19Xcq7T879Gf12rCIENGjQQJJUWlrqUne5AS4wMFC5ubmVxn/66SdJ///PC7gWcaYEuAZVfIBW/KtX+vUyx+LFi6u9jR49eujEiRNavXq1y3hqaqrLfHh4uMLCwvTll1+qS5cuVU5+fn4u/dTGv8IPHjyoKVOmyG63a9y4cdVax9PTU1FRUeYZo4pLKbV9dmD37t368ssvXcZWrFghPz8/8wbfive0fPXVVy51H3zwQaXteXt7V7u3Xr16af369WYIqfDqq6/K19eXR4hxTeNMCXAN6tOnj7y8vHT//fcrKSlJp0+f1oIFC1RYWFjtbYwcOVJz587ViBEj9PTTT+v666/X6tWr9fHHH0uSPDz+/79ZFi5cqP79++uuu+7SqFGjdN111+nYsWPas2ePPv/8c7311luSfn3fiCQtWrRIfn5+atCggdq0aVPpEsK5du3aZd6nkp+fr02bNmnJkiXy9PRUWlpapSdlfuull17S+vXrNXDgQLVs2VKnT582nz6qeOman5+fWrVqpffff1+9evVSQECAmjZtekkvePutkJAQxcXFacaMGWrevLlef/11rV27VrNmzTLf/3LrrbcqPDxcU6ZM0S+//KImTZooLS1NmzdvrrS9yMhIvfvuu1qwYIE6d+4sDw8Pl/e2/Nb06dP10Ucf6c4779RTTz2lgIAALV++XCtXrtTs2bNlt9trdEyAJbj7TlsAF1fV0zcffvih0alTJ6NBgwbGddddZ/zlL38xVq9eXenJjh49ehg33XRTlds9ePCgMXjwYKNRo0aGn5+fcc899xirVq0yJBnvv/++S+2XX35pDBkyxAgKCjLq169vOBwOo2fPnsZLL73kUvfcc88Zbdq0MTw9PSs9xXOuiidUKiYvLy8jKCjI6NGjh5GcnGzk5+dXWufcJ2K2bt1q/PGPfzRatWpleHt7G4GBgUaPHj2MDz74wGW9Tz75xLjlllsMb29vQ5IxcuRIl+0VFBRcdF+G8evTNwMHDjTefvtt46abbjK8vLyM1q1bG3PmzKm0/rfffmv07dvX8Pf3N5o1a2ZMmDDBWLlyZaU/o2PHjhn33nuv0bhxY8Nms7nsU1U8NfT1118bgwYNMux2u+Hl5WV06tSp0s+54umbt956y2U8Jyfnon8ugLvYDOMit7YDqFOSk5P15JNP6uDBg25/mymAuoXLN0AdNn/+fEkyv3dm/fr1mjdvnkaMGEEgAXDVEUqAOszX11dz587VgQMHVFpaqpYtW2rq1Kl68skn3d0agDqIyzcAAMASeCQYAABYAqEEAABYAqEEAABYAje6VtPZs2f1008/yc/P75JeRw0AQF1nGIZOnDihkJAQlxczVlXoNhUvJvrtFBwcbC4/e/asMX36dKN58+ZGgwYNjB49ehi7du1y2cbp06eNRx991AgMDDR8fX2NQYMGGYcOHXKpOXbsmDFixAjD39/f8Pf3N0aMGGEUFhZeUq+HDh2q1CsTExMTExNT9adzP5/P5fYzJTfddJM++eQTc97T09P879mzZ2vOnDlaunSpbrjhBj399NPq06eP9u3bZ37XRmJioj788EOlpqYqMDBQkydPVmxsrLKyssxtxcfH6/Dhw0pPT5ckjR07VgkJCfrwww+r3WfF/g4dOiR/f//LPm4AAOqKoqIihYaGmp+l53VJpwtq2fTp041OnTpVuezs2bOGw+Ew/vnPf5pjp0+fNux2u/la6+PHjxv169c3UlNTzZoff/zR8PDwMNLT0w3DMIxvvvnGkGRkZmaaNVu3bjUkGXv37q12r06n05BkOJ3OSzlEAADqvOp+hrr9RtfvvvtOISEhatOmjYYNG6b//Oc/kqScnBzl5eWpb9++Zq23t7d69OihLVu2SJKysrJ05swZl5qQkBBFRESYNVu3bpXdbldUVJRZ07VrV9ntdrOmKqWlpSoqKnKZAADAlePWUBIVFaVXX31VH3/8sRYvXqy8vDx169ZNR48eVV5eniQpODjYZZ3g4GBzWV5enry8vNSkSZML1gQFBVXad1BQkFlTlZSUFNntdnMKDQ29rGMFAAAX5tZQ0r9/f91zzz2KjIxU7969tXLlSknSsmXLzJpzn3QxDOOiT7+cW1NV/cW2M23aNDmdTnM6dOhQtY4JAADUjNsv3/xWw4YNFRkZqe+++04Oh0OSKp3NyM/PN8+eOBwOlZWVqbCw8II1R44cqbSvgoKCSmdhfsvb21v+/v4uEwAAuHIsFUpKS0u1Z88eNW/eXG3atJHD4dDatWvN5WVlZcrIyFC3bt0kSZ07d1b9+vVdanJzc7Vr1y6zJjo6Wk6nU9u3bzdrtm3bJqfTadYAAAD3c+sjwVOmTNGgQYPUsmVL5efn6+mnn1ZRUZFGjhwpm82mxMREJScnKywsTGFhYUpOTpavr6/i4+MlSXa7XaNHj9bkyZMVGBiogIAATZkyxbwcJEnt27dXv379NGbMGC1cuFDSr48Ex8bGKjw83G3HDgAAXLk1lBw+fFj333+/fv75ZzVr1kxdu3ZVZmamWrVqJUlKSkpSSUmJxo8fr8LCQkVFRWnNmjUuzznPnTtX9erV05AhQ1RSUqJevXpp6dKlLu87Wb58uSZOnGg+pRMXF6f58+df3YMFAAAXZDMMw3B3E9eCoqIi2e12OZ1O7i8BAOASVPcz1FL3lAAAgLqLUAIAACyBUAIAACzB7V/Ih191/sur7m4BuOKynnnA3S0AsDDOlAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEsglAAAAEuwTChJSUmRzWZTYmKiOWYYhmbMmKGQkBD5+PgoJiZGu3fvdlmvtLRUEyZMUNOmTdWwYUPFxcXp8OHDLjWFhYVKSEiQ3W6X3W5XQkKCjh8/fhWOCgAAVJclQsmOHTu0aNEidezY0WV89uzZmjNnjubPn68dO3bI4XCoT58+OnHihFmTmJiotLQ0paamavPmzTp58qRiY2NVXl5u1sTHxys7O1vp6elKT09Xdna2EhISrtrxAQCAi3N7KDl58qSGDx+uxYsXq0mTJua4YRh67rnn9MQTT2jw4MGKiIjQsmXLdOrUKa1YsUKS5HQ69b//+7969tln1bt3b91yyy16/fXX9fXXX+uTTz6RJO3Zs0fp6el6+eWXFR0drejoaC1evFgfffSR9u3b55ZjBgAAlbk9lDzyyCMaOHCgevfu7TKek5OjvLw89e3b1xzz9vZWjx49tGXLFklSVlaWzpw541ITEhKiiIgIs2br1q2y2+2Kiooya7p27Sq73W7WVKW0tFRFRUUuEwAAuHLquXPnqamp+vzzz7Vjx45Ky/Ly8iRJwcHBLuPBwcH64YcfzBovLy+XMywVNRXr5+XlKSgoqNL2g4KCzJqqpKSkaObMmZd2QAAAoMbcdqbk0KFD+vOf/6zXX39dDRo0OG+dzWZzmTcMo9LYuc6tqar+YtuZNm2anE6nOR06dOiC+wQAAJfHbaEkKytL+fn56ty5s+rVq6d69eopIyND8+bNU7169cwzJOeezcjPzzeXORwOlZWVqbCw8II1R44cqbT/goKCSmdhfsvb21v+/v4uEwAAuHLcFkp69eqlr7/+WtnZ2ebUpUsXDR8+XNnZ2Wrbtq0cDofWrl1rrlNWVqaMjAx169ZNktS5c2fVr1/fpSY3N1e7du0ya6Kjo+V0OrV9+3azZtu2bXI6nWYNAABwP7fdU+Ln56eIiAiXsYYNGyowMNAcT0xMVHJyssLCwhQWFqbk5GT5+voqPj5ekmS32zV69GhNnjxZgYGBCggI0JQpUxQZGWneONu+fXv169dPY8aM0cKFCyVJY8eOVWxsrMLDw6/iEQMAgAtx642uF5OUlKSSkhKNHz9ehYWFioqK0po1a+Tn52fWzJ07V/Xq1dOQIUNUUlKiXr16aenSpfL09DRrli9frokTJ5pP6cTFxWn+/PlX/XgAAMD52QzDMNzdxLWgqKhIdrtdTqfzitxf0vkvr9b6NgGryXrmAXe3AMANqvsZ6vb3lAAAAEiEEgAAYBGEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAluDSULFixQx44d5e/vL39/f0VHR2v16tXmcsMwNGPGDIWEhMjHx0cxMTHavXu3yzZKS0s1YcIENW3aVA0bNlRcXJwOHz7sUlNYWKiEhATZ7XbZ7XYlJCTo+PHjV+MQAQBANbk1lLRo0UL//Oc/tXPnTu3cuVM9e/bUH/7wBzN4zJ49W3PmzNH8+fO1Y8cOORwO9enTRydOnDC3kZiYqLS0NKWmpmrz5s06efKkYmNjVV5ebtbEx8crOztb6enpSk9PV3Z2thISEq768QIAgPOzGYZhuLuJ3woICNAzzzyjBx98UCEhIUpMTNTUqVMl/XpWJDg4WLNmzdK4cePkdDrVrFkzvfbaaxo6dKgk6aefflJoaKhWrVqlu+66S3v27FGHDh2UmZmpqKgoSVJmZqaio6O1d+9ehYeHV6uvoqIi2e12OZ1O+fv71/pxd/7Lq7W+TcBqsp55wN0tAHCD6n6GWuaekvLycqWmpqq4uFjR0dHKyclRXl6e+vbta9Z4e3urR48e2rJliyQpKytLZ86ccakJCQlRRESEWbN161bZ7XYzkEhS165dZbfbzZqqlJaWqqioyGUCAABXjttDyddff61GjRrJ29tbDz/8sNLS0tShQwfl5eVJkoKDg13qg4ODzWV5eXny8vJSkyZNLlgTFBRUab9BQUFmTVVSUlLMe1DsdrtCQ0Mv6zgBAMCFuT2UhIeHKzs7W5mZmfrTn/6kkSNH6ptvvjGX22w2l3rDMCqNnevcmqrqL7adadOmyel0mtOhQ4eqe0gAAKAG3B5KvLy8dP3116tLly5KSUlRp06d9Pzzz8vhcEhSpbMZ+fn55tkTh8OhsrIyFRYWXrDmyJEjlfZbUFBQ6SzMb3l7e5tPBVVMAADgynF7KDmXYRgqLS1VmzZt5HA4tHbtWnNZWVmZMjIy1K1bN0lS586dVb9+fZea3Nxc7dq1y6yJjo6W0+nU9u3bzZpt27bJ6XSaNQAAwP3quXPnjz/+uPr376/Q0FCdOHFCqamp2rhxo9LT02Wz2ZSYmKjk5GSFhYUpLCxMycnJ8vX1VXx8vCTJbrdr9OjRmjx5sgIDAxUQEKApU6YoMjJSvXv3liS1b99e/fr105gxY7Rw4UJJ0tixYxUbG1vtJ28AAMCV59ZQcuTIESUkJCg3N1d2u10dO3ZUenq6+vTpI0lKSkpSSUmJxo8fr8LCQkVFRWnNmjXy8/MztzF37lzVq1dPQ4YMUUlJiXr16qWlS5fK09PTrFm+fLkmTpxoPqUTFxen+fPnX92DBQAAF2S595RYFe8pAS4f7ykB6qZr7j0lAACgbiOUAAAASyCUAAAASyCUAAAASyCUAAAAS6hRKOnZs6eOHz9eabyoqEg9e/a83J4AAEAdVKNQsnHjRpWVlVUaP336tDZt2nTZTQEAgLrnkl6e9tVXX5n//c0337h8L015ebnS09N13XXX1V53AACgzrikUHLzzTfLZrPJZrNVeZnGx8dHL7zwQq01BwAA6o5LCiU5OTkyDENt27bV9u3b1axZM3OZl5eXgoKCXF7vDgAAUF2XFEpatWolSTp79uwVaQYAANRdNf5Cvm+//VYbN25Ufn5+pZDy1FNPXXZjAACgbqlRKFm8eLH+9Kc/qWnTpnI4HLLZbOYym81GKAEAAJesRqHk6aef1j/+8Q9NnTq1tvsBAAB1VI3eU1JYWKj77ruvtnsBAAB1WI1CyX333ac1a9bUdi8AAKAOq9Hlm+uvv15/+9vflJmZqcjISNWvX99l+cSJE2ulOQAAUHfUKJQsWrRIjRo1UkZGhjIyMlyW2Ww2QgkAALhkNQolOTk5td0HAACo42p0TwkAAEBtq9GZkgcffPCCy1955ZUaNQMAAOquGoWSwsJCl/kzZ85o165dOn78eJVf1AcAAHAxNQolaWlplcbOnj2r8ePHq23btpfdFAAAqHtq7Z4SDw8PPfbYY5o7d25tbRIAANQhtXqj6/79+/XLL7/U5iYBAEAdUaPLN5MmTXKZNwxDubm5WrlypUaOHFkrjQEAgLqlRqHkiy++cJn38PBQs2bN9Oyzz170yRwAAICq1CiUbNiwobb7AAAAdVyNQkmFgoIC7du3TzabTTfccIOaNWtWW30BAIA6pkY3uhYXF+vBBx9U8+bNdccdd6h79+4KCQnR6NGjderUqdruEQAA1AE1CiWTJk1SRkaGPvzwQx0/flzHjx/X+++/r4yMDE2ePLm2ewQAAHVAjS7fvPPOO3r77bcVExNjjg0YMEA+Pj4aMmSIFixYUFv9AQCAOqJGZ0pOnTql4ODgSuNBQUFcvgEAADVSo1ASHR2t6dOn6/Tp0+ZYSUmJZs6cqejo6FprDgAA1B01unzz3HPPqX///mrRooU6deokm82m7OxseXt7a82aNbXdIwAAqANqFEoiIyP13Xff6fXXX9fevXtlGIaGDRum4cOHy8fHp7Z7BAAAdUCNQklKSoqCg4M1ZswYl/FXXnlFBQUFmjp1aq00BwAA6o4a3VOycOFC3XjjjZXGb7rpJr300kuX3RQAAKh7ahRK8vLy1Lx580rjzZo1U25u7mU3BQAA6p4ahZLQ0FB99tlnlcY/++wzhYSEXHZTAACg7qnRPSUPPfSQEhMTdebMGfXs2VOStG7dOiUlJfFGVwAAUCM1CiVJSUk6duyYxo8fr7KyMklSgwYNNHXqVE2bNq1WGwQAAHVDjUKJzWbTrFmz9Le//U179uyRj4+PwsLC5O3tXdv9AQCAOqJGoaRCo0aNdOutt9ZWLwAAoA6r0Y2uAAAAtY1QAgAALIFQAgAALIFQAgAALIFQAgAALIFQAgAALMGtoSQlJUW33nqr/Pz8FBQUpLvvvlv79u1zqTEMQzNmzFBISIh8fHwUExOj3bt3u9SUlpZqwoQJatq0qRo2bKi4uDgdPnzYpaawsFAJCQmy2+2y2+1KSEjQ8ePHr/QhAgCAanJrKMnIyNAjjzyizMxMrV27Vr/88ov69u2r4uJis2b27NmaM2eO5s+frx07dsjhcKhPnz46ceKEWZOYmKi0tDSlpqZq8+bNOnnypGJjY1VeXm7WxMfHKzs7W+np6UpPT1d2drYSEhKu6vECAIDzsxmGYbi7iQoFBQUKCgpSRkaG7rjjDhmGoZCQECUmJmrq1KmSfj0rEhwcrFmzZmncuHFyOp1q1qyZXnvtNQ0dOlSS9NNPPyk0NFSrVq3SXXfdpT179qhDhw7KzMxUVFSUJCkzM1PR0dHau3evwsPDL9pbUVGR7Ha7nE6n/P39a/3YO//l1VrfJmA1Wc884O4WALhBdT9DLXVPidPplCQFBARIknJycpSXl6e+ffuaNd7e3urRo4e2bNkiScrKytKZM2dcakJCQhQREWHWbN26VXa73QwkktS1a1fZ7Xaz5lylpaUqKipymQAAwJVjmVBiGIYmTZqk22+/XREREZKkvLw8SVJwcLBLbXBwsLksLy9PXl5eatKkyQVrgoKCKu0zKCjIrDlXSkqKef+J3W5XaGjo5R0gAAC4IMuEkkcffVRfffWV3njjjUrLbDaby7xhGJXGznVuTVX1F9rOtGnT5HQ6zenQoUPVOQwAAFBDlgglEyZM0AcffKANGzaoRYsW5rjD4ZCkSmcz8vPzzbMnDodDZWVlKiwsvGDNkSNHKu23oKCg0lmYCt7e3vL393eZAADAlePWUGIYhh599FG9++67Wr9+vdq0aeOyvE2bNnI4HFq7dq05VlZWpoyMDHXr1k2S1LlzZ9WvX9+lJjc3V7t27TJroqOj5XQ6tX37drNm27ZtcjqdZg0AAHCveu7c+SOPPKIVK1bo/fffl5+fn3lGxG63y8fHRzabTYmJiUpOTlZYWJjCwsKUnJwsX19fxcfHm7WjR4/W5MmTFRgYqICAAE2ZMkWRkZHq3bu3JKl9+/bq16+fxowZo4ULF0qSxo4dq9jY2Go9eQMAAK48t4aSBQsWSJJiYmJcxpcsWaJRo0ZJkpKSklRSUqLx48ersLBQUVFRWrNmjfz8/Mz6uXPnql69ehoyZIhKSkrUq1cvLV26VJ6enmbN8uXLNXHiRPMpnbi4OM2fP//KHiAAAKg2S72nxMp4Twlw+XhPCVA3XZPvKQEAAHUXoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFiCW0PJp59+qkGDBikkJEQ2m03vvfeey3LDMDRjxgyFhITIx8dHMTEx2r17t0tNaWmpJkyYoKZNm6phw4aKi4vT4cOHXWoKCwuVkJAgu90uu92uhIQEHT9+/AofHQAAuBRuDSXFxcXq1KmT5s+fX+Xy2bNna86cOZo/f7527Nghh8OhPn366MSJE2ZNYmKi0tLSlJqaqs2bN+vkyZOKjY1VeXm5WRMfH6/s7Gylp6crPT1d2dnZSkhIuOLHBwAAqs9mGIbh7iYkyWazKS0tTXfffbekX8+ShISEKDExUVOnTpX061mR4OBgzZo1S+PGjZPT6VSzZs302muvaejQoZKkn376SaGhoVq1apXuuusu7dmzRx06dFBmZqaioqIkSZmZmYqOjtbevXsVHh5erf6Kiopkt9vldDrl7+9f68ff+S+v1vo2AavJeuYBd7cAwA2q+xlq2XtKcnJylJeXp759+5pj3t7e6tGjh7Zs2SJJysrK0pkzZ1xqQkJCFBERYdZs3bpVdrvdDCSS1LVrV9ntdrOmKqWlpSoqKnKZAADAlWPZUJKXlydJCg4OdhkPDg42l+Xl5cnLy0tNmjS5YE1QUFCl7QcFBZk1VUlJSTHvQbHb7QoNDb2s4wEAABdm2VBSwWazucwbhlFp7Fzn1lRVf7HtTJs2TU6n05wOHTp0iZ0DAIBLYdlQ4nA4JKnS2Yz8/Hzz7InD4VBZWZkKCwsvWHPkyJFK2y8oKKh0Fua3vL295e/v7zIBAIArx7KhpE2bNnI4HFq7dq05VlZWpoyMDHXr1k2S1LlzZ9WvX9+lJjc3V7t27TJroqOj5XQ6tX37drNm27ZtcjqdZg0AAHC/eu7c+cmTJ/X999+b8zk5OcrOzlZAQIBatmypxMREJScnKywsTGFhYUpOTpavr6/i4+MlSXa7XaNHj9bkyZMVGBiogIAATZkyRZGRkerdu7ckqX379urXr5/GjBmjhQsXSpLGjh2r2NjYaj95AwAArjy3hpKdO3fqzjvvNOcnTZokSRo5cqSWLl2qpKQklZSUaPz48SosLFRUVJTWrFkjPz8/c525c+eqXr16GjJkiEpKStSrVy8tXbpUnp6eZs3y5cs1ceJE8ymduLi4874bBQAAuIdl3lNidbynBLh8vKcEqJuu+feUAACAuoVQAgAALIFQAgAALIFQAgAALIFQAgAALIFQAgAALIFQAgAALIFQAgAALMGtb3QFgGvFwb9HursF4Ipr+dTXbt0/Z0oAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAlEEoAAIAl1KlQ8q9//Utt2rRRgwYN1LlzZ23atMndLQEAgP9TZ0LJv//9byUmJuqJJ57QF198oe7du6t///46ePCgu1sDAACqQ6Fkzpw5Gj16tB566CG1b99ezz33nEJDQ7VgwQJ3twYAACTVc3cDV0NZWZmysrL017/+1WW8b9++2rJlS5XrlJaWqrS01Jx3Op2SpKKioivSY3lpyRXZLmAlV+r352o4cbrc3S0AV9yV+h2t2K5hGBesqxOh5Oeff1Z5ebmCg4NdxoODg5WXl1flOikpKZo5c2al8dDQ0CvSI1AX2F942N0tALiQFPsV3fyJEydkt59/H3UilFSw2Wwu84ZhVBqrMG3aNE2aNMmcP3v2rI4dO6bAwMDzroNrR1FRkUJDQ3Xo0CH5+/u7ux0A5+B39PfFMAydOHFCISEhF6yrE6GkadOm8vT0rHRWJD8/v9LZkwre3t7y9vZ2GWvcuPGVahFu4u/vz194gIXxO/r7caEzJBXqxI2uXl5e6ty5s9auXesyvnbtWnXr1s1NXQEAgN+qE2dKJGnSpElKSEhQly5dFB0drUWLFungwYN6+GGucQMAYAV1JpQMHTpUR48e1d///nfl5uYqIiJCq1atUqtWrdzdGtzA29tb06dPr3SJDoA18DtaN9mMiz2fAwAAcBXUiXtKAACA9RFKAACAJRBKAACAJRBKcM2LiYlRYmKiu9sAAFwmQgkAALAEQgkAALAEQgl+F86ePaukpCQFBATI4XBoxowZ5rI5c+YoMjJSDRs2VGhoqMaPH6+TJ0+ay5cuXarGjRvro48+Unh4uHx9fXXvvfequLhYy5YtU+vWrdWkSRNNmDBB5eV8UyxwMW+//bYiIyPl4+OjwMBA9e7dW8XFxRo1apTuvvtuzZw5U0FBQfL399e4ceNUVlZmrpuenq7bb79djRs3VmBgoGJjY7V//35z+YEDB2Sz2fTmm2+qe/fu8vHx0a233qpvv/1WO3bsUJcuXdSoUSP169dPBQUF7jh8XAZCCX4Xli1bpoYNG2rbtm2aPXu2/v73v5tfK+Dh4aF58+Zp165dWrZsmdavX6+kpCSX9U+dOqV58+YpNTVV6enp2rhxowYPHqxVq1Zp1apVeu2117Ro0SK9/fbb7jg84JqRm5ur+++/Xw8++KD27Nlj/i5VvBJr3bp12rNnjzZs2KA33nhDaWlpLt/IXlxcrEmTJmnHjh1at26dPDw89Mc//lFnz5512c/06dP15JNP6vPPP1e9evV0//33KykpSc8//7w2bdqk/fv366mnnrqqx45aYADXuB49ehi33367y9itt95qTJ06tcr6N9980wgMDDTnlyxZYkgyvv/+e3Ns3Lhxhq+vr3HixAlz7K677jLGjRtXy90Dvy9ZWVmGJOPAgQOVlo0cOdIICAgwiouLzbEFCxYYjRo1MsrLy6vcXn5+viHJ+Prrrw3DMIycnBxDkvHyyy+bNW+88YYhyVi3bp05lpKSYoSHh9fWYeEq4UwJfhc6duzoMt+8eXPl5+dLkjZs2KA+ffrouuuuk5+fnx544AEdPXpUxcXFZr2vr6/atWtnzgcHB6t169Zq1KiRy1jFNgFUrVOnTurVq5ciIyN13333afHixSosLHRZ7uvra85HR0fr5MmTOnTokCRp//79io+PV9u2beXv7682bdpIkg4ePOiyn9/+zld823tkZKTLGL+v1x5CCX4X6tev7zJvs9l09uxZ/fDDDxowYIAiIiL0zjvvKCsrSy+++KIk6cyZMxdc/3zbBHB+np6eWrt2rVavXq0OHTrohRdeUHh4uHJyci64ns1mkyQNGjRIR48e1eLFi7Vt2zZt27ZNklzuO5Fcf2cr1j13jN/Xa0+d+UI+1E07d+7UL7/8omeffVYeHr9m8DfffNPNXQG/bzabTbfddptuu+02PfXUU2rVqpXS0tIkSV9++aVKSkrk4+MjScrMzFSjRo3UokULHT16VHv27NHChQvVvXt3SdLmzZvddhy4+ggl+F1r166dfvnlF73wwgsaNGiQPvvsM7300kvubgv43dq2bZvWrVunvn37KigoSNu2bVNBQYHat2+vr776SmVlZRo9erSefPJJ/fDDD5o+fboeffRReXh4qEmTJgoMDNSiRYvUvHlzHTx4UH/961/dfUi4irh8g9+1m2++WXPmzNGsWbMUERGh5cuXKyUlxd1tAb9b/v7++vTTTzVgwADdcMMNevLJJ/Xss8+qf//+kqRevXopLCxMd9xxh4YMGaJBgwaZj/B7eHgoNTVVWVlZioiI0GOPPaZnnnnGjUeDq81mGP/3nBYAAFfQqFGjdPz4cb333nvubgUWxZkSAABgCYQSAABgCVy+AQAAlsCZEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgAAYAmEEgC/C7m5uYqPj1d4eLg8PDyUmJjo7pYAXCJCCYDfhdLSUjVr1kxPPPGEOnXq5O52ANQAoQTANWHhwoW67rrrdPbsWZfxuLg4jRw5Uq1bt9bzzz+vBx54QHa73U1dArgchBIA14T77rtPP//8szZs2GCOFRYW6uOPP9bw4cPd2BmA2kIoAXBNCAgIUL9+/bRixQpz7K233lJAQIB69erlxs4A1BZCCYBrxvDhw/XOO++otLRUkrR8+XINGzZMnp6ebu4MQG0glAC4ZgwaNEhnz57VypUrdejQIW3atEkjRoxwd1sAakk9dzcAANXl4+OjwYMHa/ny5fr+++91ww03qHPnzu5uC0AtIZQAuKYMHz5cgwYN0u7duyudJcnOzpYknTx5UgUFBcrOzpaXl5c6dOjghk4BXCqbYRiGu5sAgOoqLy9XaGiocnNztX//frVt29ZcZrPZKtW3atVKBw4cuIodAqgpQgkAALAEbnQFAACWQCgBAACWQCgBAACWQCgBAACWQCgBAACWQCgBAACWQCgBAACWQCgBAACWQCgBAACWQCgBAACWQCgBAACW8P8AJMW+02/hwIkAAAAASUVORK5CYII=",
295
+ "text/plain": [
296
+ "<Figure size 600x400 with 1 Axes>"
297
+ ]
298
+ },
299
+ "metadata": {},
300
+ "output_type": "display_data"
301
+ }
302
+ ],
303
+ "source": [
304
+ "import matplotlib.pyplot as plt\n",
305
+ "import seaborn as sns\n",
306
+ "import pandas as pd\n",
307
+ "\n",
308
+ "data = pd.read_csv('spam.csv', encoding='latin1')\n",
309
+ "\n",
310
+ "plt.figure(figsize=(6, 4))\n",
311
+ "sns.countplot(data=data, x='v1')\n",
312
+ "plt.title('Target Distribution')\n",
313
+ "plt.show()\n"
314
+ ]
315
+ },
316
+ {
317
+ "cell_type": "code",
318
+ "execution_count": 10,
319
+ "id": "403fb70b-3c34-4c84-91a2-b798269d0876",
320
+ "metadata": {},
321
+ "outputs": [
322
+ {
323
+ "data": {
324
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAFcCAYAAAAZN83hAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5G0lEQVR4nO3dd3xUdb7/8ddMekI6JCQEktCRLqIoIs2CNGm7irrKrv7Wdr2rexXdXURcd213bawF14JYUbxiw04RUKoIgvQapIZQAglpM+f3x5FISEIKMznnzLyfj8c8YM6cOeczk2Te8/2e7/kel2EYBiIiImIpt9UFiIiIiAJZRETEFhTIIiIiNqBAFhERsQEFsoiIiA0okEVERGxAgSwiImIDCmQREREbUCCLiIjYgAJZbMflctXqNm/ePKtLrWDt2rVMmjSJ7du312r9V199tcLriYyMpGnTpvTv35+HH36Y/fv3V3rOpEmTcLlcdaqrsLCQSZMm1fn9qmpfWVlZDB06tE7bqclbb73FU089VeVjLpeLSZMm+XR/InYVanUBIqdatGhRhfsPPvggc+fOZc6cORWWn3XWWQ1ZVo3Wrl3LAw88QL9+/cjKyqr186ZOnUr79u0pLS1l//79LFy4kEcffZR//etfvPPOO1x88cXl6954440MGjSoTnUVFhbywAMPANCvX79aP68++6qPt956izVr1nDHHXdUemzRokVkZGT4vQYRO1Agi+306tWrwv0mTZrgdrsrLa+vwsJCoqOjfbItX+jUqRPnnHNO+f3Ro0dz5513cuGFFzJq1Cg2bdpEamoqABkZGX4PqBPvT0Psqya++pmLOIG6rMWRnn32WS666CJSUlKIiYmhc+fOPPbYY5SWllZYr1+/fnTq1In58+dzwQUXEB0dzR/+8AcAfv75Z8aMGUNsbCwJCQlcc801LFu2DJfLxauvvlphO8uXL2f48OEkJSURGRlJ9+7deffdd8sff/XVV/nNb34DQP/+/cu7oU/dTm21aNGCxx9/nKNHj/LCCy+UL6+qG3nOnDn069eP5ORkoqKiaNGiBaNHj6awsJDt27fTpEkTAB544IHyusaNG1dheytWrGDMmDEkJibSqlWravd1wsyZM+nSpQuRkZG0bNmSyZMnV3j8RHf8qd338+bNq3C4oV+/fsyaNYsdO3ZU6L4/oaou6zVr1nDFFVeQmJhIZGQk3bp1Y9q0aVXu5+233+Zvf/sb6enpxMXFcfHFF7Nhw4bq33gRC6mFLI60ZcsWrr76arKzswkPD2fVqlX885//ZP369bzyyisV1t2zZw/XXnst48eP56GHHsLtdlNQUED//v05ePAgjz76KK1bt+bzzz/nyiuvrLSvuXPnMmjQIM477zymTJlCfHw806dP58orr6SwsJBx48YxZMgQHnroIf7617/y7LPPcvbZZwOUh1t9DB48mJCQEObPn1/tOtu3b2fIkCH06dOHV155hYSEBHbt2sXnn39OSUkJaWlpfP755wwaNIgbbriBG2+8EaA8pE8YNWoUV111FTfffDMFBQWnrWvlypXccccdTJo0iaZNm/Lmm2/ypz/9iZKSEu666646vcbnnnuOP/7xj2zZsoWZM2fWuP6GDRu44IILSElJYfLkySQnJ/PGG28wbtw49u3bx/jx4yus/9e//pXevXvz0ksvkZ+fzz333MOwYcNYt24dISEhdapVxO8MEZu7/vrrjZiYmGof93g8RmlpqfHaa68ZISEhxsGDB8sf69u3rwEYs2fPrvCcZ5991gCMzz77rMLym266yQCMqVOnli9r37690b17d6O0tLTCukOHDjXS0tIMj8djGIZhzJgxwwCMuXPn1up1TZ061QCMZcuWVbtOamqq0aFDh/L7999/v3Hyn+17771nAMbKlSur3UZubq4BGPfff3+lx05sb+LEidU+drLMzEzD5XJV2t8ll1xixMXFGQUFBRVe27Zt2yqsN3fu3Erv0ZAhQ4zMzMwqaz+17quuusqIiIgwcnJyKqx3+eWXG9HR0cbhw4cr7Gfw4MEV1nv33XcNwFi0aFGV+xOxkrqsxZF++OEHhg8fTnJyMiEhIYSFhXHdddfh8XjYuHFjhXUTExMZMGBAhWXffPMNsbGxlQYtjR07tsL9zZs3s379eq655hoAysrKym+DBw9mz549fu0CNWq4XHm3bt0IDw/nj3/8I9OmTWPr1q312s/o0aNrvW7Hjh3p2rVrhWVXX301+fn5rFixol77r605c+YwcOBAmjdvXmH5uHHjKCwsrDQgcPjw4RXud+nSBYAdO3b4tU6R+lAgi+Pk5OTQp08fdu3axdNPP82CBQtYtmwZzz77LADHjx+vsH5aWlqlbeTl5ZUPlDrZqcv27dsHwF13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",
325
+ "text/plain": [
326
+ "<Figure size 600x400 with 1 Axes>"
327
+ ]
328
+ },
329
+ "metadata": {},
330
+ "output_type": "display_data"
331
+ }
332
+ ],
333
+ "source": [
334
+ "data = pd.read_csv('spam.csv', encoding='latin1')\n",
335
+ "\n",
336
+ "v1 = data['v1'].value_counts()\n",
337
+ "\n",
338
+ "plt.figure(figsize=(6, 4))\n",
339
+ "plt.pie(v1, labels=v1.index, autopct='%1.1f%%', startangle=140, colors=['#66b3ff','#ff9999'])\n",
340
+ "plt.title('Target Distribution')\n",
341
+ "plt.axis('equal')\n",
342
+ "plt.show()"
343
+ ]
344
+ },
345
+ {
346
+ "cell_type": "code",
347
+ "execution_count": 11,
348
+ "id": "e9439d70-6356-4563-a8fe-cc7ce8d56cd9",
349
+ "metadata": {},
350
+ "outputs": [],
351
+ "source": [
352
+ "from sklearn.preprocessing import LabelEncoder\n",
353
+ "X = df['text']\n",
354
+ "y = df['label']\n",
355
+ "\n",
356
+ "# Encode categorical labels\n",
357
+ "label_encoder = LabelEncoder()\n",
358
+ "y_encoded = label_encoder.fit_transform(y)"
359
+ ]
360
+ },
361
+ {
362
+ "cell_type": "code",
363
+ "execution_count": 12,
364
+ "id": "38b18020-139c-4c68-ba7d-14e505347232",
365
+ "metadata": {},
366
+ "outputs": [],
367
+ "source": [
368
+ "from imblearn.over_sampling import SMOTE\n",
369
+ "from sklearn.feature_extraction.text import CountVectorizer\n",
370
+ "\n",
371
+ "vectorizer = CountVectorizer()\n",
372
+ "X_vectorized = vectorizer.fit_transform(X)\n",
373
+ "\n",
374
+ "# Apply SMOTE to handle class imbalance\n",
375
+ "smote = SMOTE(random_state=42)\n",
376
+ "X_resampled, y_resampled = smote.fit_resample(X_vectorized, y_encoded)"
377
+ ]
378
+ },
379
+ {
380
+ "cell_type": "code",
381
+ "execution_count": 13,
382
+ "id": "72cd574b-3a7d-461c-8dd4-d383eda8778e",
383
+ "metadata": {},
384
+ "outputs": [],
385
+ "source": [
386
+ "from sklearn.model_selection import train_test_split\n",
387
+ "X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_resampled, test_size=0.3, random_state=42)"
388
+ ]
389
+ },
390
+ {
391
+ "cell_type": "code",
392
+ "execution_count": 14,
393
+ "id": "43b17dcd-cfa9-4e04-af6a-8c1b6c3860ee",
394
+ "metadata": {},
395
+ "outputs": [
396
+ {
397
+ "name": "stdout",
398
+ "output_type": "stream",
399
+ "text": [
400
+ "Accuracy: 0.96\n",
401
+ " precision recall f1-score support\n",
402
+ "\n",
403
+ " 0 0.98 0.93 0.95 1454\n",
404
+ " 1 0.94 0.98 0.96 1441\n",
405
+ "\n",
406
+ " accuracy 0.96 2895\n",
407
+ " macro avg 0.96 0.96 0.96 2895\n",
408
+ "weighted avg 0.96 0.96 0.96 2895\n",
409
+ "\n"
410
+ ]
411
+ }
412
+ ],
413
+ "source": [
414
+ "from sklearn.svm import SVC\n",
415
+ "from sklearn.metrics import classification_report, accuracy_score\n",
416
+ "\n",
417
+ "# Train the SVM model\n",
418
+ "svm = SVC(kernel='linear', random_state=42)\n",
419
+ "svm.fit(X_train, y_train)\n",
420
+ "\n",
421
+ "# Make predictions\n",
422
+ "y_pred = svm.predict(X_test)\n",
423
+ "\n",
424
+ "# Evaluate the model\n",
425
+ "accuracy = accuracy_score(y_test, y_pred)\n",
426
+ "print(f'Accuracy: {accuracy:.2f}')\n",
427
+ "print(classification_report(y_test, y_pred))\n"
428
+ ]
429
+ },
430
+ {
431
+ "cell_type": "code",
432
+ "execution_count": 16,
433
+ "id": "0ce3e632-be63-489d-9af7-c679fd92af19",
434
+ "metadata": {},
435
+ "outputs": [
436
+ {
437
+ "data": {
438
+ "text/plain": [
439
+ "['svm_model.joblib']"
440
+ ]
441
+ },
442
+ "execution_count": 16,
443
+ "metadata": {},
444
+ "output_type": "execute_result"
445
+ }
446
+ ],
447
+ "source": [
448
+ "import joblib\n",
449
+ "from joblib import dump\n",
450
+ "dump(svm, 'svm_model.joblib')"
451
+ ]
452
+ },
453
+ {
454
+ "cell_type": "code",
455
+ "execution_count": null,
456
+ "id": "9e106cab-ff41-4c19-86f6-c8774d44fb07",
457
+ "metadata": {},
458
+ "outputs": [],
459
+ "source": []
460
+ }
461
+ ],
462
+ "metadata": {
463
+ "kernelspec": {
464
+ "display_name": "Python 3 (ipykernel)",
465
+ "language": "python",
466
+ "name": "python3"
467
+ },
468
+ "language_info": {
469
+ "codemirror_mode": {
470
+ "name": "ipython",
471
+ "version": 3
472
+ },
473
+ "file_extension": ".py",
474
+ "mimetype": "text/x-python",
475
+ "name": "python",
476
+ "nbconvert_exporter": "python",
477
+ "pygments_lexer": "ipython3",
478
+ "version": "3.11.7"
479
+ }
480
+ },
481
+ "nbformat": 4,
482
+ "nbformat_minor": 5
483
+ }
SpamFilteration.ipynb ADDED
@@ -0,0 +1,482 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "edd820ef-7d81-4bde-ab6e-e3ab552d3739",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "import pandas as pd\n",
11
+ "\n",
12
+ "df=pd.read_csv('spam.csv', encoding='ISO-8859-1')"
13
+ ]
14
+ },
15
+ {
16
+ "cell_type": "code",
17
+ "execution_count": 2,
18
+ "id": "8386dc03-5c8c-4315-9692-c05fa25f8311",
19
+ "metadata": {},
20
+ "outputs": [
21
+ {
22
+ "data": {
23
+ "text/html": [
24
+ "<div>\n",
25
+ "<style scoped>\n",
26
+ " .dataframe tbody tr th:only-of-type {\n",
27
+ " vertical-align: middle;\n",
28
+ " }\n",
29
+ "\n",
30
+ " .dataframe tbody tr th {\n",
31
+ " vertical-align: top;\n",
32
+ " }\n",
33
+ "\n",
34
+ " .dataframe thead th {\n",
35
+ " text-align: right;\n",
36
+ " }\n",
37
+ "</style>\n",
38
+ "<table border=\"1\" class=\"dataframe\">\n",
39
+ " <thead>\n",
40
+ " <tr style=\"text-align: right;\">\n",
41
+ " <th></th>\n",
42
+ " <th>v1</th>\n",
43
+ " <th>v2</th>\n",
44
+ " <th>Unnamed: 2</th>\n",
45
+ " <th>Unnamed: 3</th>\n",
46
+ " <th>Unnamed: 4</th>\n",
47
+ " </tr>\n",
48
+ " </thead>\n",
49
+ " <tbody>\n",
50
+ " <tr>\n",
51
+ " <th>0</th>\n",
52
+ " <td>ham</td>\n",
53
+ " <td>Go until jurong point, crazy.. Available only ...</td>\n",
54
+ " <td>NaN</td>\n",
55
+ " <td>NaN</td>\n",
56
+ " <td>NaN</td>\n",
57
+ " </tr>\n",
58
+ " <tr>\n",
59
+ " <th>1</th>\n",
60
+ " <td>ham</td>\n",
61
+ " <td>Ok lar... Joking wif u oni...</td>\n",
62
+ " <td>NaN</td>\n",
63
+ " <td>NaN</td>\n",
64
+ " <td>NaN</td>\n",
65
+ " </tr>\n",
66
+ " <tr>\n",
67
+ " <th>2</th>\n",
68
+ " <td>spam</td>\n",
69
+ " <td>Free entry in 2 a wkly comp to win FA Cup fina...</td>\n",
70
+ " <td>NaN</td>\n",
71
+ " <td>NaN</td>\n",
72
+ " <td>NaN</td>\n",
73
+ " </tr>\n",
74
+ " <tr>\n",
75
+ " <th>3</th>\n",
76
+ " <td>ham</td>\n",
77
+ " <td>U dun say so early hor... U c already then say...</td>\n",
78
+ " <td>NaN</td>\n",
79
+ " <td>NaN</td>\n",
80
+ " <td>NaN</td>\n",
81
+ " </tr>\n",
82
+ " <tr>\n",
83
+ " <th>4</th>\n",
84
+ " <td>ham</td>\n",
85
+ " <td>Nah I don't think he goes to usf, he lives aro...</td>\n",
86
+ " <td>NaN</td>\n",
87
+ " <td>NaN</td>\n",
88
+ " <td>NaN</td>\n",
89
+ " </tr>\n",
90
+ " </tbody>\n",
91
+ "</table>\n",
92
+ "</div>"
93
+ ],
94
+ "text/plain": [
95
+ " v1 v2 Unnamed: 2 \\\n",
96
+ "0 ham Go until jurong point, crazy.. Available only ... NaN \n",
97
+ "1 ham Ok lar... Joking wif u oni... NaN \n",
98
+ "2 spam Free entry in 2 a wkly comp to win FA Cup fina... NaN \n",
99
+ "3 ham U dun say so early hor... U c already then say... NaN \n",
100
+ "4 ham Nah I don't think he goes to usf, he lives aro... NaN \n",
101
+ "\n",
102
+ " Unnamed: 3 Unnamed: 4 \n",
103
+ "0 NaN NaN \n",
104
+ "1 NaN NaN \n",
105
+ "2 NaN NaN \n",
106
+ "3 NaN NaN \n",
107
+ "4 NaN NaN "
108
+ ]
109
+ },
110
+ "execution_count": 2,
111
+ "metadata": {},
112
+ "output_type": "execute_result"
113
+ }
114
+ ],
115
+ "source": [
116
+ "df.head()"
117
+ ]
118
+ },
119
+ {
120
+ "cell_type": "code",
121
+ "execution_count": 3,
122
+ "id": "9ed2ab97-333f-4799-88e3-3de58660aac7",
123
+ "metadata": {},
124
+ "outputs": [
125
+ {
126
+ "data": {
127
+ "text/plain": [
128
+ "(5572, 5)"
129
+ ]
130
+ },
131
+ "execution_count": 3,
132
+ "metadata": {},
133
+ "output_type": "execute_result"
134
+ }
135
+ ],
136
+ "source": [
137
+ "df.shape"
138
+ ]
139
+ },
140
+ {
141
+ "cell_type": "code",
142
+ "execution_count": 4,
143
+ "id": "29d9c604-6d5c-4963-a044-aebcb60c44f5",
144
+ "metadata": {},
145
+ "outputs": [
146
+ {
147
+ "data": {
148
+ "text/plain": [
149
+ "v1 0\n",
150
+ "v2 0\n",
151
+ "Unnamed: 2 5522\n",
152
+ "Unnamed: 3 5560\n",
153
+ "Unnamed: 4 5566\n",
154
+ "dtype: int64"
155
+ ]
156
+ },
157
+ "execution_count": 4,
158
+ "metadata": {},
159
+ "output_type": "execute_result"
160
+ }
161
+ ],
162
+ "source": [
163
+ "df.isnull().sum()"
164
+ ]
165
+ },
166
+ {
167
+ "cell_type": "code",
168
+ "execution_count": 5,
169
+ "id": "e101ce21-a112-478f-8538-5b3d767cffcb",
170
+ "metadata": {},
171
+ "outputs": [
172
+ {
173
+ "data": {
174
+ "text/plain": [
175
+ "Index(['v1', 'v2', 'Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'], dtype='object')"
176
+ ]
177
+ },
178
+ "execution_count": 5,
179
+ "metadata": {},
180
+ "output_type": "execute_result"
181
+ }
182
+ ],
183
+ "source": [
184
+ "df.columns"
185
+ ]
186
+ },
187
+ {
188
+ "cell_type": "code",
189
+ "execution_count": 6,
190
+ "id": "bf9f405c-c7bf-4a13-9861-8e69a22d2de3",
191
+ "metadata": {},
192
+ "outputs": [],
193
+ "source": [
194
+ "df=df.drop(['Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'],axis=1)"
195
+ ]
196
+ },
197
+ {
198
+ "cell_type": "code",
199
+ "execution_count": 7,
200
+ "id": "2cc8fd91-bc8c-4719-b823-852419430b07",
201
+ "metadata": {},
202
+ "outputs": [],
203
+ "source": [
204
+ "df.columns = ['label', 'text']"
205
+ ]
206
+ },
207
+ {
208
+ "cell_type": "code",
209
+ "execution_count": 8,
210
+ "id": "d36ba538-bfac-495d-b84a-a79f40109c01",
211
+ "metadata": {},
212
+ "outputs": [
213
+ {
214
+ "data": {
215
+ "text/html": [
216
+ "<div>\n",
217
+ "<style scoped>\n",
218
+ " .dataframe tbody tr th:only-of-type {\n",
219
+ " vertical-align: middle;\n",
220
+ " }\n",
221
+ "\n",
222
+ " .dataframe tbody tr th {\n",
223
+ " vertical-align: top;\n",
224
+ " }\n",
225
+ "\n",
226
+ " .dataframe thead th {\n",
227
+ " text-align: right;\n",
228
+ " }\n",
229
+ "</style>\n",
230
+ "<table border=\"1\" class=\"dataframe\">\n",
231
+ " <thead>\n",
232
+ " <tr style=\"text-align: right;\">\n",
233
+ " <th></th>\n",
234
+ " <th>label</th>\n",
235
+ " <th>text</th>\n",
236
+ " </tr>\n",
237
+ " </thead>\n",
238
+ " <tbody>\n",
239
+ " <tr>\n",
240
+ " <th>0</th>\n",
241
+ " <td>ham</td>\n",
242
+ " <td>Go until jurong point, crazy.. Available only ...</td>\n",
243
+ " </tr>\n",
244
+ " <tr>\n",
245
+ " <th>1</th>\n",
246
+ " <td>ham</td>\n",
247
+ " <td>Ok lar... Joking wif u oni...</td>\n",
248
+ " </tr>\n",
249
+ " <tr>\n",
250
+ " <th>2</th>\n",
251
+ " <td>spam</td>\n",
252
+ " <td>Free entry in 2 a wkly comp to win FA Cup fina...</td>\n",
253
+ " </tr>\n",
254
+ " <tr>\n",
255
+ " <th>3</th>\n",
256
+ " <td>ham</td>\n",
257
+ " <td>U dun say so early hor... U c already then say...</td>\n",
258
+ " </tr>\n",
259
+ " <tr>\n",
260
+ " <th>4</th>\n",
261
+ " <td>ham</td>\n",
262
+ " <td>Nah I don't think he goes to usf, he lives aro...</td>\n",
263
+ " </tr>\n",
264
+ " </tbody>\n",
265
+ "</table>\n",
266
+ "</div>"
267
+ ],
268
+ "text/plain": [
269
+ " label text\n",
270
+ "0 ham Go until jurong point, crazy.. Available only ...\n",
271
+ "1 ham Ok lar... Joking wif u oni...\n",
272
+ "2 spam Free entry in 2 a wkly comp to win FA Cup fina...\n",
273
+ "3 ham U dun say so early hor... U c already then say...\n",
274
+ "4 ham Nah I don't think he goes to usf, he lives aro..."
275
+ ]
276
+ },
277
+ "execution_count": 8,
278
+ "metadata": {},
279
+ "output_type": "execute_result"
280
+ }
281
+ ],
282
+ "source": [
283
+ "df.head()"
284
+ ]
285
+ },
286
+ {
287
+ "cell_type": "code",
288
+ "execution_count": 9,
289
+ "id": "eea8ed01-7993-4ab7-8719-69e0dc20f842",
290
+ "metadata": {},
291
+ "outputs": [
292
+ {
293
+ "data": {
294
+ "image/png": "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Hx9zCQ4OLovDBQAAV+HUa0oiIiLMPzdr1kytWrVSnTp1tHz5coff47jVxo4dq5iYGHO9+PswAABw8zj965uL+fr66u6779a+ffsUFBSkgoICZWdnO9RkZmYqKChIkhQUFKTMzMwS88VzV6ux2+1XDD5ubm6y2+0OCwAAuLksFUpOnz6t/fv3q3r16mrRooUqVaqkxMREcz4tLU2HDh1SWFiYJCksLEw7d+7UsWPHzJqEhATZ7XaFhoaaNRdvo7imeBsAAMAanBpKXn31VW3atEkHDhzQ1q1b9eSTT6pChQrq06ePfHx8NHjwYMXExGjDhg1KSUnRc889p7CwMLVu3VqS1LlzZ4WGhqp///768ccftXbtWo0bN05RUVFyc3OTJA0bNky//fabRo8erT179mju3Llavny5oqOjnXnoAADgEk69puT3339Xnz59dOLECfn7++uhhx7Stm3b5O/vL0maOXOmXFxc1KNHD+Xn5ys8PFxz5841X1+hQgWtWbNGw4cPV1hYmLy8vDRw4EC9/vrrZk3dunUVFxen6OhozZo1S7Vq1dKiRYuu+xklAADg1uBXgq8DzykBAKB0bqvnlAAAAEiEEgAAYBGEEgAAYAlO/0E+/KnFqA+d3QJw06VMG+DsFgBYGGdKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJRBKAACAJVgmlEyZMkU2m00jR440x86dO6eoqCj5+fnJ29tbPXr0UGZmpsPrDh06pMjISHl6eiogIECjRo3ShQsXHGo2btyo++67T25ubmrQoIEWL158C44IAADcCEuEkh07dui9995Ts2bNHMajo6O1evVqrVixQps2bdKRI0fUvXt3c76wsFCRkZEqKCjQ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",
295
+ "text/plain": [
296
+ "<Figure size 600x400 with 1 Axes>"
297
+ ]
298
+ },
299
+ "metadata": {},
300
+ "output_type": "display_data"
301
+ }
302
+ ],
303
+ "source": [
304
+ "import matplotlib.pyplot as plt\n",
305
+ "import seaborn as sns\n",
306
+ "import pandas as pd\n",
307
+ "\n",
308
+ "data = pd.read_csv('spam.csv', encoding='latin1')\n",
309
+ "\n",
310
+ "plt.figure(figsize=(6, 4))\n",
311
+ "sns.countplot(data=data, x='v1')\n",
312
+ "plt.title('Target Distribution')\n",
313
+ "plt.show()\n"
314
+ ]
315
+ },
316
+ {
317
+ "cell_type": "code",
318
+ "execution_count": 10,
319
+ "id": "403fb70b-3c34-4c84-91a2-b798269d0876",
320
+ "metadata": {},
321
+ "outputs": [
322
+ {
323
+ "data": {
324
+ "image/png": "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lJGenm5cffXVxgcffFA+jedUp097euWVV4yLL764vK42bdoYDzzwgJGdnV2jugDjrrvuqrI+zjDtacOGDcaYMWOM2NhYIzEx0bj77ruNwsLCCs8tKCgwbr75ZiM+Pt6IjY01rrnmGuPw4cOVjnm22k6f9mQYhrF9+3ZjzJgxRkJCguFyuYw+ffoYn332WYV9Tk57ev/99ytsP9t0LBGzOQxDoxtETvXMM89w3333sXfvXpo3b252OSISJBTIEtQKCwsrjDAuKiri3HPPxe12V9m9KiLiLzqHLEFt9OjRtGrVinPOOYfs7GzeeustNm3axIwZM8wuTUSCjAJZgtrQoUOZNm0aM2bMwO1207lzZ959912uvfZas0sTkSCjLmsREREL0BwBERERC1Agi4iIWIACWURExAIUyCIiIhagQBYREbEABbKIiIgFKJBFREQsQIEsIiJiAQpkERERC1Agi4iIWIACWURExAIUyCIiIhagQBYREbEABbKIiIgFKJBFREQsQIEsNfbBBx/QrVs3IiMjSU5O5tJLLyU/P5/x48czcuRIHnnkERo3bkxcXBy33347JSUl5c+dM2cOF154IQkJCSQnJ3PllVeyffv28sd37dqFw+Hgvffe46KLLiIyMpLevXuzZcsWVq5cSa9evYiJiWHYsGEcOXLEjLcvIuJXCmSpkQMHDjB27Fh+97vfsXHjRhYuXMjo0aMxDAOA+fPnl29/5513+Oijj3jkkUfKn5+fn8/999/P999/z/z583E6nYwaNQqPx1PhdSZNmsTDDz/MqlWrCA0NZdy4cTz44IM8++yzfPvtt2zbto2JEyc26Hu3A8OAMg+4PdXvKyLW5DBOfqKKnMWqVavo2bMnu3btIi0trcJj48ePZ9asWezZs4eoqCgAXn75ZR544AGys7NxOit/78vKyqJx48asW7eOrl27smvXLjIyMpg2bRo333wzAO+++y5jx45l/vz5DBw4EIApU6bw+uuvs2nTJj+/4wZWWAh5ed4/i4oq/1lUBKWlUFYGZWV80nwQXxU1w2OAx4BT/xOHOSEyDFyh3lvkaX+6wn75e1wENI6GlCiICDXt3YsIoP+CUiM9evRg0KBBdOvWjaFDhzJkyBDGjBlDYmJi+eMnwxjgggsuIC8vjz179pCWlsbWrVuZOHEiy5cvJysrq7xlvHv3brp27Vr+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",
325
+ "text/plain": [
326
+ "<Figure size 600x400 with 1 Axes>"
327
+ ]
328
+ },
329
+ "metadata": {},
330
+ "output_type": "display_data"
331
+ }
332
+ ],
333
+ "source": [
334
+ "data = pd.read_csv('spam.csv', encoding='latin1')\n",
335
+ "\n",
336
+ "v1 = data['v1'].value_counts()\n",
337
+ "\n",
338
+ "plt.figure(figsize=(6, 4))\n",
339
+ "plt.pie(v1, labels=v1.index, autopct='%1.1f%%', startangle=140, colors=['#66b3ff','#ff9999'])\n",
340
+ "plt.title('Target Distribution')\n",
341
+ "plt.axis('equal')\n",
342
+ "plt.show()"
343
+ ]
344
+ },
345
+ {
346
+ "cell_type": "code",
347
+ "execution_count": 11,
348
+ "id": "e9439d70-6356-4563-a8fe-cc7ce8d56cd9",
349
+ "metadata": {},
350
+ "outputs": [],
351
+ "source": [
352
+ "from sklearn.preprocessing import LabelEncoder\n",
353
+ "X = df['text']\n",
354
+ "y = df['label']\n",
355
+ "\n",
356
+ "df['label'] = df['label'].map({'ham': 1, 'spam': 0})"
357
+ ]
358
+ },
359
+ {
360
+ "cell_type": "code",
361
+ "execution_count": 13,
362
+ "id": "38b18020-139c-4c68-ba7d-14e505347232",
363
+ "metadata": {},
364
+ "outputs": [],
365
+ "source": [
366
+ "from imblearn.over_sampling import SMOTE\n",
367
+ "from sklearn.feature_extraction.text import CountVectorizer\n",
368
+ "\n",
369
+ "vectorizer = CountVectorizer()\n",
370
+ "X_vectorized = vectorizer.fit_transform(X)\n",
371
+ "\n",
372
+ "# Apply SMOTE to handle class imbalance\n",
373
+ "smote = SMOTE(random_state=42)\n",
374
+ "X_resampled, y_resampled = smote.fit_resample(X_vectorized, y)"
375
+ ]
376
+ },
377
+ {
378
+ "cell_type": "code",
379
+ "execution_count": 14,
380
+ "id": "72cd574b-3a7d-461c-8dd4-d383eda8778e",
381
+ "metadata": {},
382
+ "outputs": [],
383
+ "source": [
384
+ "from sklearn.model_selection import train_test_split\n",
385
+ "X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_resampled, test_size=0.3, random_state=42)"
386
+ ]
387
+ },
388
+ {
389
+ "cell_type": "code",
390
+ "execution_count": 15,
391
+ "id": "43b17dcd-cfa9-4e04-af6a-8c1b6c3860ee",
392
+ "metadata": {},
393
+ "outputs": [
394
+ {
395
+ "name": "stdout",
396
+ "output_type": "stream",
397
+ "text": [
398
+ "Accuracy: 0.96\n",
399
+ " precision recall f1-score support\n",
400
+ "\n",
401
+ " ham 0.98 0.93 0.95 1454\n",
402
+ " spam 0.94 0.98 0.96 1441\n",
403
+ "\n",
404
+ " accuracy 0.96 2895\n",
405
+ " macro avg 0.96 0.96 0.96 2895\n",
406
+ "weighted avg 0.96 0.96 0.96 2895\n",
407
+ "\n"
408
+ ]
409
+ }
410
+ ],
411
+ "source": [
412
+ "from sklearn.svm import SVC\n",
413
+ "from sklearn.metrics import classification_report, accuracy_score\n",
414
+ "\n",
415
+ "# Train the SVM model\n",
416
+ "svm = SVC(kernel='linear', random_state=42)\n",
417
+ "svm.fit(X_train, y_train)\n",
418
+ "\n",
419
+ "# Make predictions\n",
420
+ "y_pred = svm.predict(X_test)\n",
421
+ "\n",
422
+ "# Evaluate the model\n",
423
+ "accuracy = accuracy_score(y_test, y_pred)\n",
424
+ "print(f'Accuracy: {accuracy:.2f}')\n",
425
+ "print(classification_report(y_test, y_pred))\n"
426
+ ]
427
+ },
428
+ {
429
+ "cell_type": "code",
430
+ "execution_count": 16,
431
+ "id": "0ce3e632-be63-489d-9af7-c679fd92af19",
432
+ "metadata": {},
433
+ "outputs": [],
434
+ "source": [
435
+ "import pickle\n",
436
+ "with open('svm_model.pkl', 'wb') as model_file:\n",
437
+ " pickle.dump(svm, model_file)"
438
+ ]
439
+ },
440
+ {
441
+ "cell_type": "code",
442
+ "execution_count": 17,
443
+ "id": "9e106cab-ff41-4c19-86f6-c8774d44fb07",
444
+ "metadata": {},
445
+ "outputs": [],
446
+ "source": [
447
+ "import pickle\n",
448
+ "with open('vectorize.pkl', 'wb') as model_file1:\n",
449
+ " pickle.dump(vectorizer, model_file1)"
450
+ ]
451
+ },
452
+ {
453
+ "cell_type": "code",
454
+ "execution_count": null,
455
+ "id": "135ff768-cb21-40d2-8fb4-350f362870bd",
456
+ "metadata": {},
457
+ "outputs": [],
458
+ "source": []
459
+ }
460
+ ],
461
+ "metadata": {
462
+ "kernelspec": {
463
+ "display_name": "Python 3 (ipykernel)",
464
+ "language": "python",
465
+ "name": "python3"
466
+ },
467
+ "language_info": {
468
+ "codemirror_mode": {
469
+ "name": "ipython",
470
+ "version": 3
471
+ },
472
+ "file_extension": ".py",
473
+ "mimetype": "text/x-python",
474
+ "name": "python",
475
+ "nbconvert_exporter": "python",
476
+ "pygments_lexer": "ipython3",
477
+ "version": "3.8.19"
478
+ }
479
+ },
480
+ "nbformat": 4,
481
+ "nbformat_minor": 5
482
+ }
app.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pickle
3
+ from sklearn.feature_extraction.text import TfidfVectorizer
4
+
5
+ # Load the SVM model
6
+ with open('svm_model.pkl', 'rb') as model_file:
7
+ svm_model = pickle.load(model_file)
8
+
9
+ # Load the vectorizer used during training
10
+ with open('vectorize.pkl', 'rb') as vectorizer_file:
11
+ vectorizer = pickle.load(vectorizer_file)
12
+
13
+ # Function to preprocess and classify messages
14
+ def classify_message(message):
15
+ # Preprocess the message using the vectorizer
16
+ message_vectorized = vectorizer.transform([message])
17
+ # Predict using the SVM model
18
+ prediction = svm_model.predict(message_vectorized)[0]
19
+ return prediction
20
+
21
+ # Streamlit app
22
+ def main():
23
+ st.title('Spam Filter')
24
+ message = st.text_area('Enter your message here:')
25
+
26
+ if st.button('Predict'):
27
+ if message:
28
+ prediction = classify_message(message)
29
+ st.write(f'Prediction: {prediction}')
30
+ else:
31
+ st.warning('Please enter a message to classify.')
32
+
33
+ if __name__ == '__main__':
34
+ main()
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ sci-kit learn
2
+ streamlit
spam.csv ADDED
The diff for this file is too large to render. See raw diff
 
svm_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dcfd8cad022e307131d567f4696c078a503df519298b0542e9e227ba418aa135
3
+ size 223986
vectorize.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0ea374f1502ba4de18f1f6e41d129ed04023b136ae38d58c34e3e1bef745df51
3
+ size 105805