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
- Quels emails ont été mal classés ? Pourquoi ?
- Quelle nouvelle caractéristique ajouterais-tu ? (Ex : le nombre de points d'exclamation.)
- Que se passe-t-il si tu ajoutes trop de neurones cachés ? (Indice : sur-entraînement.)
Checklist de validation
As-tu :
- Créé ton propre dataset d'emails (au moins 10) ?
- Inventé au moins 4 caractéristiques toi-même ?
- Codé le réseau (NumPy ou PyTorch) ?
- Entraîné jusqu'à une erreur < 0.1 ?
- Testé sur 3 emails nouveaux ?
- Identifié la caractéristique la plus importante (le poids le plus fort) ?
- Expliqué à quelqu'un (ou à toi-même) comment ça marche ?
Si tu coches tout : félicitations. Tu comprends les réseaux de neurones.
Ressources pour continuer
- TensorFlow Playground - aucun code, des curseurs pour voir un réseau apprendre.
- Machine Learnia (YouTube) - cours en français, très visuels.
- Fast.ai - cours gratuit, approche « pratique d'abord ».
« 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. »