jfo25 commited on
Commit
1b00fbc
·
1 Parent(s): dd14c86

first commit

Browse files
Projet_fin_module (2).pdf ADDED
Binary file (44.2 kB). View file
 
Spam Detector/app.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pickle # Pour sauvegarder et charger le modèle
2
+ # Gradio est une bibliothèque pour créer des interfaces utilisateur interactives
3
+ import gradio as gr
4
+ from sklearn.feature_extraction.text import CountVectorizer # Transformer le texte en nombres
5
+
6
+
7
+ # Charger le modèle sauvegardé
8
+ with open('sms_spam_detector_model.pkl','rb') as file:
9
+ model=pickle.load(file)
10
+
11
+ # Fonction pour prédire si un message est du spam ou non
12
+ def predict_spam(message):
13
+ # Convertir les messages en nombres
14
+ vectorizer = CountVectorizer()
15
+ message_transformed = vectorizer.transform([message])
16
+ prediction = model.predict(message_transformed)
17
+ return "SPAM ❌" if prediction[0] == 1 else "HAM ✅"
18
+
19
+
20
+ interface_gradio = gr.Interface(fn=predict_spam, inputs="text", outputs="text",
21
+ title="Sms Spam Detector",
22
+ description="print message to detect spam or ham."
23
+ )
24
+ interface_gradio.launch()
25
+
Spam Detector/data /Emails.csv ADDED
The diff for this file is too large to render. See raw diff
 
Spam Detector/data /SMSSpamCollection ADDED
The diff for this file is too large to render. See raw diff
 
