2017-01-27 3 views
3

Ich versuche, Feature-Importwerte für ein zufälliges Gesamtstrukturmodell zu plotten und jede Feature-Wichtigkeit auf den ursprünglichen Koeffizienten zurückzuverweisen. Es ist mir gelungen, ein Diagramm zu erstellen, das die Wichtigkeiten zeigt und die ursprünglichen Variablennamen als Label verwendet, aber im Moment sortiert es die Variablennamen in der Reihenfolge, in der sie sich im Dataset befanden (und nicht in der Reihenfolge ihrer Wichtigkeit). Wie bestelle ich sie in der Reihenfolge ihrer Wichtigkeit? Vielen Dank!Zuordnen von Spaltennamen zu zufälligen Gesamtstrukturmerkmalsimporten

enter image description here

Mein Code ist:

importances = brf.feature_importances_ 
std = np.std([tree.feature_importances_ for tree in brf.estimators_], 
     axis=0) 
indices = np.argsort(importances)[::-1] 

# Print the feature ranking 
print("Feature ranking:") 

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

# Plot the feature importances of the forest 
plt.figure(figsize=(8,8)) 
plt.title("Feature importances") 
plt.bar(range(x_train.shape[1]), importances[indices], 
    color="r", yerr=std[indices], align="center") 
feature_names = x_dummies.columns 
plt.xticks(range(x_dummies.shape[1]), feature_names) 
plt.xticks(rotation=90) 
plt.xlim([-1, x_dummies.shape[1]]) 
plt.show() 
+0

Sie haben die Plots, die Sie gerade erhalten, nicht aufgenommen? –

+0

Bearbeitet! Ich war mir nicht sicher, ob der Plot viel Wert hatte, weil ich nur versuche, die Reihenfolge der x-Labels auf der Unterseite zu ändern. Entschuldigung für die winzige Schrift, es war die einzige Möglichkeit, den größten Teil des Bildes in einen Screenshot zu packen. – yogz123

+0

'plt.bar (Bereich (x_dummies.shape [1]), Bedeutungen [Indizes], color =" r ", yerr = std [Indizes], align =" center ")'? –

Antwort

6

Eine Art generische Lösung, die die Funktionen/Wichtigkeiten in einen Datenrahmen und sie zu werfen, wäre zu sortieren, bevor Plotten:

import pandas as pd 
%matplotlib inline 
#do code to support model 
#"data" is the X dataframe and model is the SKlearn object 

feats = {} # a dict to hold feature_name: feature_importance 
for feature, importance in zip(data.columns, model.feature_importances_): 
    feats[feature] = importance #add the name/value pair 

importances = pd.DataFrame.from_dict(feats, orient='index').rename(columns={0: 'Gini-importance'}) 
importances.sort_values(by='Gini-importance').plot(kind='bar', rot=45) 
1

I Verwenden Sie eine ähnliche Lösung wie Sam:

import pandas as pd 
important_features = pd.Series(data=brf.feature_importances_,index=x_dummies.columns) 
important_features.sort_values(ascending=False,inplace=True) 

drucke ich immer nur die Liste mit print important_features aber immer Series.plot

0

Eine weitere einfache Möglichkeit, eine sortierte Liste

importances = list(zip(xgb_classifier.feature_importances_, df.columns)) 
importances.sort(reverse=True) 

Next Code eine Visualisierung fügt bekommen verwenden, um plotten können, wenn es notwendig ist,

pd.DataFrame(importances, index=[x for (_,x) in importances]).plot(kind = 'bar')