Funktion, Bedeutung, Gewinnung von Entscheidungsbäumen (scikit-learn)
Ich habe versucht in den Griff zu bekommen, die auf die Bedeutung von Funktionen in einem Entscheidungsbaum habe ich modelliert. Ich bin interessiert an der Entdeckung des Gewichts der einzelnen Features ausgewählt, die in den Knoten als auch der Begriff selbst. Meine Daten ist eine Reihe von Unterlagen.
Das ist mein code für den Entscheidungsbaum, ich veränderte den code-snippet aus scikit-learn, dass-Extrakt (http://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_importances.html):
from sklearn.feature_extraction.text import TfidfVectorizer
### Feature extraction
tfidf_vectorizer = TfidfVectorizer(stop_words=stopwords,
use_idf=True, tokenizer=None, ngram_range=(1,2))#ngram_range=(1,0)
tfidf_matrix = tfidf_vectorizer.fit_transform(data[:, 1])
terms = tfidf_vectorizer.get_features_names()
### Define Decision Tree and fit
dtclf = DecisionTreeClassifier(random_state=1234)
dt = data.copy()
y = dt["label"]
X = tfidf_matrix
fitdt = dtclf.fit(X, y)
from sklearn.datasets import load_iris
from sklearn import tree
### Visualize Devision Tree
with open('data.dot', 'w') as file:
tree.export_graphviz(dtclf, out_file = file, feature_names = terms)
file.close()
import subprocess
subprocess.call(['dot', '-Tpdf', 'data.dot', '-o' 'data.pdf'])
### Extract feature importance
importances = dtclf.feature_importances_
indices = np.argsort(importances)[::-1]
# Print the feature ranking
print('Feature Ranking:')
for f in range(tfidf_matrix.shape[1]):
if importances[indices[f]] > 0:
print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]]))
print ("feature name: ", terms[indices[f]])
- Bin ich richtig in der Annahme, dass sich Begriffe[indices[f]] (was ist die Funktion, Begriff, Vektor ) wird zum Ausdruck der eigentlichen feature-term spaltet sich der Baum an einem bestimmten Knoten?
- Der Entscheidungsbaum visualisieren mit GraphViz hat zum Beispiel X[30], ich nehme an, dies bezieht sich auf die numerische interpretation der feature-Begriff. Wie extrahiere ich den Begriff selbst, so dass ich überprüfen kann, ob der Prozess, den ich im Einsatz in #1?
Aktualisierten code -
fitdt = dtclf.fit(X, y)
with open(...):
tree.export_graphviz(dtclf, out_file = file, feature_names = terms)
Vielen Dank im Voraus
- AKTUALISIERT zwei Zeilen code
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für Sie die erste Frage, die Sie brauchen, um die Funktion Namen aus der vectoriser mit
terms = tfidf_vectorizer.get_feature_names()
. Für Ihre zweite Frage, Sie können Sie aufrufen könnenexport_graphviz
mitfeature_names = terms
um die tatsächlichen Namen der Variablen angezeigt, die in Ihrer Visualisierung (schauen Sie sich die vollständige Dokumentation derexport_graphviz
für viele andere Optionen, die nützlich sein können für die Verbesserung Ihrer Visualisierung.get_features() also features = (dict(zip(tfidf_vectorizer.get_feature_names(), tfidf_matrix)))
. Also der Aufruf der Funktion sieht wie folgt aus:tree.export_graphviz(fit_dt, out_file = file, feature_names=terms)
. Irgendwelche Ideen?terms = tfidf_vectorizer.get_feature_names()