Spam Detector/detecting_spam_emails.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
Spam Detector/saved_models /sms_spam_detector_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:be5baf4afe665e8089958c71f193dc574c19c79595cdbb689adc302586364cac
3
+ size 279432
Spam Detector/saved_models /sms_vectorizer.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e78e5596ceaf5a0c1f4100235ce1d528801a34a57732e86c4857a2e5ead0f9d2
3
+ size 106218
Spam Detector/spam-detector-Mathis-AI.ipynb ADDED
@@ -0,0 +1,535 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "19423337",
6
+ "metadata": {},
7
+ "source": [
8
+ "[Lien youtube de la vidéo source ](https://youtu.be/0rtlRbKPQLE?si=PZ-nbxa-z1TOUav5)"
9
+ ]
10
+ },
11
+ {
12
+ "cell_type": "markdown",
13
+ "id": "2aac4a64",
14
+ "metadata": {},
15
+ "source": [
16
+ "[Code Source GITHUB](https://github.com/MamatorHack/spam-detector)"
17
+ ]
18
+ },
19
+ {
20
+ "cell_type": "code",
21
+ "execution_count": 14,
22
+ "id": "8a313f24",
23
+ "metadata": {},
24
+ "outputs": [],
25
+ "source": [
26
+ "import pandas as pd # Manipulation de données\n",
27
+ "import numpy as np # Calculs mathématiques\n",
28
+ "import matplotlib.pyplot as plt # Affichage de graphiques\n",
29
+ "import seaborn as sns # Visualisation de données\n",
30
+ "import pickle # Sauvegarder et charger des modèles\n",
31
+ "from sklearn.feature_extraction.text import CountVectorizer # Transformer le texte en nombres\n",
32
+ "from sklearn.model_selection import train_test_split # Séparer les données\n",
33
+ "from sklearn.naive_bayes import MultinomialNB # Modèle d'apprentissage\n",
34
+ "from sklearn.metrics import accuracy_score # Vérifier la performance du modèle"
35
+ ]
36
+ },
37
+ {
38
+ "cell_type": "code",
39
+ "execution_count": 15,
40
+ "id": "e530b713",
41
+ "metadata": {},
42
+ "outputs": [
43
+ {
44
+ "data": {
45
+ "text/html": [
46
+ "<div>\n",
47
+ "<style scoped>\n",
48
+ " .dataframe tbody tr th:only-of-type {\n",
49
+ " vertical-align: middle;\n",
50
+ " }\n",
51
+ "\n",
52
+ " .dataframe tbody tr th {\n",
53
+ " vertical-align: top;\n",
54
+ " }\n",
55
+ "\n",
56
+ " .dataframe thead th {\n",
57
+ " text-align: right;\n",
58
+ " }\n",
59
+ "</style>\n",
60
+ "<table border=\"1\" class=\"dataframe\">\n",
61
+ " <thead>\n",
62
+ " <tr style=\"text-align: right;\">\n",
63
+ " <th></th>\n",
64
+ " <th>label</th>\n",
65
+ " <th>message</th>\n",
66
+ " </tr>\n",
67
+ " </thead>\n",
68
+ " <tbody>\n",
69
+ " <tr>\n",
70
+ " <th>0</th>\n",
71
+ " <td>ham</td>\n",
72
+ " <td>Go until jurong point, crazy.. Available only ...</td>\n",
73
+ " </tr>\n",
74
+ " <tr>\n",
75
+ " <th>1</th>\n",
76
+ " <td>ham</td>\n",
77
+ " <td>Ok lar... Joking wif u oni...</td>\n",
78
+ " </tr>\n",
79
+ " <tr>\n",
80
+ " <th>2</th>\n",
81
+ " <td>spam</td>\n",
82
+ " <td>Free entry in 2 a wkly comp to win FA Cup fina...</td>\n",
83
+ " </tr>\n",
84
+ " <tr>\n",
85
+ " <th>3</th>\n",
86
+ " <td>ham</td>\n",
87
+ " <td>U dun say so early hor... U c already then say...</td>\n",
88
+ " </tr>\n",
89
+ " <tr>\n",
90
+ " <th>4</th>\n",
91
+ " <td>ham</td>\n",
92
+ " <td>Nah I don't think he goes to usf, he lives aro...</td>\n",
93
+ " </tr>\n",
94
+ " </tbody>\n",
95
+ "</table>\n",
96
+ "</div>"
97
+ ],
98
+ "text/plain": [
99
+ " label message\n",
100
+ "0 ham Go until jurong point, crazy.. Available only ...\n",
101
+ "1 ham Ok lar... Joking wif u oni...\n",
102
+ "2 spam Free entry in 2 a wkly comp to win FA Cup fina...\n",
103
+ "3 ham U dun say so early hor... U c already then say...\n",
104
+ "4 ham Nah I don't think he goes to usf, he lives aro..."
105
+ ]
106
+ },
107
+ "execution_count": 15,
108
+ "metadata": {},
109
+ "output_type": "execute_result"
110
+ }
111
+ ],
112
+ "source": [
113
+ "# Charger le fichier SMSSpamCollection from UCI ML repository\n",
114
+ "df = pd.read_csv('SMSSpamCollection', sep='\\t', header=None, names=['label', 'message'])\n",
115
+ "\n",
116
+ "# Afficher les 5 premières lignes du dataset\n",
117
+ "df.head()"
118
+ ]
119
+ },
120
+ {
121
+ "cell_type": "markdown",
122
+ "id": "15e1439e",
123
+ "metadata": {},
124
+ "source": [
125
+ "### Nettoyer les données "
126
+ ]
127
+ },
128
+ {
129
+ "cell_type": "code",
130
+ "execution_count": 16,
131
+ "id": "fb533887",
132
+ "metadata": {},
133
+ "outputs": [
134
+ {
135
+ "data": {
136
+ "text/html": [
137
+ "<div>\n",
138
+ "<style scoped>\n",
139
+ " .dataframe tbody tr th:only-of-type {\n",
140
+ " vertical-align: middle;\n",
141
+ " }\n",
142
+ "\n",
143
+ " .dataframe tbody tr th {\n",
144
+ " vertical-align: top;\n",
145
+ " }\n",
146
+ "\n",
147
+ " .dataframe thead th {\n",
148
+ " text-align: right;\n",
149
+ " }\n",
150
+ "</style>\n",
151
+ "<table border=\"1\" class=\"dataframe\">\n",
152
+ " <thead>\n",
153
+ " <tr style=\"text-align: right;\">\n",
154
+ " <th></th>\n",
155
+ " <th>label</th>\n",
156
+ " <th>message</th>\n",
157
+ " </tr>\n",
158
+ " </thead>\n",
159
+ " <tbody>\n",
160
+ " <tr>\n",
161
+ " <th>0</th>\n",
162
+ " <td>0</td>\n",
163
+ " <td>Go until jurong point, crazy.. Available only ...</td>\n",
164
+ " </tr>\n",
165
+ " <tr>\n",
166
+ " <th>1</th>\n",
167
+ " <td>0</td>\n",
168
+ " <td>Ok lar... Joking wif u oni...</td>\n",
169
+ " </tr>\n",
170
+ " <tr>\n",
171
+ " <th>2</th>\n",
172
+ " <td>1</td>\n",
173
+ " <td>Free entry in 2 a wkly comp to win FA Cup fina...</td>\n",
174
+ " </tr>\n",
175
+ " <tr>\n",
176
+ " <th>3</th>\n",
177
+ " <td>0</td>\n",
178
+ " <td>U dun say so early hor... U c already then say...</td>\n",
179
+ " </tr>\n",
180
+ " <tr>\n",
181
+ " <th>4</th>\n",
182
+ " <td>0</td>\n",
183
+ " <td>Nah I don't think he goes to usf, he lives aro...</td>\n",
184
+ " </tr>\n",
185
+ " </tbody>\n",
186
+ "</table>\n",
187
+ "</div>"
188
+ ],
189
+ "text/plain": [
190
+ " label message\n",
191
+ "0 0 Go until jurong point, crazy.. Available only ...\n",
192
+ "1 0 Ok lar... Joking wif u oni...\n",
193
+ "2 1 Free entry in 2 a wkly comp to win FA Cup fina...\n",
194
+ "3 0 U dun say so early hor... U c already then say...\n",
195
+ "4 0 Nah I don't think he goes to usf, he lives aro..."
196
+ ]
197
+ },
198
+ "execution_count": 16,
199
+ "metadata": {},
200
+ "output_type": "execute_result"
201
+ }
202
+ ],
203
+ "source": [
204
+ "# Convertir les labels en 0 (ham) et 1 (spam)\n",
205
+ "df['label'] = df['label'].map({'ham': 0, 'spam': 1})\n",
206
+ "\n",
207
+ "# Afficher les 5 premières lignes\n",
208
+ "df.head()"
209
+ ]
210
+ },
211
+ {
212
+ "cell_type": "code",
213
+ "execution_count": 28,
214
+ "id": "f9ae80e3",
215
+ "metadata": {},
216
+ "outputs": [
217
+ {
218
+ "data": {
219
+ "text/plain": [
220
+ "(5572, 2)"
221
+ ]
222
+ },
223
+ "execution_count": 28,
224
+ "metadata": {},
225
+ "output_type": "execute_result"
226
+ }
227
+ ],
228
+ "source": [
229
+ "df.shape"
230
+ ]
231
+ },
232
+ {
233
+ "cell_type": "code",
234
+ "execution_count": 17,
235
+ "id": "c4ea8a09",
236
+ "metadata": {},
237
+ "outputs": [
238
+ {
239
+ "data": {
240
+ "text/plain": [
241
+ "((5572, 8713), (5572,))"
242
+ ]
243
+ },
244
+ "execution_count": 17,
245
+ "metadata": {},
246
+ "output_type": "execute_result"
247
+ }
248
+ ],
249
+ "source": [
250
+ "# Convertir les messages en nombres\n",
251
+ "vectorizer = CountVectorizer()\n",
252
+ "X = vectorizer.fit_transform(df['message'])\n",
253
+ "\n",
254
+ "# Labels (0 ou 1)\n",
255
+ "y = df['label']\n",
256
+ "\n",
257
+ "# Afficher la taille des données\n",
258
+ "X.shape, y.shape"
259
+ ]
260
+ },
261
+ {
262
+ "cell_type": "markdown",
263
+ "id": "b1ccf31e",
264
+ "metadata": {},
265
+ "source": [
266
+ "`5572` est le nombre de messages converties & `8713` le nombre de caractéristiques pour identifier un Spam"
267
+ ]
268
+ },
269
+ {
270
+ "cell_type": "markdown",
271
+ "id": "efd4b561",
272
+ "metadata": {},
273
+ "source": [
274
+ "### Modélisation "
275
+ ]
276
+ },
277
+ {
278
+ "cell_type": "code",
279
+ "execution_count": 18,
280
+ "id": "aea723b8",
281
+ "metadata": {},
282
+ "outputs": [
283
+ {
284
+ "name": "stdout",
285
+ "output_type": "stream",
286
+ "text": [
287
+ "Précision du modèle : 98.57%\n"
288
+ ]
289
+ }
290
+ ],
291
+ "source": [
292
+ "# Séparer les données en entraînement (80%) et test (20%)\n",
293
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
294
+ "\n",
295
+ "# Créer et entraîner le modèle\n",
296
+ "model = MultinomialNB()\n",
297
+ "model.fit(X_train, y_train)\n",
298
+ "\n",
299
+ "# Prédire sur les données de test\n",
300
+ "y_pred = model.predict(X_test)\n",
301
+ "\n",
302
+ "# Évaluer la précision du modèle\n",
303
+ "accuracy = accuracy_score(y_test, y_pred)\n",
304
+ "print(f\"Précision du modèle : {accuracy * 100:.2f}%\")"
305
+ ]
306
+ },
307
+ {
308
+ "cell_type": "markdown",
309
+ "id": "f6eda2fa",
310
+ "metadata": {},
311
+ "source": [
312
+ "### Test"
313
+ ]
314
+ },
315
+ {
316
+ "cell_type": "code",
317
+ "execution_count": 19,
318
+ "id": "2d01ce1c",
319
+ "metadata": {},
320
+ "outputs": [
321
+ {
322
+ "name": "stdout",
323
+ "output_type": "stream",
324
+ "text": [
325
+ "SPAM ❌\n",
326
+ "HAM ✅\n"
327
+ ]
328
+ }
329
+ ],
330
+ "source": [
331
+ "def predict_spam(message):\n",
332
+ " message_transformed = vectorizer.transform([message])\n",
333
+ " prediction = model.predict(message_transformed)\n",
334
+ " return \"SPAM ❌\" if prediction[0] == 1 else \"HAM ✅\"\n",
335
+ "\n",
336
+ "# Tester avec un message\n",
337
+ "\n",
338
+ "print(predict_spam(\"Hey, you have winning cup. Give your account bank detail to keep your prize !\"))\n",
339
+ "print(predict_spam(\"Hey, well ? Ready for competition ?\"))\n"
340
+ ]
341
+ },
342
+ {
343
+ "cell_type": "code",
344
+ "execution_count": 20,
345
+ "id": "7e014dbc",
346
+ "metadata": {},
347
+ "outputs": [
348
+ {
349
+ "name": "stdout",
350
+ "output_type": "stream",
351
+ "text": [
352
+ "SPAM ❌\n",
353
+ "HAM ✅\n"
354
+ ]
355
+ }
356
+ ],
357
+ "source": [
358
+ "print(predict_spam(\"Congratulations! You've won a lottery. Claim your prize now!\"))\n",
359
+ "print(predict_spam(\"Don't forget our meeting tomorrow at 10 AM.\"))"
360
+ ]
361
+ },
362
+ {
363
+ "cell_type": "code",
364
+ "execution_count": 21,
365
+ "id": "c61d8311",
366
+ "metadata": {},
367
+ "outputs": [
368
+ {
369
+ "name": "stdout",
370
+ "output_type": "stream",
371
+ "text": [
372
+ "SPAM ❌\n"
373
+ ]
374
+ }
375
+ ],
376
+ "source": [
377
+ "print(predict_spam(\"Give me your credit card details to claim your prize!\"))"
378
+ ]
379
+ },
380
+ {
381
+ "cell_type": "code",
382
+ "execution_count": 22,
383
+ "id": "ef960679",
384
+ "metadata": {},
385
+ "outputs": [
386
+ {
387
+ "name": "stdout",
388
+ "output_type": "stream",
389
+ "text": [
390
+ "HAM ✅\n"
391
+ ]
392
+ }
393
+ ],
394
+ "source": [
395
+ "print(predict_spam(\"Hello friend, how are you doing today? , we are English class today, see you later!\"))"
396
+ ]
397
+ },
398
+ {
399
+ "cell_type": "code",
400
+ "execution_count": 23,
401
+ "id": "58f88820",
402
+ "metadata": {},
403
+ "outputs": [
404
+ {
405
+ "name": "stdout",
406
+ "output_type": "stream",
407
+ "text": [
408
+ "HAM ✅\n"
409
+ ]
410
+ }
411
+ ],
412
+ "source": [
413
+ "print(predict_spam(\"You are ugly , you need money, give your credit card details.\"))"
414
+ ]
415
+ },
416
+ {
417
+ "cell_type": "code",
418
+ "execution_count": 24,
419
+ "id": "8f4f505b",
420
+ "metadata": {},
421
+ "outputs": [
422
+ {
423
+ "data": {
424
+ "text/plain": [
425
+ "<Axes: xlabel='label', ylabel='count'>"
426
+ ]
427
+ },
428
+ "execution_count": 24,
429
+ "metadata": {},
430
+ "output_type": "execute_result"
431
+ },
432
+ {
433
+ "data": {
434
+ "image/png": "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XHPFiwIAAGhPrXYN0VVXXaUf/OAHWrFiRWs9JQAAQLto1Yuq//3vf+vDDz9szacEAABocy16y2zu3Llh923bVk1NjV5++WVNmzatVRYGAADQXloURG+//XbY/auuukrJycn66U9/+qmfQAMAAOhoWhREr7/+emuvAwAAIGpaFETnnThxQgcPHpTL5dJ1112n5OTk1loXAABAu2nRRdVnzpzR3Xffrf79++umm27SjTfeKK/Xq+nTp+v9999v7TUCAAC0qRYF0dy5c1VeXq6XXnpJdXV1qqur0x/+8AeVl5dr3rx5rb1GAACANtWit8x+97vf6be//a3GjBnjbPvGN76h+Ph4TZkyRatXr26t9QEAALS5Fp0hev/99+V2uyO2p6Sk8JYZAADodFoURD6fTw8//LA++OADZ1tDQ4OWLFkin8/XaosDAABoDy16y2zlypWaNGmSBgwYoOHDh8vlcqmqqkpxcXHasmVLa68RAACgTbUoiIYNG6ZDhw5pw4YNOnDggGzb1h133KE777xT8fHxrb1GAACANtWiICosLJTb7daMGTPCtj/zzDM6ceKEFi5c2CqLAwAAaA8tuoZozZo1+uIXvxix/frrr9cvfvGLK14UAABAe2pREAUCAfXv3z9ie3Jysmpqaq54UQAAAO2pRUGUmpqqN998M2L7m2++Ka/Xe8WLAgAAaE8tuoboe9/7nvx+v86ePatbbrlFkvTaa69pwYIFfFM1AADodFoURAsWLNB7772n2bNnq6mpSZLUo0cPLVy4UIsWLWrVBQIAALS1FgWRy+XSY489poceekj79+9XfHy80tLSFBcX19rrAwAAaHMtCqLzevfura9+9auttRYAAICoaNFF1QAAAF0JQQQAAIxHEAEAAOMRRAAAwHgEEQAAMB5BBAAAjEcQAQAA4xFEAADAeAQRAAAwHkEEAACMRxABAADjEUQAAMB4BBEAADBeVIOosLBQX/3qV5WQkKCUlBRNnjxZBw8eDJuxbVuLFy+W1+tVfHy8xowZo3379oXNNDY2as6cOerXr5969eqlnJwcHT16NGwmGAwqLy9PlmXJsizl5eWprq6urQ8RAAB0AlENovLyct17772qqKhQWVmZPvzwQ2VlZenMmTPOzLJly7R8+XIVFRVp9+7d8ng8Gj9+vE6dOuXM+P1+lZSUaNOmTdq2bZtOnz6t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jx8vSXr22Wc1YMAAlZSUaMqUKXr88ceVm5vrXKidlpamJ598UqNHj9bq1avVo0ePdj0mAG2LM0QAupy3335bt912m66++molJCRozJgxkqTDhw+Hzfl8PuffSUlJGjx4sPbv3y9JqqysVHFxsXr37u3cJkyYoHPnzqm6urrdjgVA++AMEYAu5cyZM8rKylJWVpY2bNig5ORkHT58WBMmTFBTU9OnPt7lckmSzp07p1mzZik/Pz9iZuDAga2+bgDRRRAB6FIOHDigkydPaunSpUpNTZUkvfXWWxedraiocOImGAzqn//8p774xS9Kkr7yla9o3759uvbaa9tn4QCiirfMAHQpAwcOVGxsrJ566im9++672rx5s37yk59cdPaRRx7Ra6+9pr179+quu+5Sv379NHnyZEnSwoULtWPHDt17772qqqrSoUOHtHnzZs2ZM6cdjwZAeyGIAHQpycnJKi4u1m9+8xsNHTpUS5cu1RNPPHHR2aVLl+r+++9XRkaGampqtHnzZsXGxkqSbrjhBpWXl+vQoUO68cYb9eUvf1kPPfSQ+vfv356HA6CduGzbtqO9CAAAgGjiDBEAADAeQQQAAIxHEAEAAOMRRAAAwHgEEQAAMB5BBAAAjEcQAQAA4xFEAADAeAQRAAAwHkEEAACMRxABAADj/T8Foj4NDGZV/wAAAABJRU5ErkJggg==",
435
+ "text/plain": [
436
+ "<Figure size 640x480 with 1 Axes>"
437
+ ]
438
+ },
439
+ "metadata": {},
440
+ "output_type": "display_data"
441
+ }
442
+ ],
443
+ "source": [
444
+ "sns.countplot(x='label', data=df)"
445
+ ]
446
+ },
447
+ {
448
+ "cell_type": "markdown",
449
+ "id": "55444fb4",
450
+ "metadata": {},
451
+ "source": [
452
+ "### Sauvegarder le model "
453
+ ]
454
+ },
455
+ {
456
+ "cell_type": "code",
457
+ "execution_count": 27,
458
+ "id": "faf22bf2",
459
+ "metadata": {},
460
+ "outputs": [],
461
+ "source": [
462
+ "# Sauvegarder le vectorizer\n",
463
+ "with open('sms_vectorizer.pkl', 'wb') as file:\n",
464
+ " pickle.dump(vectorizer, file)"
465
+ ]
466
+ },
467
+ {
468
+ "cell_type": "code",
469
+ "execution_count": 25,
470
+ "id": "dba57e87",
471
+ "metadata": {},
472
+ "outputs": [],
473
+ "source": [
474
+ "\n",
475
+ "# Sauvegarder le modèle \n",
476
+ "\n",
477
+ "with open('sms_spam_detector_model.pkl','wb') as file:\n",
478
+ " pickle.dump(model,file)"
479
+ ]
480
+ },
481
+ {
482
+ "cell_type": "markdown",
483
+ "id": "f92bf821",
484
+ "metadata": {},
485
+ "source": [
486
+ "### Charger le modèle "
487
+ ]
488
+ },
489
+ {
490
+ "cell_type": "code",
491
+ "execution_count": 26,
492
+ "id": "6ebccf7a",
493
+ "metadata": {},
494
+ "outputs": [
495
+ {
496
+ "ename": "FileNotFoundError",
497
+ "evalue": "[Errno 2] No such file or directory: 'dht11_model.pkl'",
498
+ "output_type": "error",
499
+ "traceback": [
500
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
501
+ "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
502
+ "Cell \u001b[0;32mIn[26], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdht11_model.pkl\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m file: \n\u001b[1;32m 2\u001b[0m model\u001b[38;5;241m=\u001b[39mpickle\u001b[38;5;241m.\u001b[39mload(file)\n",
503
+ "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/IPython/core/interactiveshell.py:324\u001b[0m, in \u001b[0;36m_modified_open\u001b[0;34m(file, *args, **kwargs)\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m file \u001b[38;5;129;01min\u001b[39;00m {\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m}:\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 319\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIPython won\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt let you open fd=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfile\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m by default \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 320\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mas it is likely to crash IPython. If you know what you are doing, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 321\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124myou can use builtins\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m open.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 322\u001b[0m )\n\u001b[0;32m--> 324\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m io_open(file, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n",
504
+ "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'dht11_model.pkl'"
505
+ ]
506
+ }
507
+ ],
508
+ "source": [
509
+ "with open('sms_spam_detector_model.pkl','rb') as file: \n",
510
+ " model=pickle.load(file)"
511
+ ]
512
+ }
513
+ ],
514
+ "metadata": {
515
+ "kernelspec": {
516
+ "display_name": "base",
517
+ "language": "python",
518
+ "name": "python3"
519
+ },
520
+ "language_info": {
521
+ "codemirror_mode": {
522
+ "name": "ipython",
523
+ "version": 3
524
+ },
525
+ "file_extension": ".py",
526
+ "mimetype": "text/x-python",
527
+ "name": "python",
528
+ "nbconvert_exporter": "python",
529
+ "pygments_lexer": "ipython3",
530
+ "version": "3.12.7"
531
+ }
532
+ },
533
+ "nbformat": 4,
534
+ "nbformat_minor": 5
535
+ }