Il s'agit en fait d'un problème vraiment approfondi sur lequel de nombreuses personnes et entreprises ont travaillé. Voici quelques notions de base:
Premièrement, nous devons bien représenter les données. Cela implique en quelque sorte de représenter chaque document comme un vecteur dansré-espace dimensionnel. Idéalement, dans cet espace, nous voulons que les échantillons qui ont le même label soient proches à distance euclidienne, et que les échantillons qui sont différents labels soient loin à distance euclidienne. Cette étape peut être très difficile, mais une représentation éprouvée est appelée terme fréquence-fréquence inverse du document (tf-idf). Ici, chaque dimension dans l'espace représente un mot particulier et la valeur dans cette dimension pour un échantillon particulier représente essentiellement le nombre normalisé de fois où ce mot apparaît dans le document. Vous pouvez en savoir plus ici . Il y a une assez bonne implémentation scikit-learn de cette représentation si vous voulez l'essayer.
Maintenant, les données sont dans un espace utile, mais dans un espace de très grande dimension. Je recommanderais de réduire cette dimensionnalité en quelque sorte, mais c'est tout un sujet pour un autre fil.
Enfin, vous pouvez former un algorithme pour classer les échantillons (c'est à cela que servent les autres réponses). Il existe de nombreux choix: les réseaux de neurones, adaboost, SVM, Naive Bayes et les modèles de classification graphique vous donneront tous de bons résultats. Beaucoup d'entre eux ont également des implémentations dans scikit-learn.
Mais les meilleurs algorithmes exploitent le fait que ce problème est en fait un transfert d'apprentissage. Autrement dit, les distributions dont proviennent les données de formation et de test peuvent ne pas être exactement les mêmes - car le genre de choses qu'une personne pense être du spam peut être différent du genre de choses qu'une autre personne pense être du spam.
d
variable? Est-ce un nombre fixe choisi par un scientifique?