2016-06-17 16 views
5

Ich benutze sklearn, um die Wichtigkeit der Eigenschaft für Wälder von Bäumen zu zeichnen. Der Datenrahmen heißt "Herz". Hier ist der Code, um die Liste der sortierten Merkmale zu extrahieren:WIE MAN DIE FEATURE BEDEUTUNG mit Wald von Bäumen ETIKETT?

importances = extc.feature_importances_ 
indices = np.argsort(importances)[::-1] 
print("Feature ranking:") 

for f in range(heart_train.shape[1]): 
    print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]])) 

Dann plotten ich die Liste auf diese Weise:

f, ax = plt.subplots(figsize=(11, 9)) 
plt.title("Feature ranking", fontsize = 20) 
plt.bar(range(heart_train.shape[1]), importances[indices], 
    color="b", 
    align="center") 
plt.xticks(range(heart_train.shape[1]), indices) 
plt.xlim([-1, heart_train.shape[1]]) 
plt.ylabel("importance", fontsize = 18) 
plt.xlabel("index of the feature", fontsize = 18) 

und ich bekomme eine grafische Darstellung wie folgt aus:

enter image description here

Meine Frage ist: Wie kann ich die NUMMER der Funktion durch den NAMEN der Funktion ersetzen, um die Handlung verständlicher zu machen? Ich habe versucht, die Zeichenfolge zu konvertieren, die den Namen des Features enthält (das ist der Name jeder Spalte des Datenrahmens), aber ich kann mein Ziel nicht erreichen.

Dank

Antwort

1

Das Problem dabei ist:

plt.xticks(range(heart_train.shape[1]), indices) 

indices ist ein Array von Indizes von Ihrem np.argsort(importances)[::-1] zurückgegeben, es verfügt nicht über die Merkmalsnamen Sie als Zecken erscheinen soll Ihre X-Achse.

Sie brauchen so etwas, df Annahme, daß Ihre Pandas Datenrahmen

feature_names = df.columns # e.g. ['A', 'B', 'C', 'D', 'E'] 
plt.xticks(range(heart_train.shape[1]), feature_names) 
+0

Vielen Dank! Jetzt muss ich die richtige Spalte mit der richtigen Bedeutung übereinstimmen. – ElenaPhys

+0

Haben Sie herausgefunden, wie Sie die richtige Spalte mit der richtigen Wichtigkeit verbinden? – Amy21

0

sehe ich alt, aber für die Nachwelt, wenn Sie die feature_name von @ bakkal-Lösung in der richtigen Reihenfolge erhalten möchten, können Sie Verwenden Sie

feature_names = [features_names[i] for i in indices]

Verwandte Themen