0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何解释这种高效算法的方法

nlfO_thejiangme 来源:未知 作者:李倩 2018-05-30 16:25 次阅读

XGBoost是一种高效的集成学习模型框架,利用树型分类器可以得到强大的分类结果和十分高效的运算效率。这篇文章主要探讨如何解释这种高效算法的方法,以及正确解释模型的价值。如果你也被集成树模型(如梯度提升树)的可靠性和准确率所吸引,并且需要对他们作出解释,那么这篇文章会为你带来很多有益的思考。

假设我们的任务是为银行预测个人的金融状况。模型准确率越高,银行收入就越多。但是因为模型的预测会用于借贷业务,因此我们也要能对模型为什么做出这样的预测给出合理解释。在尝试了各种各样的模型后,我们发现XGBoost所实现的梯度提升树模型能给出最好的准确率。然而要解释为什么XGBoost做出某个预测是困难的,所以我们面前有两个选择:1. 转而使用更容易解释的线性模型。2. 找出如何解释XGBoost模型的方法。数据科学家们往往都不想牺牲准确率,所以我们也决定尝试后者,即对复杂XGBoost模型(1247个深度为6的决策树)作出解释。

经典全局特征重要性度量

最直接的选择就是使用XGBoost Python接口中的plot_importance()方法。它能给出一个简单的柱状图来表示我们数据集中每一个特征的重要性。

在一个用来预测人们是否会上报$50k以上收入的模型上运行xgboost.plot_importance方法的结果

通过观察XGBoost所返回的特征重要性结果,我们可以看到年龄毫无疑问比其他特征都要重要。我们可以就此打住,并得出年龄就是我们模型最重要特征的结论,其次是每周的工作时长和受教育水平。但是身为优秀的数据科学家,我们从文档中得知在XGBoost中对特征重要性的度量共有三个选项:

Weight:一个特征在所有决策树中被用来划分数据的次数。

Cover:一个特征在所有决策树中被用来划分数据的次数和每次划分涉及的样本个数得到的加权结果。

Gain:一个特征被用于划分数据时所带来的训练损失减益的平均值。

这些都是几乎在任何树模型的包里都能见到的典型重要性度量。Weight是默认选项,所以我们决定试一下另外两个选项,看结果是否有所差别。

用cover和gain作为选项来运行xgboost.plot_importatnce的结果

我们很惊讶地看到特征重要性的顺序较之前有很大不同。以cover为度量时,capital gain这一特征最能用于预测,而当用gain作为度量时,relationship status比其他特征都重要。在搞清哪一种度量最好之前,我们很难直接用这些度量来解释模型的重要性。

如何判断特征重要性的度量是好是坏?

比较不同特征归因方法(feature attribution method)的优劣并不容易。为了方便比较,我们定义如下两个指标:

一致性:如果我们对一个模型作出修改,使得它更依赖于某一个特征的话,那么由特征归因方法所得到的该特征的重要性(attributed importance)不应当降低。

准确性:所有特征重要性的和应等于模型的总重要性。例如,如果重要性是由R²值计算得到的,那么各个特征的R²值相加应等于模型的R²值。

如果某种特征归因方法不满足一致性,我们就很难用这种方法来比较两个模型。因为即便我们算得一个特征在一个模型的重要性更高,也不意味着这个模型更依赖于该特征。

而当一个方法不满足准确性时,我们不知道每个特征的重要性跟模型重要性间的关系是怎么样的。所以我们就不能对归因方法的结果直接归一化,因为归一化可能会打破一致性。

目前的归因方法是一致和准确的吗?

如上所述,一个归因方法应当满足一致性和准确性,当一个方法不满足一致性,我们不能保证具有最高归因的特征是实际上最重要的。下面我们来使用两个非常简单的树模型来检查归因方法的一致性:

基于两个特征的简单树模型,模型B中的咳嗽这一个特征显然比模型A中的更重要。

模型的输出是基于不同症状对生病的风险所做出的评分。当发烧和咳嗽两个症状同时出现时,模型A会给出一个非零的风险分数。模型B跟模型A类似,但在咳嗽症状出现时,模型B会在模型A的基础上加10分。为了检查一个归因方法是否满足一致性,我们要先定义“重要性”。在这里我们将用两种方法来定义重要性:1)当我们移除一组特征时,模型预期准确率(accuracy)的变化。 2)当我们移除一组特征时,模型预期输出(output)的变化。

