2016-06-17 30 views
5

Uso sklearn per tracciare l'importanza della funzione per le foreste di alberi. Il dataframe è chiamato 'cuore'. Ecco il codice per estrarre l'elenco delle caratteristiche ordinate:COME LEGGERE L'IMPORTANZA DELLA CARATTERISTICA con le foreste di alberi?

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]])) 

Poi tracciare la lista in questo modo:

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) 

e ottengo una trama simile a questo:

enter image description here

La mia domanda è: come potrei sostituire il NUMERO della funzione con il NOME della funzione per rendere la trama più comprensibile? Ho provato a convertire la stringa contenente il nome della funzione (che è il nome di ogni colonna del frame di dati), ma non riesco a raggiungere il mio obiettivo.

Grazie

risposta

1

Il problema è qui:

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

indices è un array di indici restituito dal np.argsort(importances)[::-1], non ha i nomi funzionalità si desidera visualizzare come zecche sul tuo Asse X.

Hai bisogno di qualcosa di simile, assumendo df è la vostra Panda dataframe

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

Grazie! Ora devo abbinare la colonna giusta con la giusta importanza. – ElenaPhys

+0

Hai capito come abbinare la colonna giusta con la giusta importanza? – Amy21

0

vedo questo è vecchio, ma per i posteri, se si desidera ottenere il feature_name dalla soluzione @ di Bakkal nell'ordine corretto, è possibile utilizzare

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