Spaces:
Sleeping
Sleeping
Commit
·
7669dc4
1
Parent(s):
9eef133
'files'
Browse files- .ipynb_checkpoints/SpamFilteration-checkpoint.ipynb +6 -0
- .ipynb_checkpoints/Untitled-checkpoint.ipynb +483 -0
- SpamFilteration.ipynb +482 -0
- app.py +34 -0
- requirements.txt +2 -0
- spam.csv +0 -0
- svm_model.pkl +3 -0
- vectorize.pkl +3 -0
.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+2XX35pDBkyxAgKCjLq169vOBwOo2fPnsZLL73kUvfcc88Zbdq0MTw9PSs9xXOu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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": "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": "iVBORw0KGgoAAAANSUhEUgAAAiUAAAGJCAYAAABVW0PjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAvrElEQVR4nO3deVRV9f7/8ddBZfaAIoMDikOpmNpNS/lWzkmEWqnllFoOpWEl3NRcP69Dt76aXjW11NRvaYWZw21QCiWc+iqiUZRpkhoOXQXRBBQVFPbvj37sn0ccCT1beT7W2mu5P5/32fu9bZ3Oy3323sdmGIYhAAAAJ3NxdgMAAAASoQQAAFgEoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQQAAFgCoQTAbaVdu3Zq167dLdmXzWbTxIkTzfWJEyfKZrPp+PHjt2T/ISEhevbZZ2/JvgArIJQAFmSz2a5r2bhxo7NbdbB161ZNnDhR2dnZ11X/7LPPOhyPt7e36tWrp549e2rVqlUqKipySl+3kpV7A261is5uAEBJH330kcP6hx9+qISEhBLjjRs3vpVtXdPWrVs1adIkPfvss/L19b2u17i5uWnRokWSpLNnz+rgwYNavXq1evbsqXbt2umLL76Q3W4369etW3dL+irup2LFm/u/yav1lpaWJhcX/u2I8oNQAljQM88847C+bds2JSQklBgvDcMwdO7cOXl4ePzlbZWFihUrljiuN954Q1OmTNHYsWM1dOhQffrpp+acq6vrTe2nqKhIBQUFcnd3l7u7+03d17W4ubk5df/ArUYEB25TH3zwgTp06KCAgAC5ubkpNDRU8+bNK1EXEhKiLl26aO3atWrZsqU8PDz03nvvSZIOHjyobt26ycvLSwEBAYqOjtbatWsv+9VQcnKyHn30Ufn4+MjT01Nt27bVli1bzPmJEydq1KhRkqS6deuaX8kcOHCgVMf32muvqXPnzlqxYoV+/fVXc/xy15TMmTNHTZo0kaenp6pUqaKWLVtq6dKl19WXzWbTiBEjFBsbqyZNmsjNzU3x8fHm3MXXlBQ7fvy4nn76adntdvn5+emVV17RuXPnzPkDBw7IZrNp8eLFJV578Tav1dvlrin57bff9NRTT6lq1ary9PRU69atFRcX51CzceNG2Ww2LV++XG+++aZq1aold3d3dezYUfv27bvi3zngbJwpAW5T8+bNU5MmTdStWzdVrFhRq1ev1osvvqiioiJFRUU51KalpalPnz564YUXNHToUDVs2FB5eXnq0KGDjh49qldeeUVBQUFaunSpNmzYUGJf69evV0REhFq0aKEJEybIxcXFDEXffvutHnjgAXXv3l2//vqrPvnkE82cOVPVqlWTJPn7+5f6GPv3769169YpISFBd99992VrFi5cqJdfflk9e/Y0w8FPP/2k5ORk9e3b97r6Wr9+vZYvX64RI0aoWrVqCgkJuWpfTz/9tEJCQjR58mRt27ZNs2fP1smTJ/Xhhx/e0PHd6N9ZZmam/uu//ktnzpzRyy+/LD8/Py1ZskTdunXTypUr9eSTTzrUT5kyRS4uLnr11VeVk5OjqVOnql+/fkpOTr6hPoFbxgBgeVFRUcalb9czZ86UqAsPDzfq1avnMFanTh1DkhEfH+8wPn36dEOS8fnnn5tjZ8+eNRo1amRIMjZs2GAYhmEUFRUZd911lxEeHm4UFRU57L9u3brGI488Yo5NmzbNkGSkp6df13ENHDjQ8PLyuuL8Dz/8YEgyoqOjzbG2bdsabdu2Ndcff/xxo0mTJlfdz9X6kmS4uLgYu3btuuzchAkTzPUJEyYYkoxu3bo51L344ouGJOPHH380DMMw0tPTDUnGBx98cM1tXq23OnXqGAMHDjTXR44caUgyvv32W3Ps1KlTRt26dY2QkBCjsLDQMAzD2LBhgyHJaNy4sZGfn2/Wzpo1y5Bk7Ny5s8S+ACvg6xvgNnXxNSE5OTk6fvy42rZtq99++005OTkOtXXr1lV4eLjDWHx8vGrWrKlu3bqZY+7u7ho6dKhDXWpqqvbu3au+ffvqxIkTOn78uI4fP668vDx17NhRmzdvLrO7ZC7l7e0tSTp16tQVa3x9ffX7779rx44dpd5P27ZtFRoaet31l56JeumllyRJX331Val7uB5fffWVHnjgAT300EPmmLe3t55//nkdOHBAu3fvdqh/7rnnHK7BefjhhyX9+RUQYEV8fQPcprZs2aIJEyYoKSlJZ86ccZjLycmRj4+PuV63bt0Srz948KDq168vm83mMN6gQQOH9b1790qSBg4ceMVecnJyVKVKlRs+hms5ffq0JKly5cpXrBkzZoy++eYbPfDAA2rQoIE6d+6svn376sEHH7zu/Vzu7+dq7rrrLof1+vXry8XFpdTXz1yvgwcPqlWrViXGi+/COnjwoO655x5zvHbt2g51xf+NTp48eRO7BEqPUALchvbv36+OHTuqUaNGmjFjhoKDg+Xq6qqvvvpKM2fOLHHm4q/caVO8rWnTpunee++9bE3xGY2y9vPPP0sqGZQu1rhxY6WlpWnNmjWKj4/XqlWrNHfuXI0fP16TJk26rv381TuRLg12l64XKyws/Ev7uVEVKlS47LhhGLe0D+B6EUqA29Dq1auVn5+vL7/80uFfw5e7SPVK6tSpo927d8swDIcP0Uvvzqhfv74kyW63q1OnTlfd5pU+jEvro48+ks1m0yOPPHLVOi8vL/Xq1Uu9evVSQUGBunfvrjfffFNjx46Vu7t7mfe1d+9eh7Mr+/btU1FRkXmBbPEZiUsfiHbw4MES27qR3urUqaO0tLQS43v27DHngdsZ15QAt6HifwFf/C/enJwcffDBB9e9jfDwcP3nP//Rl19+aY6dO3dOCxcudKhr0aKF6tevr3/961/m1ykXy8rKMv/s5eUlqeSHcWlMmTJF69atU69evUp8XXKxEydOOKy7uroqNDRUhmHo/PnzZd6XJL377rsO63PmzJEkRURESPozwFWrVk2bN292qJs7d26Jbd1Ib4899pi2b9+upKQkcywvL08LFixQSEjIDV0XA1gRZ0qA21Dnzp3l6uqqrl276oUXXtDp06e1cOFCBQQE6OjRo9e1jRdeeEHvvPOO+vTpo1deeUXVq1dXbGys+cCw4n/Bu7i4aNGiRYqIiFCTJk303HPPqWbNmvrPf/6jDRs2yG63a/Xq1ZL+DDCS9H/+z/9R7969ValSJXXt2tX84L2cCxcu6OOPP5b0Zyg6ePCgvvzyS/30009q3769FixYcM2/i6CgID344IMKDAzUL7/8onfeeUeRkZHmtSil6etq0tPT1a1bNz366KNKSkrSxx9/rL59+6p58+ZmzZAhQzRlyhQNGTJELVu21ObNmx2et1LsRnp77bXX9MknnygiIkIvv/yyqlatqiVLlig9PV2rVq3i6a+4/Tn35h8A1+NytwR/+eWXRrNmzQx3d3cjJCTEeOutt4z333+/xO2lderUMSIjIy+73d9++82IjIw0PDw8DH9/f+Pvf/+7sWrVKkOSsW3bNofaH374wejevbvh5+dnuLm5GXXq1DGefvppIzEx0aHun//8p1GzZk3DxcXlmrcHDxw40JBkLp6enkZISIjRo0cPY+XKleYtrhe79Jbg9957z2jTpo3ZV/369Y1Ro0YZOTk519WXJCMqKuqy/ekKtwTv3r3b6Nmzp1G5cmWjSpUqxogRI4yzZ886vPbMmTPG4MGDDR8fH6Ny5crG008/bRw7dqzENq/W26W3BBuGYezfv9/o2bOn4evra7i7uxsPPPCAsWbNGoea4luCV6xY4TB+tVuVASuwGQZXPAH4/95++21FR0fr999/V82aNZ3dDoByhFAClGNnz551uPPk3Llz+tvf/qbCwsLLftUAADcT15QA5Vj37t1Vu3Zt3XvvvcrJydHHH3+sPXv2KDY21tmtASiHCCVAORYeHq5FixYpNjZWhYWFCg0N1bJly9SrVy9ntwagHOLrGwAAYAncPwYAACyBUAIAACyBa0quQ1FRkY4cOaLKlSuX+eOqAQC4kxmGoVOnTqlGjRrXfsCfE5+RYj6I6OKlYcOG5vzZs2eNF1980ahatarh5eVldO/e3cjIyHDYxsGDB43HHnvMfPjTq6++apw/f96hZsOGDcbf/vY3w9XV1ahfv/4NPzjo8OHDJfpkYWFhYWFhuf7l8OHD1/y8dfqZkiZNmuibb74x1ytW/P8tRUdHKy4uTitWrJCPj49GjBih7t27a8uWLZL+/MXNyMhIBQUFaevWrTp69KgGDBigSpUq6b//+78l/fk46MjISA0bNkyxsbFKTEzUkCFDVL16dYWHh19Xj8WPqj58+LDsdntZHToAAHe83NxcBQcHm5+lV+PUu28mTpyozz//XKmpqSXmcnJy5O/vr6VLl6pnz56S/vwlzMaNGyspKUmtW7fW119/rS5duujIkSMKDAyUJM2fP19jxoxRVlaWXF1dNWbMGMXFxZk/gS5JvXv3VnZ2tuLj46+rz9zcXPn4+CgnJ4dQAgDADbiRz1CnX+i6d+9e1ahRQ/Xq1VO/fv106NAhSVJKSorOnz/v8FPpjRo1Uu3atc1fyExKSlLTpk3NQCL9+dyF3Nxc7dq1y6y59OfWw8PDHX5l81L5+fnKzc11WAAAwM3l1FDSqlUrLV68WPHx8Zo3b57S09P18MMP69SpU8rIyJCrq6t8fX0dXhMYGKiMjAxJUkZGhkMgKZ4vnrtaTW5urs6ePXvZviZPniwfHx9zCQ4OLovDBQAAV+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
|