第一个定义可以衡量特征对模型的全局影响,而第二个定义则是衡量特征对单一预测的局部影响。在A和B两个简单树模型中,无论从哪个定义出发,咳嗽特征在模型B中都更重要。

上文中提到的weight,cover和gain三种方法都是全局特征归因方法。但是对银行部署的模型来说,模型需要对每个客户的预测提供解释。为了验证不同方法是否满足一致性,我们在简单树模型上运行五种不同的特征归因方法:

1.Tree SHAP.我们提出的一种新颖的局部方法。

2.Saabas.一种启发式的局部方法。

3.mean(|Tree SHAP|).一种基于Tree SHAP的局部结果取均值的全局方法。

4.Gain.与上文中的XGBoost中的Gain方法相同。

5.Split count.与上文中XGBoost中的weight方法相同。

6.Permutation. 当随机扰动某个特征时,模型在测试集上的准确率的下降。

使用六种不同的方法对模型A和模型B进行特征归因。这六种方法是已知文献中所有针对树模型的特征归因方法。

但前述的方法都是不一致的,这是由于他们认为在模型B中咳嗽的重要性小于模型A。不一致的模型不能将影响最大的特征视为最重要的特征。细心的读者可能已经发现我们已经在前文中的经典特征归因方法中提出过不一致特征了。同时对于精确性来说,Tree SHAP、Sabaas和Gain三种方法是精确的而分裂计数和特征置换是不准确的。

令人惊讶的是,被广泛使用的基于gain的方法会引起如此多的不一致的结果。为了更好的理解其中的原因,让我们来看看gain是如何计算模型A和B的。让我们简单的假设25%的数据落到了每一个的叶子节点并被精确的标记(每个叶子1/4)。

如果将均方根误差作为损失函数,首先从模型A的1200开始计量。在第一次分裂的过程中,损失从1200降到了800,那么意味着gain利用fever特征贡献了400提升;进一步利用cough特征分裂得到了0的损失,意味着cough贡献了800的提升;在模型B中,Cough和Fever分别贡献了625和800的提升。如下图所示:

模型A和模型B的分数计算

通常情况下距离根比较近的节点拥有比靠近叶子节点更重要的特征。那么对于gain方法来说,它对于gain方法来说低层级靠近叶子节点的特征却贡献了更多的重要性。正是这种偏差导致了不一致性。随着树的加深,这样的偏差也在不断增长。但对于Tree SHAP方法来说,在数学上对不同层次的特征进行了平均。

模型解释

结合了坚实的理论和快速的算法实现让SHAP值成为了解释树形模型的有力工具。利用这种新方法,我们重新解释了上文中个性化银行模型中的特征。

基于SHAP的全局均值方法用于收入预测模型

我们可以看到关系是最重要的特征,其次是年龄特征。SHAP度量保证了一致使得我们的分析更加容易。接下来我们需要对每一个客户绘制响应的特征:

图中每个点代表一个客户,x坐标是特征的重要性,颜色代表特征的取值

上图中特征根据均值排列,从中我们可以看到关系特征在收入达到50k$上的预测十分强烈。同时我们可以从上图中看到局外点的影响。图中的的颜色同时还显示了年轻人一般收入较低、受教育程度会提高收入。

做了这么多,结果已经很棒了。但是我们还可以从中发现更多的信息。我们可以绘制出度量随特征的变化如下图所示:

y轴表示了年龄对于年收入超过50k$的影响程度。

从中可以清晰的看到XGBoost模型抽取的特征,及其相互影响。对于20多岁的年轻人来说,年龄对于他们的影响十分小甚至有副作用,这意味着其他特征影响着年龄的重要性。为了了解这种相互影响,我们将受教育年限作为带颜色的点绘制到了同一副图中。高等教育在20多岁的年纪里对于收入影响不大,但在30多岁时候却有着至关重要的影响。

上图中可以清楚的看出受教育程度和年龄的关系。同样我们还可以做出每周工作时间及其重要性的关系。

如果我们对于数据中的另一个变量工作时间进性相同的分析的话,我们会发现没有工作50小时是比较好的选择,而如果对对于已婚人士来说的话超出的工作时间并不能为他们带来更多的收入。

解读你的模型

我们大概浏览了一遍在构建和部署模型的时候如何思考和理解模型。我们可以通过SHAP值作为度量来分析并利用shape工具包来可视化分析结果。从而寻找出最重要的变量。如果你对XGBoost感兴趣,你还可以尝试下Apache的XGBoost和微软的LightGBM这两个工具包,相信会给你带来不错的结果。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4456

    浏览量

    90756
  • 决策树
    +关注

    关注

    2

    文章

    96

    浏览量

    13345

