如何在多类分类设置中从Logitboost算法中提取特征重要性?

我目前正在运行一个多类Logitboost算法(文档),运行得很好。然而,当我尝试查看不同特征的重要性时,我得到了以下错误信息:

NotImplementedError: Feature importances is currently only implemented for binary classification tasks.

在查看Github代码时,我不太明白为什么还没有实现这个功能。有人知道有什么方法可以绕过这个问题,以便我可以绘制特征重要性图吗?还是说我只能等到Logitboost的新版本发布(鉴于上次更新已经是几个月前了,这似乎不太可能)。

我已经尝试修改Logitboost.py文件,但由于我的编程知识有限,这个过程相当繁琐。

提前感谢!


回答:

通过查看源代码,我们发现base_estimator默认为DecisionTree

# The default regressor for LogitBoost is a decision stump_BASE_ESTIMATOR_DEFAULT = DecisionTreeRegressor(max_depth=1)

我们知道决策树确实有特征重要性,尽管这个版本似乎还没有为多类问题实现这种方法。然而,通过查看拟合分类器的结构,似乎可以相对简单地提出一些自定义的重要性指标。

让我们通过一个例子来看看,使用iris数据集:

如果你查看lg.estimators_,你会发现结构是一个嵌套的已拟合决策树列表。我们可以做如下操作来获得整体重要性:

l_feat_imp = [sum(cls.feature_importances_ for cls in cls_list)               for cls_list in lg.estimators_]imp = np.array(l_feat_imp).sum(0)# array([ 9., 19., 51., 71.])

也就是说,这是将每个特征对所有内部估计器列表的贡献求和,然后再次对求和的贡献进行求和。所以在这种情况下,我们可以这样做:

pd.Series(imp, index=load_iris().feature_names).sort_values(ascending=False).plot.bar()

enter image description here

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注