2010-07-09 4 views
2

J'ai une grande matrice clairsemée représentant des attributs pour des millions d'entités. Par exemple, un enregistrement, représentant une entité, peut avoir des attributs "has (fur)", "has (tail)", "makesSound (miaou)" et "is (cat)".Classificateur évolutif pour la recherche d'attributs manquants

Cependant, ces données sont incomplètes. Par exemple, une autre entité peut avoir tous les attributs d'une entité "is (cat)" typique, mais il peut manquer l'attribut "is (cat)". Dans ce cas, je veux déterminer la probabilité que cette entité ait l'attribut "is (cat)". Donc, le problème que j'essaie de résoudre est de déterminer quels attributs manquants doivent être contenus dans chaque entité. Étant donné un enregistrement arbitraire, je veux trouver les N attributs les plus probables qui manquent, mais devraient être inclus. Je ne suis pas sûr de ce que le nom officiel est pour ce type de problème, donc je ne sais pas quoi rechercher lors de la recherche de solutions actuelles. Existe-t-il une solution évolutive pour ce type de problème? Ma première consiste simplement à calculer la probabilité conditionnelle pour chaque attribut manquant (par exemple P (est (cat) | a (fourrure) et a (queue) et ...)), mais cela semble être une approche très lente . De plus, si je comprends le calcul traditionnel de la probabilité conditionnelle, j'imagine que je rencontrerais des problèmes où mon entité contient quelques attributs inhabituels qui ne sont pas communs avec d'autres entités (cat), provoquant la probabilité conditionnelle à zéro.

Ma deuxième idée consiste à former un classificateur à entropie maximale pour chaque attribut, puis à l'évaluer en fonction des attributs actuels de l'entité. Je pense que le calcul des probabilités serait beaucoup plus flexible, mais cela aurait encore des problèmes d'évolutivité, puisque je devrais former des classificateurs séparés pour potentiellement des millions d'attributs. De plus, si je voulais trouver les N attributs les plus probables à inclure, je devrais encore évaluer tous les classificateurs, ce qui prendrait probablement une éternité.

Y a-t-il de meilleures solutions?

Répondre

1

Cela ressemble à une problème de recommandation typique. Pour chaque attribut, utilisez le mot «classification de film» et pour chaque rangée, utilisez le mot «personne». Pour chaque personne, vous voulez trouver les films qu'elle aimera probablement mais que vous n'avez pas encore notés.

Vous devriez regarder certaines des approches les plus réussies au Netflix Challenge. L'ensemble de données est assez volumineux, donc l'efficacité est une priorité élevée. Un bon point de départ pourrait être le document 'Matrix Factorization Techniques for Recommender Systems'.

+0

Grande reformulation de mon problème. – Cerin

1

Si vous avez un grand ensemble de données et que vous vous inquiétez de l'évolutivité, alors je rechercherais Apache Mahout. Mahout est une bibliothèque minière Apprentissage et données qui pourraient vous aider dans votre projet, en particulier, ils ont quelques-uns des plus connus des algorithmes déjà intégrés:

  • filtrage collaboratif
  • recommandeurs base utilisateur et article
  • K-Means, le groupement K-Means Fuzzy
  • moyenne regroupement Shift
  • regroupement de processus de Dirichlet
  • latent Dirichlet Allocation
  • décomposition valeur Singulier
  • motif fréquent parallèle mines
  • complémentaire Naive classificateur Bayes
  • arbre de décision forestière aléatoire classificateur
  • collections java haute performance (auparavant collections colt)
+0

Merci, j'ai entendu parler de Mahout. Cela semble intéressant, même si je ne connais pas tous les algorithmes implémentés. Pouvez-vous recommander ceux qui s'appliquent le mieux à mon problème? – Cerin

+0

Naive Bayes classificateur pourrait être très utile aussi K-Means, SVD, etc (différents algos différents avantages). Vous pourriez en fait essayer [Ensemble Learning] (http://en.wikipedia.org/wiki/Ensemble_learning), qui est la combinaison de plusieurs algorithmes d'apprentissage automatique afin d'obtenir un meilleur résultat. Les gagnants du défi NetFlix ont obtenu les meilleurs résultats en combinant plusieurs algorithmes, donc si vous ne voulez pas développer vos propres algorithmes à partir de rien et que vous voulez combiner beaucoup d'algorithmes, alors je vous recommande vraiment de jeter un œil sur Mahout. – Kiril

+0

Suivant les conseils de StompChicken, le problème de la recommandation est généralement résolu par le filtrage collaboratif, qui est implémenté par le composant "Taste" de Mahout (https://cwiki.apache.org/confluence/display/MAHOUT/Recommender+Documentation). – Cerin

Questions connexes