2016-06-17 2 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]])) 

Тогда я Plot список таким образом:

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

Мой вопрос: как я могу заменить NUMBER функции функцией NAME для того, чтобы сделать сюжет более понятным? Я попытался преобразовать строку, содержащую имя функции (которая является именем каждого столбца кадра данных), но я не могу достичь своей цели.

Благодаря

ответ

1

Проблема в том, здесь:

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

indices массив индексов возвращения из np.argsort(importances)[::-1], он не имеет названия функций вы хотите, чтобы выглядеть как клещи на вашем X ось.

Вам нужно что-то вроде этого, предполагая, что df ваш панды 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_name из раствора @ Bakkal в правильном порядке, вы можете использование

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