原文标题:从XGBoost算法开始,更好地理解和改进你的模型

文章出处:【微信号:thejiangmen,微信公众号:将门创投】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问磁珠的等效电路如何解释

    磁珠的等效电路如何解释?怎么解释
    发表于 10-16 19:39

    图书分享:卡尔曼滤波算法的几何解释

    网上搜到一篇关于卡尔曼滤波算法的论文,对低维卡尔曼滤波算法作了几何解释这种解释对卡尔曼滤波有一种直观的理解,使人们对卡尔曼滤波有更本质的认
    发表于 06-11 15:28

    算法心得( 高效算法的奥秘)--电子书下载

    书作者Guy Steele倾情推荐  算法的艺术和数学的智慧在本书中得到了体现,书中总结了大量高效、优雅和奇妙的算法,并从数学角度剖析了其背后的原理内容提要:  在本书中,作者给我们带来了一大批极为
    发表于 12-24 14:08

    何解释DCDC瞬态响应指标?

    何解释DCDC“瞬态响应”指标
    发表于 03-02 06:26

    如何快速高效的在自己的设备中加入国密算法

    如今国密系列算法的应用已不仅仅局限于金融和电信等领域,诸如车载设备,消费类电子设备等越来越多的产品开始要求有国密算法的支持。但是国密算法的开源资料和应用案例少之又少,如何快速高效的在自
    发表于 12-21 06:42

    如何快速掌握位运算这种高效的技巧

    如题,在嵌入式开发中,掌握位运算是节省开发时间和提高开发效率的一种高效方式。我们不得不去熟悉如何快速掌握位运算这种高效的技巧,接下来看看程序。. #include #include int main
    发表于 12-24 07:33

    何解TCL电视童锁及解锁方法

    何解TCL童锁及解锁方法 TCL解童锁方法
    发表于 10-09 13:00 99次下载
    如<b class='flag-5'>何解</b>TCL电视童锁及解锁<b class='flag-5'>方法</b>

    核仿射子空间最近点分类算法

    受支持向量机的几何解释和最近点问题启发,提出一种新型的模式分类算法——核仿射子空间最近点分类算法。该算法在核空间中,将支持向量机几何模型中的最近点搜索区域由2
    发表于 04-16 11:38 11次下载

    一种基于解释的知识库综合

    从知识库的解释出发,对概念和概念间关系的解释进行了分析,定义了知识库系统的最小概念集合,设计了生成最小概念集合的方法,提出了基于解释的知识库综合算法
    发表于 05-07 20:44 16次下载

    DSP28335—CMD文件中的各个段解释

    cmd中以下代码如何解释?请看本文
    发表于 12-26 17:26 18次下载

    PID控制最通俗的解释与PID参数的整定方法

    PID控制最通俗的解释与PID参数的整定方法
    发表于 01-04 14:47 40次下载

    人工智能算法的可解释方法研究

    以深度学习为代表的人工智能技术在信息领域的应用,极大地提高了信息的利用效率和挖掘价值,深刻的影响了各领域的业务形态,同时也引发了监管部门和用户对这一新技术运用中出现的 “算法黑箱”问题关切和疑虑。如何对相关算法、模型、及其给出的结果进行合理的
    发表于 07-15 17:28 1187次阅读

    何解释DCDC“瞬态响应”指标资料下载

    电子发烧友网为你提供如何解释DCDC“瞬态响应”指标资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-01 08:56 96次下载
    如<b class='flag-5'>何解释</b>DCDC“瞬态响应”指标资料下载

    使用LIME解释CNN

    呢?今天我们来LIME解释CNN。 图像与表格数据集有很大不同(显然)。如果你还记得,在之前我们讨论过的任何解释方法中,我们都是根据特征重要性,度量或可视化来解释模型的。比如特征“A”
    的头像 发表于 11-25 11:15 392次阅读

    使用LIME解释CNN

    我们来LIME解释CNN。图像与表格数据集有很大不同(显然)。如果你还记得,在之前我们讨论过的任何解释方法中,我们都是根据特征重要性,度量或可视化来解释模型的。比如
    的头像 发表于 11-30 15:45 368次阅读
    使用LIME<b class='flag-5'>解释</b>CNN