2016-06-17 4 views
5

私はsklearnを使って木の森林の特徴の重要性をプロットします。データフレームの名前は「ハート」です。ここでは、ソート機能のリストを抽出するためのコード:木の森と機能の重要性をラベルする方法は?

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

そこで私は、このようにリストをプロット:

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) 

と私はこのようなプロットを得る:

enter image description here

私の質問は:プロットをより理解しやすくするために、フィーチャの番号をフィーチャの名前に置き換えるにはどうすればよいですか? 機能の名前(データフレームの各列の名前)を含む文字列を変換しようとしましたが、目標に到達できません。

おかげ

答えて

1

問題はここにある:

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

indicesは、インデックスの配列は、あなたのnp.argsort(importances)[::-1]から返さあなたに目盛りとして、それはあなたが表示したい機能名を持っていないですX軸。

あなたはdfは、私はあなたが正しい順序での@ bakkalの溶液からfeature_nameを取得したい場合は、することができ、これは古いが、後世のためであることがわかり、あなたのパンダDATAFRAME

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

ありがとう!今私は右の列と正しい重要性を一致させる必要があります。 – ElenaPhys

+0

右の列と正しい重要度を一致させる方法を見つけましたか? – Amy21

0

であると仮定すると、このようなものが必要使用

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

関連する問題