2015-03-19 7 views
8

Я пытаюсь использовать scikit learn in python, чтобы выполнить несколько разных проблем классификатора (RF, GBM и т. Д.). В дополнение к построению моделей и составлению прогнозов, я хотел бы видеть переменную важность. Я знаю, что есть способ, чтобы получить важностейPython - Scikit найти переменную важность для категориальных переменных

importances = clf.feature_importances_ 
print(importances) 

, но как я могу получить что-то более рафинированный, что имеет важное значение, связанный с именем переменной (т.е. summary(gbm) в R или varImp(randomForest) в R), особенно если это категориальная переменная с несколькими уровнями?

+0

[Этот пример имеет значение значимости] (http://scikit-learn.org/0.13/auto_examples/ensemble/plot_forest_importances.html#example-ensemble-plot-forest-importances-py). Не могли бы вы уточнить, что вы хотите («более изысканный») - может быть, что не показано в этом примере? – AGS

ответ

3

Значение переменной (или значение функции) рассчитывается для всех функций, к которым вы подходите под свою модель. Этот псевдо-код дает вам представление о том, как имена переменных и значения могут быть отнесены:

import pandas as pd 

train = pd.read_csv("train.csv") 
cols = ['hour', 'season', 'holiday', 'workingday', 'weather', 'temp', 'windspeed'] 
clf = YourClassifiers() 
clf.fit(train[cols], train.targets) # targets/labels 

print len(clf.feature_importances_) 
print len(cols) 

Вы увидите, что длины двух списков которые печатаются те же - вы можете существенно отобразить списки вместе или манипулировать ими, как вы пожелаете. Если вы хотите, чтобы показать переменную значение хорошо в сюжете, вы могли бы использовать это:

import numpy as np 
import matplotlib.pyplot as plt 

plt.figure(figsize=(6 * 1.618, 6)) 
index = np.arange(len(cols)) 
bar_width = 0.35 
plt.bar(index, clf.feature_importances_, color='black', alpha=0.5) 
plt.xlabel('features') 
plt.ylabel('importance') 
plt.title('Feature importance') 
plt.xticks(index + bar_width, cols) 
plt.tight_layout() 
plt.show() 

Если вы не хотите использовать этот метод (это означает, что вы приспосабливают все столбцы, а не только немногих избранных, как установите в переменной cols), то вы можете получить имена столбцов/объектов/переменных ваших данных с помощью train.columns.values (а затем сопоставить этот список вместе с перечнем переменных значений или манипулировать каким-либо другим способом).

 Смежные вопросы

  • Нет связанных вопросов^_^