Python de la mise en œuvre de l'Information Mutuelle
Je vais avoir quelques problèmes de mise en œuvre de la Mutuelle de la Fonction des Informations que Python est l'apprentissage de la machine bibliothèques fournissent, en particulier :
sklearn.métriques.mutual_info_score(labels_true, labels_pred, de contingence=None)
(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.mutual_info_score.html)
Je suis en train de mettre en œuvre l'exemple que j'ai trouver dans le Stanford PNL tutoriel site:
Le site se trouve ici : http://nlp.stanford.edu/IR-book/html/htmledition/mutual-information-1.html#mifeatsel2
Le problème est que j'obtiens des résultats différents, sans essayer de comprendre la raison encore.
- Je obtenir de la notion d'Information Mutuelle et de la sélection des fonctionnalités, je ne comprends pas comment c'est implémenté en Python. Ce que je fais c'est que j'ai la mutual_info_score méthode avec deux baies basé sur la PNL exemple de site, mais il produit des résultats différents. L'autre fait intéressant est que de toute façon vous de jouer et de numéros de changement sur ces tableaux, vous êtes plus susceptibles d'obtenir le même résultat. Suis-je censé utiliser une autre structure de données spécifique à Python ou quel est le problème derrière tout cela? Si quelqu'un a utilisé cette fonction avec succès dans le passé, il serait d'une grande aide pour moi, je vous remercie pour votre temps.
- vous devez nous fournir de travail exemple de ce qu'est exactement "mauvais".
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré le même problème aujourd'hui. Après quelques essais j'ai trouvé la vraie raison: vous prenez log2 si vous avez suivi scrupuleusement la PNL tutoriel, mais sklearn.métriques.mutual_info_score utilise le logarithme naturel(base e, le nombre d'Euler). Je n'ai pas trouvé ce détail dans sklearn documentation...
J'ai vérifié par:
Si vous modifiez cette
np.log2
ànp.log
, je pense qu'il serait vous donner la même réponse que sklearn. La seule différence est que lorsque cette méthode retourne 0, sklearn sera de retour un nombre très proche de 0. ( Et bien sûr, l'utilisation sklearn si vous n'avez pas de soins sur les journaux de la base, mon morceau de code est juste pour la démo, il donne de mauvaises performances...)Pour info, 1)
sklearn.metrics.mutual_info_score
prend des listes ainsi que des np.tableau; 2) lasklearn.metrics.cluster.entropy
utilise également le journal, de ne pas log2Edit: comme pour "même résultat", je ne suis pas sûr de ce que tu veux réellement dire. En général, les valeurs des vecteurs n'a pas vraiment d'importance, c'est la "distribution" des valeurs qui importe. Vous vous souciez de P(X=x), P(Y=Y) et P(X=x,Y=Y), et non pas la valeur de x,y.
Le code ci-dessous devrait fourni un résultat:
0.00011053558610110256