Construire un classificateur binaire avec uniquement des données positives et sans étiquette

11

J'ai 2 jeux de données, un avec des instances positives de ce que je voudrais détecter et un avec des instances sans étiquette. Quelles méthodes puis-je utiliser?

Par exemple, supposons que nous voulons comprendre la détection des e-mails de spam sur la base de quelques caractéristiques structurées des e-mails. Nous avons un ensemble de données de 10000 e-mails de spam et un ensemble de données de 100000 e-mails pour lesquels nous ne savons pas s'il s'agit de spam ou non.

Comment pouvons-nous résoudre ce problème (sans étiqueter manuellement aucune des données non étiquetées)?

Que pouvons-nous faire si nous avons des informations supplémentaires sur la proportion de spam dans les données non étiquetées (c'est-à-dire si nous estimons qu'entre 20 et 40% des 100 000 e-mails non étiquetés sont du spam)?

nassimhddd
la source
1
Le poste doit être ajouté les balises semi-supervisé et pu-learning. Ces balises n'existent toujours pas et actuellement je ne peux pas les créer.
DaL
@DanLevin Oui, [tag: apprentissage semi-supervisé] est logique. Ajouté :) Je ne suis pas sûr de la partie pu-learning (au moins je ne suis pas au courant), donc quelqu'un d'autre peut le faire!
Dawny33
1
L'apprentissage PU est un cas spécifique d'apprentissage semi supervisé. Il est moins courant (7K résultats chez Google) puis semi supervisé (298K résultats chez Google) que cette question soit PU (l'ensemble de données étiqueté est juste positif). Bien que le sujet soit discuté à l'académie (par exemple, cs.uic.edu/~liub/NSF/PSC-IIS-0307239.html ), il est possible que cette question soit seule avec cette balise pendant un certain temps.
DaL

Réponses:

7

Ma suggestion serait d'essayer de construire une sorte de clustering sur vos données sans étiquette qui se rapproche quelque peu d'un ensemble de données étiqueté. La justification est plus ou moins la suivante:

  • Vous disposez d'un vecteur de fonctionnalité pour représenter vos documents
  • Sur la base de ce vecteur d'entités, vous pouvez proposer un certain nombre de regroupements différents, avec des méthodes de regroupement floues, approximatives ou basées sur des classes
  • Sachant à quoi ressemble un exemple positif, vous pouvez rapidement évaluer la similitude globale d'un cluster avec votre cluster positif
  • Sachant qu'il ne devrait vraiment y avoir que deux clusters, vous pouvez ajuster les hyperparamètres de votre méthode de clustering afin que les deux métriques ci-dessus soient de plus en plus proches de la satisfaction
  • Avec les deux clusters, vous avez ce qui est probablement une approximation étroite d'un ensemble de données étiquetées, que vous pouvez ensuite utiliser comme un corpus standard argenté pour réellement former votre modèle

J'espère que cela a du sens, si vous recherchez spécifiquement des algorithmes de clustering, certains que j'apprécie personnellement et qui pourraient être bons dans ce scénario sont FLAME et tsne . Alternativement, en regardant la spectaculaire bibliothèque gensim en python, vous obtiendrez un long chemin vers le clustering que vous recherchez.

J'espère que cela aide et fait sens, laissez un commentaire si vous avez des questions.

indico
la source
Merci pour votre réponse. Est-ce que je comprends bien: votre point de départ est de fusionner les 2 jeux de données?
nassimhddd
@ cafe876 C'est certainement une façon de commencer, puis d'essayer de recréer un clustering qui se rapproche de l'original.
indico
3

Votre problème appartient au cadre de l' apprentissage PU (seulement des points positifs, beaucoup de non étiquetés).

Il est également proche des cadres les plus courants de l' apprentissage semi supervisé (peu de positifs et de négatifs, beaucoup de non étiquetés).

Il existe de nombreux documents d'enquête que vous pouvez consulter sur le terrain.

Une méthode classique dans le domaine, qui a également été testée sur le spam comme dans votre cas, est la co-formation En co-formation, vous construisez deux apprenants indépendants (par exemple, un basé sur le contenu du courrier et un basé sur le schéma d'envoi) et vous utilisez les résultats de l'un pour former l'autre et vice versa.

DaL
la source
2

Former 2 modèles génératifs, un pour chaque jeu de données (spam uniquement, spam plus jambon), qui vous donneront la probabilité qu'un point de données soit tiré de la même distribution de probabilité des données d'entraînement. Attribuez des e-mails en tant que spam ou jambon en fonction du modèle qui vous donne la plus forte probabilité que le document résulte des données de formation utilisées pour le former. Des exemples de modèles génératifs sont les RBM, les auto-encodeurs (dans ce cas, quel modèle a l'erreur de reconstruction la plus faible). Il existe également probablement des modèles génératifs bayésiens qui attribueront une probabilité à un point de données sur la base de certaines données d'entraînement.

La meilleure option serait cependant de prendre le temps de gérer un deuxième ensemble de données contenant uniquement du jambon. Cela vous donnera une précision de classification plus élevée. En supposant une proportion inférieure de spam dans les e-mails de jambon, cela ne devrait pas être trop difficile. Vous pouvez même utiliser Mechanical Turk si vous manquez de temps ou de ressources (ou stagiaires \ étudiants diplômés ou autre main-d'œuvre bon marché).

Simon
la source
Merci pour votre réponse. C'est un excellent exemple de ce que les modèles génératifs peuvent faire que les modèles discriminants ne peuvent pas faire.
nassimhddd