TP2 : Naïve Bayes Classifier
Objectifs :
• Comprendre l'application pratique du Naïve Bayes.
• Implémenter un classificateur pour différencier les e-mails normaux des spams.
Prérequis :
• google colab
• Pandas ,Dataframe, Matplotlib, Seaborn, Sickit-learn
Données :
• Nous allons utiliser le dataset "SMS Spam Collection Dataset"
• Chaque message est étiqueté comme "ham" (non-spam) ou "spam".
Étapes du TP :
Étape 1 : Charger le dataset
- Importer les packages nécessaires :
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from [Link] import accuracy_score, classification_report, confusion_matrix
import seaborn as sns
import [Link] as plt
- Le dataset doit être un fichier CSV avec deux colonnes : "label" (ham/spam) et "message"
(contenu de l'e-mail ou du SMS) :
df = pd.read_csv('/content/[Link]', encoding='ISO-8859-1', usecols=[0, 1], names=['label', 'message'],
header=0)
[Link]()
Étape 2 : Prétraitement des données
-vérifier si il ya des valeur manquantes :
print([Link]().sum())
- Convertir les labels "ham" et "spam" en valeurs numériques :
df['label'] = df['label'].map({'ham': 0, 'spam': 1})
- Afficher la répartition des classes :
print("\nRépartition des classes :")
print(df['label'].value_counts())
[Link](data=df, x='label', palette='viridis')
[Link]("Distribution des classes (ham vs spam)")
[Link]()
Étape 3 : Séparer les données en ensembles d'entraînement et de test
X = df['message']
y = df['label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)
Étape 4 : Vectorisation des messages
# On utilise Bag of Words (CountVectorizer) ou TF-IDF
vectorizer = CountVectorizer(stop_words='english')
# Pour utiliser TF-IDF, remplacez CountVectorizer par TfidfVectorizer :
# vectorizer = TfidfVectorizer(stop_words='english')
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = [Link](X_test)
Étape 5 : Entraîner le modèle Naïve Bayes
model = MultinomialNB()
[Link](X_train_vec, y_train)
Étape 6 : Prédictions
y_pred = [Link](X_test_vec)
Étape 7 : Évaluation du modèle
-accuracy et classification_report :
print("\nÉvaluation du modèle :")
print(f"Accuracy : {accuracy_score(y_test, y_pred):.2f}")
print("\nClassification Report :")
print(classification_report(y_test, y_pred))
-Matrice de confusion
conf_matrix = confusion_matrix(y_test, y_pred)
conf_matrix_percentage = conf_matrix / conf_matrix.sum(axis=1)[:,
[Link]] * 100
[Link](conf_matrix_percentage, annot=True, fmt=".2f", cmap="Blues",
xticklabels=['Ham', 'Spam'], yticklabels=['Ham', 'Spam'])
[Link]("Matrice de confusion en pourcentage")
[Link]("Prédictions")
[Link]("Vérités")
[Link]()