- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
利益相关者通常不想要擅长预测的黑盒模型;他们希望深入了解功能,以便更好地了解他们的业务,这样他们就可以向其他人解释。
当我们检查 xgboost 或 sklearn 梯度提升模型的特征重要性时,我们可以确定特征重要性......但我们不明白为什么这些特征很重要,对吗?
有没有办法不仅可以解释哪些功能很重要,还可以解释为什么它们很重要?
我被告知使用 shap但是即使运行一些样板示例也会引发错误,所以我正在寻找替代方案(或者甚至只是一种检查树木和收集见解的程序方法,除了 plot_importance()
图之外,我可以带走)。
在下面的示例中,如何解释为什么特征 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可能就是答案。
Partial Dependence Plots (PDP) were introduced by Friedman (2001) with purpose of interpreting complex Machine Learning algorithms. Interpreting a linear regression model is not as complicated as interpreting Support Vector Machine, Random Forest or Gradient Boosting Machine models, this is were Partial Dependence Plot can come into use. For some statistical explaination you can refer hereand More Advance. Some of the algorithms have methods for finding variable importance but they do not express whether a varaible is positively or negatively affecting the model .
最佳答案
tldr; http://scikit-learn.org/stable/auto_examples/ensemble/plot_partial_dependence.html
我想澄清一些措辞以确保我们在同一页面上。
<强>1。预测能力
您的特征重要性向您展示了哪些保留了最多的信息,并且是最重要的特征。功效可能意味着导致最大变化的原因 - 您必须通过插入虚拟值来查看它们的总体影响,就像您必须处理线性回归系数一样。
<强>2。相关性/依赖性
正如@Tiago1984 所指出的,它在很大程度上取决于底层算法。 XGBoost/GBM 正在额外构建一个 stub 委员会(树数较少的决策树,通常只有一个 split )。
在回归问题中,树通常使用与 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 章中也有一章介绍它。
关于python - 确定为什么特征在决策树模型中很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47106385/
设置 我希望能够定义一个特征,使得任何实现该特征的结构不仅必须实现函数,而且还必须为某些常量指定值。所以也许是这样的: trait MyTrait { const MY_CONST: u8;
在我的 Web 应用程序中,授权用户至少有 4 个“方面”:http session 相关数据、持久数据、facebook 数据、运行时业务数据。 我决定使用案例类组合而不是特征至少有两个原因: 性状
我正在尝试使用以下代码从类中获取完整数据成员的列表: import std.stdio; import std.traits; class D { static string[] integr
我正在尝试实现 From对于我的一种类型。它应该消耗任意长度的行(仅在运行时已知)并从行中获取数据。编译器提示 &[&str; 2]不是 &[&str] ,即它不能将固定大小的切片转换为任意长度的切片
有人可以请你这么好心,并指出一种提取拟合树中使用的列/特征的方法,使用如下代码: library(dplyr) library(caret) library(rpart) df % dplyr
假设我定义了一个 Group所有组操作的特征。是否可以创建一个包装器AGroup超过 Group无需手动派生所有操作? 基本上,我想要这个: #[derive (Copy, Debug, Clone,
最近浏览了Markus Stocker的博客他很好地解释了如何在使用 observation 时表示传感器观察结果。 SSN 的模块本体论。我完全理解他的解释,但我发现有一件事多余地代表了一个的两个特
我有以下情况/代码; trait Model { def myField: String } case class MyModel(myField: String) extends Model
我想让一个案例类扩展一个特征 以下是我的要求: 我需要为 child 使用案例类。这是一个硬性要求,因为 scopt ( https://github.com/scopt/scopt ) parent
最近浏览了Markus Stocker的博客他很好地解释了如何在使用 observation 时表示传感器观察结果。 SSN 的模块本体论。我完全理解他的解释,但我发现有一件事多余地代表了一个的两个特
我有以下情况/代码; trait Model { def myField: String } case class MyModel(myField: String) extends Model
不确定标题是否完全有意义,对此感到抱歉。我是机器学习新手,正在使用 Scikit 和决策树。 这就是我想做的;我想获取所有输入并包含一个独特的功能,即客户端 ID。现在,客户端 ID 是唯一的,无法以
我想读取具有 Eigen 的 MNIST 数据集,每个文件都由一个矩阵表示。我希望在运行时确定矩阵大小,因为训练集和测试集的大小不同。 Map> MNIST_dataset((uchar*)*_dat
在 MATLAB 中,我可以选择一个分散的子矩阵,例如: A = [1 ,2 ,3;4,5,6;7,8,9] A([1,3],[1,3]) = [1,3;7,9] 有没有用 Eigen 做到这一点的聪
我在执行 Into 时遇到问题Rust 中通用结构的特征。下面是我正在尝试做的简化版本: struct Wrapper { value: T } impl Into for Wrapper {
我有这段 matlab 代码,我想用 Eigen 编写: [V_K,D_K] = eig(K); d_k = diag(D_K); ind_k = find(d_k > 1e-8); d_k(ind_
我正在使用 Eigen C++ 矩阵库,我想获取对矩阵列的引用。文档说要使用 matrix_object.col(index),但这似乎返回了一个表示列的对象,而不是简单地引用原始矩阵对象中的列。我担
在乘以很多旋转矩阵之后,由于舍入问题(去正交化),最终结果可能不再是有效的旋转矩阵 重新正交化的一种方法是遵循以下步骤: 将旋转矩阵转换为轴角表示法 ( link ) 将轴角转换回旋转矩阵 ( lin
定义可由命名空间中的多个类使用的常量的最佳方法是什么?我试图避免太多的继承,所以扩展基类不是一个理想的解决方案,我正在努力寻找一个使用特征的好的解决方案。这在 PHP 5.4 中是可行的还是应该采用不
定义可由命名空间中的多个类使用的常量的最佳方法是什么?我试图避免太多的继承,所以扩展基类不是一个理想的解决方案,我正在努力寻找一个使用特征的好的解决方案。这在 PHP 5.4 中是可行的还是应该采用不
我是一名优秀的程序员,十分优秀!