first commit
Browse files- Projet_fin_module (2).pdf +0 -0
- Spam Detector/app.py +25 -0
- Spam Detector/data /Emails.csv +0 -0
- Spam Detector/data /SMSSpamCollection +0 -0
- Spam Detector/detecting_spam_emails.ipynb +0 -0
- Spam Detector/saved_models /sms_spam_detector_model.pkl +3 -0
- Spam Detector/saved_models /sms_vectorizer.pkl +3 -0
- Spam Detector/spam-detector-Mathis-AI.ipynb +535 -0
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 |
+
}
|