Python - Scikit 找到分类变量的变量重要性

Posted

技术标签:

【中文标题】Python - Scikit 找到分类变量的变量重要性【英文标题】:Python - Scikit find variable importance for categorical variables 【发布时间】:2015-05-23 07:22:56 【问题描述】:

我正在尝试在 python 中使用 scikit learn 来解决几个不同的分类器问题(RF、GBM 等)。除了构建模型和进行预测之外,我还希望看到可变的重要性。我知道有办法获得重要性

importances = clf.feature_importances_
print(importances)

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

【问题讨论】:

This example plots feature importance。您能否更清楚地说明您想要什么(“更精致”) - 也许这个示例中没有显示什么? 【参考方案1】:

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

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

【讨论】:

以上是关于Python - Scikit 找到分类变量的变量重要性的主要内容,如果未能解决你的问题,请参考以下文章

具有混合数据类型(文本、数字、分类)的 Python scikit-learn 分类

Python Scikit Learn 错误:ValueError:“找到样本数量不一致的输入变量:[4, 10]”

您如何使用 Scikit learn 预测分类变量和连续变量的组合?

scikit,分类列,决策树

使用 pandas 和 scikit (OneHotEncoder) 对逻辑回归的分类变量进行虚拟化

如何在 Scikit Learn 决策树中根据分类变量拆分节点?