Python - Scikit发现分类变量的变量重要性

时间:2015-03-19 23:59:03

标签: python r scikit-learn random-forest gbm

我试图在python中使用scikit learn来做一些不同的分类器问题(RF,GBM等)。除了建立模型和进行预测之外,我还希望看到变量的重要性。我知道有办法获得重要性

importances = clf.feature_importances_
print(importances)

但是如何获得更重要的东西,其重要性与变量名称相关(即R中的summary(gbm)或R中的varImp(randomForest)),尤其是如果它是具有多个级别的分类变量?

1 个答案:

答案 0 :(得分:4)

为您的模型拟合的所有要素计算变量重要性(或要素重要性)。此伪代码可让您了解变量名称和重要性如何相关:

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(然后将此列表与变量重要性列表一起映射或以其他方式操作)。