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]])
  1. 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?
  2. 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
InformationsquelleAutor OAK | 2015-12-12
Schreibe einen Kommentar