Comment prédire les résultats avec seulement des cas positifs comme formation?

21

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?

enricoferrero
la source
1
Tout algorithme d'apprentissage que vous utiliserez prédira que tous les e-mails sont du spam. Vous devez avoir des exemples des deux catégories pour tout apprentissage judicieux.
JohnRos
OK, cela exclurait une approche d'apprentissage supervisé classique. Mais existe-t-il un algorithme qui renvoie une sorte de métriques de similitude? Par exemple: cet e-mail est très similaire à un e-mail spam, cet autre ne l'est pas.
enricoferrero
6
@JohnRos n'est pas vrai, l'apprentissage à partir de données positives et non étiquetées est un grand sujet dans l'apprentissage semi-supervisé et ce n'est rien de tel que vous le décrivez.
Marc Claesen
5
@MarcClaesen: Je n'étais pas familier avec cette ligne de recherche (très cool). Je vois que cette magie repose sur l'hypothèse que les données non étiquetées sont un mélange de spam et de non-spam, ce qui rend le problème résoluble.
JohnRos
2
@JohnRos exactement, et je suis d'accord avec le facteur de fraîcheur. Ce que je trouve vraiment cool, c'est le fait que nous avons récemment pu montrer comment calculer des mesures de performance traditionnelles sur la base de tableaux de contingence (par exemple, précision, précision, rappel, ...) sans négatifs connus !
Marc Claesen

Réponses:

19

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:

  • déduire en quelque sorte un ensemble de négatifs probables à partir des données non étiquetées, puis former un modèle supervisé pour distinguer les positifs connus de ces négatifs inférés.
  • traiter l'ensemble non étiqueté comme négatif et tenir compte d'une manière ou d'une autre du bruit d'étiquette qui est connu pour être présent.

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:

  • Une technique de pointe pour apprendre des modèles à partir de données positives et non étiquetées (publication officielle disponible ici ): http://arxiv.org/abs/1402.3144
  • Une technique pour calculer les mesures de performance couramment utilisées sans négatifs connus (en cours d'examen, c'est le premier du genre): http://arxiv.org/abs/1504.06837
Marc Claesen
la source
1
Excellent! Merci beaucoup pour les références. Le RESVM et le SVM en sac semblent fonctionner de manière similaire dans un environnement d'apprentissage PU. Pouvez-vous recommander des implémentations (de préférence en R) de l'un ou l'autre algorithme? Aucun des deux ne semble malheureusement être inclus dans le signe d'insertion.
enricoferrero
1
@enricoferrero Oui, ils fonctionnent de manière similaire à moins qu'il n'y ait de faux positifs (connus), auquel cas RESVM surpasse de manière significative SVM (j'ai conçu RESVM à cet effet, car l'application sur laquelle je travaille a des faux positifs). Je ne pense pas qu'il existe des implémentations R facilement disponibles, mais vous pouvez implémenter les deux assez facilement en encapsulant une implémentation SVM comme kernlabou e1071. 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).
Marc Claesen
1
@enricoferrero J'ai une implémentation en ligne de commande de RESVM disponible sur github.com/claesenm/resvm , bien que ce code ne soit pas très bien poli. Ce dépôt spécifique est écrit en Python et est utilisé comme pilote pour le package EnsembleSVM .
Marc Claesen
Il semble qu'une autre bonne option pour un algorithme SVM en sac pourrait être d'utiliser le package mlr dans R avec un emballage d'ensachage autour d'un apprenant SVM .
enricoferrero
7

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.

FelixNNelson
la source
2

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 ...

Exception non-gérée
la source
J'obtiens une erreur 404 en suivant votre lien.
enricoferrero
Il y avait une faute de frappe. Désolé pour cela, cela devrait fonctionner maintenant ;-)
Exception non gérée