← Comprendre les Réseaux de Neurones
📬 Projet final · 1 semaine

Projet final - détecteur de spam

🎯 Ce que tu retiens : Tout ensemble

Objectif

Construire un réseau de neurones complet, seul, avec quelque chose que tu connais bien : les emails. Tu en reçois tous les jours.

Étape 1 - Créer le dataset (toi-même)

import numpy as np

# TU crées les emails. Tu connais le spam mieux que n'importe quel dataset.
emails = [
    ("Gagnez 1000$ maintenant !!!", 1),
    ("Reunion demain a 14h", 0),
    ("FREE offer winner urgent click here", 1),
    ("Pouvez-vous envoyer le rapport ?", 0),
    ("Vous avez gagne un iPhone", 1),
    ("URGENT : mettez a jour votre compte", 1),
    ("Dejeuner vendredi ?", 0),
    ("Winner winner chicken dinner claim now", 1),
    ("Facture du mois de juillet", 0),
    ("100% FREE no catch click below", 1),
]

# TU inventes les caractéristiques
def extraire_features(texte):
    t = texte.upper()
    return np.array([
        1 if "$" in texte else 0,
        1 if "FREE" in t else 0,
        1 if "URGENT" in t else 0,
        1 if "WINNER" in t else 0,
        1 if "CLICK" in t else 0,
        len(texte) / 100,
    ])

X = np.array([extraire_features(t) for t, _ in emails])
y = np.array([[label] for _, label in emails])

print("Caractéristiques du 1er email :", X[0])
print("Étiquette (1=spam, 0=non) :", y[0])

Étape 2 - Construire le réseau

✍️ À toi de jouer

Reprends le code de la Phase 3 (NumPy) ou de la Phase 6 (PyTorch). Architecture suggérée : 6 entrées → 4 neurones cachés → 1 sortie. Entraîne-le, puis regarde les poids : quelle caractéristique a le poids le plus fort ?

Besoin d'un indice ?

La seule chose qui change par rapport à Iris, c'est le nombre d'entrées : 6 au lieu de 2. Donc poids1 = np.random.uniform(-1, 1, (6, 4)). Le reste de ta boucle est identique.

Voir la réponse

Le réseau apprend que certains signaux sont très « spammy » (le « $ », « WINNER », « FREE ») et leur donne de gros poids, tandis que la longueur ou une réunion comptent pour du bénin. La caractéristique au poids le plus fort est en général $ ou WINNER.

Étape 3 - Tester sur de nouveaux emails

✍️ À toi de jouer

Écris 5 emails que le réseau n'a JAMAIS vus et teste-le :

nouveaux = [
    "URGENT : vous avez gagne 5000$ FREE",
    "Reunion de projet mardi prochain",
    "Click here to claim your prize now!!!",
]
for email in nouveaux:
    features = extraire_features(email)
    # prediction = ton_reseau(features)
    # print(email, "->", "SPAM" if prediction > 0.5 else "PAS SPAM")

Étape 4 - Améliorer

✍️ À toi de jouer

  1. Quels emails ont été mal classés ? Pourquoi ?
  2. Quelle nouvelle caractéristique ajouterais-tu ? (Ex : le nombre de points d'exclamation.)
  3. Que se passe-t-il si tu ajoutes trop de neurones cachés ? (Indice : sur-entraînement.)

Checklist de validation

As-tu :

Si tu coches tout : félicitations. Tu comprends les réseaux de neurones.

Ressources pour continuer

« Si tu ne peux pas l'expliquer simplement, c'est que tu ne le comprends pas assez bien. » - Albert Einstein

« Si la théorie devient floue, retourne au code. Si le code devient opaque, retourne aux données. Si les données sont ennuyeuses, invente un jeu. »