首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特征重要性打包分类器和列名

特征重要性打包分类器和列名
EN

Stack Overflow用户
提问于 2022-03-16 08:05:56
回答 1查看 309关注 0票数 2

我已转介这两个职位:

请不要把这个标记为副本。

我试图从打包分类器中获取特征名(它没有内置的特性重要性)。

我有下面的示例数据和代码,这些数据和代码是基于上述链接的相关职位的。

代码语言:javascript
复制
import numpy as np
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
clf = BaggingClassifier(DecisionTreeClassifier())
clf.fit(X, y)

feature_importances = np.mean([tree.feature_importances_ for tree in clf.estimators_], axis=0)

但是这只输出了特性的重要性(如下所示),但是我也想要特性名。

代码语言:javascript
复制
feature_importances 
# array([0.15098599, 0.27608213, 0.33606019, 0.23687169])

如何为这些特性重要性值找到相应的特征名称?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-19 12:08:48

您可以在没有任何参数的情况下调用load_iris函数,这样函数的返回将是一个具有某些属性的Bunch对象(类似字典的对象)。对于您的用例来说,最相关的是bunch.data (功能矩阵)、bunch.targetbunch.feature_names

代码语言:javascript
复制
...

bunch = load_iris()
X = bunch.data
y = bunch.target
feature_names = bunch.feature_names

clf = BaggingClassifier(DecisionTreeClassifier(), random_state=42)
clf.fit(X, y)

feature_importances = np.mean([tree.feature_importances_ for tree in clf.estimators_], axis=0)

output = {fn:fi for fn,fi in zip(feature_names,feature_importances)}
print(output)
代码语言:javascript
复制
{
    'sepal length (cm)': 0.008652347823679744,
    'sepal width (cm)': 0.01945400672681583,
    'petal length (cm)': 0.539297348817521,
    'petal width (cm)': 0.43259629663198346
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71493530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档