NLTK-Paket bietet eine Methode show_most_informative_features()
, um die wichtigsten Funktionen für beide Klassen zu finden, mit Ausgabe wie:
Wie in dieser Frage beantwortet Wie Sie am meisten bekommen informative Features für scikit-learn Klassifikatoren? , das kann auch in scikit-learn funktionieren. Für den binären Klassifikator gibt die Antwort in dieser Frage jedoch nur das beste Merkmal selbst aus.
Meine Frage ist also, wie kann ich die zugehörige Klasse identifizieren, wie im obigen Beispiel (outstanding ist in der POS-Klasse am informativsten und seagal ist in der negativen Klasse am informativsten)?
EDIT: Eigentlich möchte ich eine Liste der informativsten Wörter für jede Klasse. Wie kann ich das machen? Danke!
Im Fall der binären Klassifizierung scheint es so, als wäre das Koeffizientenfeld abgeflacht.
Versuchen wir, unsere Daten nur mit zwei Labels umzubenennen:
%Vor%[out]:
%Vor%Also machen wir ein paar Diagnosen:
%Vor%[out]:
%Vor%Scheint so, als würden die Features gezählt und dann, wenn sie vektorisiert wurden, abgeflacht, um Speicher zu sparen, also versuchen wir es:
%Vor%[out]:
%Vor%Nun sehen wir einige Muster ... Es scheint, als ob der höhere Koeffizient eine Klasse bevorzugt und der andere den anderen bevorzugt, also können Sie das einfach tun:
%Vor%[out]:
%Vor%Wenn Sie @larsmans Kommentar sorgfältig gelesen haben, gab er den Hinweis auf den Koeffizient der binären Klassen in Wie erhalten Sie die meisten informativen Funktionen für scikit-learn Klassifikatoren?
Grundsätzlich brauchen Sie:
%Vor% classifier.classes_
greift auf den Index der Klassenbezeichnungen zu, die Sie im Klassifizierer
vectorizer.get_feature_names()
ist selbsterklärend
sorted(zip(classifier.coef_[labelid], feature_names))[-n:]
ruft den Koeffizienten des Klassifikators für eine gegebene Klassenbezeichnung ab und sortiert ihn dann in aufsteigender Reihenfolge.
Ich werde ein einfaches Beispiel aus Ссылка
verwenden Eingabedatei train.txt
:
Code:
%Vor%[out]:
%Vor%Tags und Links python machine-learning nltk scikit-learn