Par souci de simplicité, disons que je travaille sur l'exemple classique des e-mails spam / non-spam.
J'ai un ensemble de 20000 e-mails. Parmi ceux-ci, je sais que 2000 sont du spam, mais je n'ai aucun exemple d'e-mails non-spam. Je voudrais prédire si les 18 000 restants sont du spam ou non. Idéalement, le résultat que je recherche est une probabilité (ou une valeur p) que l'e-mail soit du spam.
Quel (s) algorithme (s) puis-je utiliser pour faire une prédiction raisonnable dans cette situation?
En ce moment, je pense à une méthode basée sur la distance qui me dirait à quel point mon courrier électronique est similaire à un courrier indésirable connu. Quelles options ai-je?
Plus généralement, puis-je utiliser une méthode d'apprentissage supervisé, ou dois-je nécessairement avoir des cas négatifs dans mon ensemble de formation pour le faire? Suis-je limité à des approches d'apprentissage non supervisées? Qu'en est-il des méthodes semi-supervisées?
la source
Réponses:
C'est ce qu'on appelle l'apprentissage à partir de données positives et non étiquetées, ou apprentissage PU pour faire court, et c'est une niche active d'apprentissage semi-supervisé.
En bref, il est important d'utiliser les données non étiquetées dans le processus d'apprentissage car elles produisent des modèles considérablement améliorés par rapport aux classificateurs dits à classe unique qui sont formés exclusivement sur les positifs connus. Les données non étiquetées peuvent être incorporées de plusieurs manières, les approches prédominantes étant les suivantes:
Je suis actif dans ce domaine, et plutôt que de le résumer ici pour vous, je vous recommande de lire deux de mes articles et les références qu'ils contiennent pour avoir un aperçu du domaine:
la source
kernlab
oue1071
. Notez que SVM et RESVM d'ensachage ont un certain nombre d'hyperparamètres que vous devez optimiser, pour lesquels je recommande la bibliothèque Optunity (a une interface R).Je suppose qu'il n'y a pas autant de cas de spam dans vos 18 000 cas. Pour utiliser une approche d'apprentissage supervisé à cet effet, vous devez avoir plus d'une catégorie / classe dans vos données. Puisque vous savez que 2 000 cas sont du spam, vous pouvez étiqueter les 18 000 cas restants comme «catégorie inconnue» et former tout modèle d'apprentissage supervisé pour prédire si un cas se trouve dans le spam ou la catégorie inconnue. Vérifiez ensuite la précision de votre modèle hors échantillon pour voir dans quelle mesure le modèle fonctionne pour distinguer les 2 catégories. S'il fonctionne bien, mon hypothèse de quelques cas de spam dans la catégorie «inconnu» est justifiée. S'il ne fonctionne pas bien, vous devrez utiliser un apprenant non supervisé (comme kmeans, etc.) pour regrouper et identifier des groupes homogènes distincts dans vos données. Identifiez ensuite les clusters qui contiennent le plus de 2000 spams, et lesquels ne le font pas, et les étiqueter respectivement comme spam et non spam. Ensuite, vous pouvez procéder à la modélisation en utilisant un apprenant supervisé comme je l'ai décrit précédemment.
la source
Ce dont parle le PO est une tâche de classification à une classe, qui est très difficile.
Il existe de nombreux articles sur cette tâche dans différents domaines de recherche. J'ai également écrit un programme de vérification de la paternité intrinsèque efficace basé sur l'apprentissage d'ensemble . Il est très facile de l'adapter afin de classer le spam / non spam, plutôt que les auteurs. Essayez-le et faites-moi savoir si vous avez besoin de plus de détails ...
la source