-1

Veritabanımdaki her özelliğin önemlerini anlamaya çalışıyorum.RandomClassifier Scikit ile Özelliklerin Önemi Başlarken

names=['Class label', 'Alcohol', 
'Malic acid', 'Ash', 
'Alcalinity of ash', 'Magnesium', 
'Total phenols', 'Flavanoids', 
'Nonflavanoid phenols', 
'Proanthocyanins', 
'Color intensity', 'Hue', 
'OD280/OD315 of diluted wines', 
'Proline'] 
df_wine = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data', header=None,names=names) 



from sklearn.ensemble import RandomForestClassifier 
forest = RandomForestClassifier(n_estimators=10000, 
random_state=0, 
n_jobs=-1) 
forest.fit(X_train, y_train) 

feat_labels = df_wine.columns[1:] 
importances = forest.feature_importances_ 
indices = np.argsort(importances)[::-1] 
for f in range(X_train.shape[1]): 
    print("%2d) %-*s %f" % (f + 1, 30,feat_labels[f], importances[indices[f]])) 

ama np.argsort yöntemi anlamak rağmen, hala döngü İÇİN bunu idrak yoktur: Ben scikit belgelerinden bu kodu kullanın. Neden "importances" dizisini indekslemek için "indices" kullanıyoruz? "Durumunda

1) Alcohol      0.182483 
2) Malic acid      0.158610 
3) Ash       0.150948 
4) Alcalinity of ash    0.131987 
5) Magnesium      0.106589 

Çıktı: "sahasını ABD'ye [endeksleri [] f]"(ilk 5 satır) kullanarak durumunda

for f in range(X_train.shape[1]): 
print("%2d) %-*s %f" % (f + 1, 30,feat_labels[f], importances[f])) 

Çıktı: Ve neden biz sadece böyle bir kod kullanamazsınız önemleri [f] "(ilk 5 satır):

1) Alcohol      0.106589 
2) Malic acid      0.025400 
3) Ash       0.013916 
4) Alcalinity of ash    0.032033 
5) Magnesium      0.022078 
+0

Lütfen başvuruda bulunduğunuz örneğe bir bağlantı ekleyin. –

+0

http://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_importances.html – mokebe

cevap

0

Bu dokümanlar yerleştirilir değil, ne yakından bakın,

# FROM DOCS 
for f in range(X.shape[1]): 
    print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]])) 
diyordoğrudur

ve yanlış değil

# FROM YOUR QUESTION 
for f in range(X_train.shape[1]): 
    print("%2d) %-*s %f" % (f + 1, 30,feat_labels[f], importances[indices[f]])) 

. Eğer feat_labels kullanmak istiyorsanız bunun yerine özelliklerin sıralamasını kullanmak istiyorsunuz "indeksleri" seçeneğini kullanarak

# CORRECT SOLUTION 
for f in range(X_train.shape[1]): 
    print("%2d) %-*s %f" % (f + 1, 30,feat_labels[indices[f]], importances[indices[f]])) 

Onların yaklaşımı onlar özelliği önemleri azalan sırada yineleme istedikleri için kullanılır, değil yapmalıdır. Her ikisi de iyi, tek yanlış olanı önerdiğiniz ilk şeydir - bu iki yaklaşımın bir karışımıdır ve özelliklere yanlış önem verir.