Ich habe einige Probleme bei der Implementierung der Gegenseitigen Informationsfunktion, die Pythons Machine-Learning-Bibliotheken bieten, insbesondere: sklearn.metrics.mutual_info_score (labels_true, labels_pred, contingency = None)
( Ссылка )
Ich versuche, das Beispiel zu implementieren, das ich in der Stanford NLP Tutorial-Seite finde:
Die Seite befindet sich hier: Ссылка
Das Problem ist, dass ich immer wieder andere Ergebnisse bekomme, ohne den Grund dafür herauszufinden.
Ich bekomme das Konzept der gegenseitigen Information und Feature-Auswahl, ich verstehe einfach nicht, wie es in Python implementiert ist. Was ich tue, ist, dass ich die wechselseitige_info_score-Methode mit zwei Arrays basierend auf dem NLP-Site-Beispiel zur Verfügung stelle, aber es gibt unterschiedliche Ergebnisse aus. Die andere interessante Tatsache ist, dass Sie sowieso herumspielen und Zahlen auf diesen Arrays ändern, die Sie am wahrscheinlichsten das gleiche Ergebnis erhalten werden. Soll ich eine andere Python-spezifische Datenstruktur verwenden oder was ist das Problem? Wenn jemand diese Funktion in der Vergangenheit erfolgreich genutzt hat, wäre es eine große Hilfe für mich, danke für Ihre Zeit.
Ich bin heute auf dasselbe Problem gestoßen. Nach ein paar Versuchen habe ich den wahren Grund gefunden: Sie nehmen log2, wenn Sie das NLP-Tutorial genau befolgt haben, aber sklearn.metrics.mutual_info_score verwendet natürlichen Logarithmus (Basis e, Euler-Zahl). Ich habe dieses Detail in der Sklearn-Dokumentation nicht gefunden ...
Ich habe das verifiziert durch:
%Vor% Wenn du np.log2
in np.log
änderst, denke ich, dass es dir die gleiche Antwort wie sklearn geben würde. Der einzige Unterschied ist, dass, wenn diese Methode 0 zurückgibt, sklearn eine Zahl sehr nahe an 0 zurückgibt. (Und natürlich, benutze sklearn, wenn du dich nicht um Log-Base kümmerst, mein Code ist nur für Demo, es gibt schlechte Leistung ...)
FYI, 1) sklearn.metrics.mutual_info_score
verwendet sowohl Listen als auch np.array; 2) Die sklearn.metrics.cluster.entropy
verwendet auch log, nicht log2
Edit: Was "dasselbe Ergebnis" betrifft, ich bin mir nicht sicher, was Sie wirklich meinen. Im Allgemeinen sind die Werte in den Vektoren nicht wirklich wichtig, es kommt auf die "Verteilung" der Werte an. Sie interessieren sich für P (X = x), P (Y = y) und P (X = x, Y = y), nicht den Wert x, y.
Der folgende Code sollte ein Ergebnis liefern: 0.00011053558610110256
Tags und Links python machine-learning feature-selection