确定决策树模型中特征重要性的原因

通常,利益相关者不希望得到一个仅擅长预测的黑盒模型;他们希望了解特征的洞察,以便更好地理解他们的业务,并且能够向他人解释这些洞察。

当我们检查xgboost或sklearn梯度提升模型的特征重要性时,我们可以确定特征的重要性……但我们并不知道这些特征为何重要,对吗?

有没有一种方法不仅可以解释哪些特征重要,还可以解释它们为何重要?

有人建议我使用shap,但即使是运行一些样板示例也会抛出错误,所以我在寻找替代方案(甚至只是一个程序化的方法来检查树并获取除了plot_importance()图表之外的洞察)。

在下面的例子中,应该如何解释为什么特征f19是最重要的(同时还要意识到决策树在没有random_state或种子的情况下是随机的)。

from xgboost import XGBClassifier, plot_importancefrom sklearn.datasets import make_classificationimport matplotlib.pyplot as pltX,y = make_classification(random_state=68)xgb = XGBClassifier()xgb.fit(X, y)plot_importance(xgb)plt.show()

feature_importance

更新:我正在寻找一种程序化的证明方法,证明上述模型选择的特征对预测能力有正面或负面的贡献。我希望看到代码(而不是理论),说明如何检查实际模型并确定每个特征的正面或负面贡献。目前,我认为这是不可能的,所以请有人证明我是错的。我希望自己是错的!

我也明白决策树是非参数的,没有系数。然而,是否有办法查看某个特征是正面贡献(该特征的一个单位增加y)还是负面贡献(该特征的一个单位减少y)。

更新2:尽管这个问题被否决,并有几次“关闭”投票,看来这个问题并不那么疯狂。部分依赖图可能是答案。

部分依赖图(PDP)由Friedman(2001)引入,目的是解释复杂的机器学习算法。解释线性回归模型不像解释支持向量机、随机森林或梯度提升机器模型那么复杂,这就是部分依赖图可以派上用场的地方。对于一些统计解释,您可以参考这里和更高级的解释。一些算法有方法来寻找变量重要性,但它们并不表达一个变量是正面还是负面影响模型。


回答:

tldr; http://scikit-learn.org/stable/auto_examples/ensemble/plot_partial_dependence.html


我想澄清一些措辞,以确保我们达成共识。

  1. 预测能力:哪些特征显著地贡献于预测
  2. 特征依赖:特征是正相关还是负相关,即特征X的变化是否导致预测y增加/减少

1. 预测能力

您的特征重要性显示了哪些特征保留了最多的信息,并且是最显著的特征。能力可能意味着什么导致了最大的变化——您需要通过插入虚拟值来检查它们的整体影响,就像您对线性回归系数所做的那样。

2. 相关性/依赖性

正如@Tiago1984指出的,这在很大程度上取决于底层算法。XGBoost/GBM通过加法构建一个由桩子组成的委员会(决策树,通常只有一个分裂的低树数)。

在回归问题中,树通常使用与MSE相关的标准。我不会详细介绍,但您可以在这里阅读更多信息:https://medium.com/towards-data-science/boosting-algorithm-gbm-97737c63daa3

您会看到在每一步它都会计算一个“方向”向量来表示弱学习器的方向,所以原则上您知道它的影响方向(但请记住,它可能在一棵树中多次出现,在加法模型的多个步骤中)。

但是,简单来说;您可以固定除f19之外的所有特征,并为f19的一系列值进行预测,看看它与响应值的关系如何。

看看部分依赖图http://scikit-learn.org/stable/auto_examples/ensemble/plot_partial_dependence.html

在《统计学习的元素》中也有关于此的章节,第10.13.2章节。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

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

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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