-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Naive Bayes AntiSpam


Creare un Filtro Anti-Spam con il Metodo Naive Bayes

Creare un Filtro Anti-Spam con il Metodo Naive Bayes


Il metodo Naive Bayes è uno degli algoritmi più utilizzati per classificare i dati, in particolare per il rilevamento dello spam.
Questo metodo si basa sul *Teorema di Bayes* e assume che le caratteristiche del testo siano indipendenti tra loro, il che lo rende semplice ed efficace.
In questo articolo, ti mostrerò come costruire un filtro anti-spam utilizzando Python e il metodo Naive Bayes.

Cos'è un Filtro Anti-Spam


Un filtro anti-spam è un sistema che analizza i messaggi di posta elettronica e li classifica come:
- Spam (messaggi indesiderati o potenzialmente pericolosi).
- Ham (messaggi legittimi).

Il filtro utilizza un modello addestrato su un dataset contenente email etichettate come spam o ham.

Dataset

Per addestrare il filtro, utilizzeremo un dataset di email etichettate. Un esempio comune è l'[SMS Spam Collection dataset](https://www.kaggle.com/uciml/sms-spam-collection-dataset).
Scarica il dataset e assicurati che abbia due colonne:
- label: indica se l'email è "spam" o "ham".
- text: il contenuto del messaggio.

Passaggi per Creare il Filtro



Importare le Librerie

Prima di tutto, installa le librerie necessarie:

pip install pandas scikit-learn


Ora importa le librerie nel tuo script:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report


Caricare e Analizzare il Dataset


Carica il dataset in un DataFrame e analizza i dati.

# Caricare il dataset
dataset = pd.read_csv("spam.csv", encoding="latin-1")

# Rinominare le colonne per semplicità
dataset = dataset.rename(columns={"v1": "label", "v2": "text"})

# Tenere solo le colonne rilevanti
dataset = dataset[["label", "text"]]

# Mostra alcune righe del dataset
print(dataset.head())

# Convertire le etichette in valori numerici
dataset["label"] = dataset["label"].map({"ham": 0, "spam": 1})


Preparare i Dati


Dividiamo il dataset in dati di addestramento e di test.

# Dividere il dataset in caratteristiche (X) e target (y)
X = dataset["text"]
y = dataset["label"]

# Convertire il testo in una rappresentazione numerica
vectorizer = CountVectorizer()
X_vectorized = vectorizer.fit_transform(X)

# Dividere i dati in training e test set
X_train, X_test, y_train, y_test = train_test_split(X_vectorized, y, test_size=0.2, random_state=42)


Addestrare il Modello


Addestriamo un modello Naive Bayes con i dati di addestramento.

# Inizializzare e addestrare il modello
model = MultinomialNB()
model.fit(X_train, y_train)

# Valutare il modello sui dati di test
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))


Testare il Filtro

Puoi ora utilizzare il modello per classificare nuovi messaggi.

# Messaggi di esempio da classificare
new_emails = [
    "Congratulations! You've won a $1,000 Walmart gift card. Go to http://spam.com to claim now.",
    "Hey, are we still meeting for lunch today?",
]

# Trasformare i nuovi messaggi utilizzando il vettorizzatore addestrato
new_features = vectorizer.transform(new_emails)

# Predire se i messaggi sono spam o ham
predictions = model.predict(new_features)

# Mostrare i risultati
for email, label in zip(new_emails, predictions):
    print(f"Messaggio: {email}")
    print(f"Classificazione: {'Spam' if label == 1 else 'Ham'}\n")

Miglioramenti


Puoi migliorare il filtro anti-spam in diversi modi:
1. Dataset più ampio: Usa un dataset più rappresentativo del tuo traffico email reale.
2. Pre-elaborazione del testo: Rimuovi stopword, caratteri speciali e normalizza il testo (es. lowercase).
3. **Valutazione avanzata: Utilizza metriche come precisione e richiamo per ottimizzare il modello.

Automazione

Puoi integrare il filtro con la tua casella di posta utilizzando protocolli come IMAP o API per leggere e classificare le email in tempo reale. Consulta [questo articolo](#) per un esempio su come farlo.

Conclusione

Il metodo Naive Bayes è una soluzione semplice ma efficace per creare un filtro anti-spam. Con Python e librerie come **scikit-learn**, puoi implementare un sistema di classificazione accurato e personalizzabile in pochi passaggi.