决策树特征重要性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了决策树特征重要性相关的知识,希望对你有一定的参考价值。

参考技术A

决策树特征重要性在应用于复杂的多阶段决策时,阶段明显,层次清楚,便于决策机构集体研究,可以周密地思考各种因素,有利于作出正确的决策。

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。

在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。

决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。

分类树(决策树)是一种十分常用的分类方法。它是一种监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。

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

【中文标题】确定为啥特征在决策树模型中很重要【英文标题】: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 很有帮助。

以上是关于决策树特征重要性的主要内容,如果未能解决你的问题,请参考以下文章

决策树中的特征重要性、离散化和标准

决策树中的特征重要性、离散化和标准

决策树的特征重要性提取(scikit-learn)

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

如何在 Weka 构建的决策树中找到特征重要性

决策树(决策树的分支深度及重要特征检测)