确定为啥特征在决策树模型中很重要

Posted

技术标签:

【中文标题】确定为啥特征在决策树模型中很重要【英文标题】:Determine WHY Features Are Important in Decision Tree Models确定为什么特征在决策树模型中很重要 【发布时间】:2018-04-16 19:29:31 【问题描述】:

利益相关者通常不想要一个擅长预测的黑盒模型;他们希望获得有关功能的见解,以便更好地了解他们的业务,以便向其他人解释。

当我们检查 xgboost 或 sklearn 梯度提升模型的特征重要性时,我们可以确定特征重要性......但我们不明白为什么这些特征很重要,不是吗?

有没有一种方法不仅可以解释哪些功能很重要,还可以解释为什么它们很重要?

有人告诉我使用shap,但即使运行一些样板示例也会引发错误,所以我正在寻找替代方案(或者甚至只是一种检查树木和收集见解的程序方法,除了@987654325 之外我可以带走@情节)。

在下面的示例中,如何解释 WHY 特征 f19 是最重要的(同时也意识到决策树是随机的,没有 random_state 或种子)。

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

更新: 我正在寻找的是一个程序化程序证明,证明上述模型选择的特征对预测能力有正面或负面的影响。我想看看您将如何检查实际模型并确定每个特征的正面或负面贡献的代码(不是理论)。目前,我认为这是不可能的,所以请有人证明我错了。我宁愿错!

我也知道决策树是非参数的,没有系数。不过,有没有办法查看一个特征是正面贡献(这个特征的一个单位增加 y)还是负面的(这个特征的一个单位减少 y)。

更新 2: 尽管对这个问题持反对态度,并且有几个“接近”投票,但似乎这个问题毕竟不是那么疯狂。 Partial dependence plots 可能是答案。

部分依赖图 (PDP) 由 Friedman (2001) 引入 目的是解释复杂的机器学习算法。 解释线性回归模型并不像 解释支持向量机、随机森林或梯度 Boosting Machine 模型,这是 Partial Dependence Plot 可以来的 投入使用。对于一些统计解释,您可以参考这里和更多 进步。一些算法有寻找变量的方法 重要性,但它们不表示变量是肯定还是 负面影响模型。

【问题讨论】:

【参考方案1】:

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


我想澄清一些措辞以确保我们在同一页面上。

    预测能力:哪些特征显着有助于预测 特征依赖:特征是正面的还是负面的 相关,即特征 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 章中也有一章。

【讨论】:

问一个特征对输出变量有什么方向是不合理的吗?例如,假设您正在进行二进制分类并且特征 f19 是“重要的”。然后假设您检查了 f19 值计数的比例,发现它预测为 1 而不是 0 的比例很高。好的,所以您可能会得出结论,它会在正方向上影响输出。但是,假设您做了同样的事情并注意到它的 0(零)比例更高。在这种情况下,它的影响很重要,因为它缺乏什么而不是它有助于预测的东西。这就是我的意思。 你可以在分类预测上做一个部分依赖图,所以你会得到f19值与预测,对于一组固定的特征。 “问得不合理”确实是特定于上下文的,在利益相关者设置中,我认为您可以查看依赖图中的一些重要特征,但永远不会尝试解释细节,或将其作为因果关系的证据。 我正在选择您的答案,因为它是最可操作和最具指导性的。谢谢!【参考方案2】:

功能的“重要性”取决于您用于构建树的算法。例如,在 C4.5 树中,经常使用最大熵准则。这意味着该特征集允许使用更少的决策步骤进行分类。

【讨论】:

【参考方案3】:

当我们检查 xgboost 或 sklearn 梯度提升模型的特征重要性时,我们可以确定特征重要性......但我们不明白为什么这些特征很重要,不是吗?

是的,我们有。特征重要性不是什么神奇的对象,它是一个定义明确的数学标准——它的确切定义取决于特定的模型(和/或一些额外的选择),但它始终是一个告诉“为什么”的对象。 “为什么”通常是可能的最基本的东西,归结为“因为它具有最强的预测能力”。例如,对于随机森林,特征重要性是衡量当随机选择的训练数据点被推过树时该特征在决策路径上使用的可能性有多大。所以它给出了正确的数学意义上的“为什么”。

【讨论】:

但我更多地考虑线性回归。在线性回归中,我们得到系数。一些系数对 y 变量产生正面影响(正系数),一些系数对 y 变量产生负面影响(负系数)。在决策树中,我们能否确定特征对其预测性的正面或负面贡献?如果是这样,一个例子会有很长的路要走 - 如何在程序上判断一个特性的正面或负面贡献。 以编程方式,从上面的示例中,您将如何检查模型以显示 f19 的贡献是正面的还是负面的? “积极影响”不是一个有效的概念,它只适用于琐碎的模型——更准确地说是线性模型。任何更复杂的东西,可以推断出诸如“如果 x > 10 AND x 看来我需要做一些功课,并可能剖析决策树如何在幕后工作。您的 cmets 很有帮助。

以上是关于确定为啥特征在决策树模型中很重要的主要内容,如果未能解决你的问题,请参考以下文章

决策树与随机森林

决策树与随机森林

决策树模型在项目管理中的应用

如何获得具有预处理和分类步骤的决策树管道的特征重要性?

机器学习_02_决策树

机器学习决策树与随机森林(转)