专栏首页CSDN技术头条使用scikit-learn解释随机森林算法

使用scikit-learn解释随机森林算法

在以前的一篇博文里,我讨论过如何将随机森林算法转化为一个“白盒”,这样每次预测就能被分解为各项特征的贡献和,即

我多次想找相关的代码。然而,绝大多数的随机森林算法库(包括scikit-learn)不暴露预测过程的树路径(tree paths)。sklearn的实现方法需要一个额外补丁来暴露。庆幸的是,scikit-learn自0.17版起在API中添加了两项功能,使得这个过程相对而言比较容易理解:获取用于预测的所有叶子节点的ID,并存储所有决策树的所有节点的中间值,而不仅仅只存叶子节点的。结合这两步,就可以获取每次独立预测的预测路径,同时根据查看路径来分解预测过程。

代码已经放在github上了,也可以用 pip install treeinterpreter进行安装。

注意:需要用到仍在开发中的scikit-learn 0.17,你在下面的链接中能找到安装方法http://scikit-learn.org/stable/install.html#install-bleeding-edge。

用treeinterpreter分解随机森林预测

我们选一个简单的数据集,训练一个随机森林模型,并用测试集进行预测,然后分解预测过程。

我们随机挑选两个预测价格不相同的样本。

随机森林模型对它们的预测结果迥然不同。这是为什么呢?我们接下来就把预测结果分为偏置项(也就是训练集的平均结果)和单个特征贡献值,以便于观察究竟哪些特征项造成了差异,差异程度有多大。

我们直接调用tree interpreter的predict方法,向其传入模型和数据作为参数。

打印出这些结果:

特征贡献值按照其绝对值从大到小排序。我们观察到第一个样本的预测结果较高,正贡献值主要来自RM、LSTAT和PTRATIO特征。第二个样本的预测值则低得多,因为RM特征实际上有很大的负面影响,它不会被其它特征的正面影响所抵消,因此使得预测值要低于数据集的平均水平。

分解的结果真的对吗?很容易检验:偏置和特征贡献值相加应该等于预测值:

注意,在把贡献值相加时,我们需要对浮点数进行处理,所以经过四舍五入处理后的值可能略有不同。

比较两个数据集

这个方法的用武之地之一就是比较两个数据集。例如:

  • 理解造成两个数据集预测值差异的真正原因,比如是什么因素导致相邻两幢房屋的预测价值差异。
  • 调试模型和数据,例如解释为什么新数据的平均预测值和旧数据的不一样。

还是上面这个例子,我们把房价数据的测试集再一分为二,分别计算它们的平均预测价值。

我们发现两个数据集的平均预测价值完全不同。现在我们就能细分导致差异的因素:究竟哪些特征项造成了差异,差异程度有多大。

我们再来计算每一维特征的平均贡献程度。

由于两个数据集的偏置项都一样(因为模型的训练集都一样),平均预测价值的差异只能来自于特征的贡献值。换句话说,特征贡献差异的总和应该与平均预测的差异相等,我们很容易验证。

最后,我们把每一维特征贡献的差异之和显示出来,正好就是平均预测值的差异。

分类树和森林

同样的方法也能用于分类树,查看特征对某个类别的预测概率值的影响力。

我们在iris数据集上做演示。

拆分每一维特征的贡献值:

我们看到对第二类预测能力最强的特征是花瓣长度和宽度,它们极大提高了预测的概率值。

总结

让随机森林算法的预测结果具有解释性也很容易,几乎达到了线性模型的解释能力。有了treeinterpreter,这个步骤只需几行代码就能搞定。

本文分享自微信公众号 - CSDN技术头条(CSDN_Tech)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-10-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 空谈无益,草根需要真正的大数据思维

    【编者按】很多人都在谈论大数据,不谈大数据好像跟不上时代,但是很多人没有任何实践就开始抛出一个结论,然后又有一大群人开始追随这个结论。大数据不是任何人都能去做的...

    CSDN技术头条
  • 饿了么推荐系统:从0到1

    随着移动互联网的发展,用户使用习惯日趋碎片化,如何让用户在有限的访问时间里找到想要的产品,成为了搜索/推荐系统演进的重要职责。作为外卖领域的独角兽, 饿了么拥有...

    CSDN技术头条
  • 【BDTC2016】科大讯飞大数据研究院副院长谭昶:讯飞大数据的实践与思考

    2016中国大数据技术大会首日全体会议中,上午最后一位演讲嘉宾来自科大讯飞大数据研究院副院长谭昶,他带来了《讯飞大数据的实践与思考》的主题分享。他从语言谈起,分...

    CSDN技术头条
  • 【ML】一文详尽系列之模型评估指标

    在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标,针对不同机器学习问题如回归、分类、排序,其评估指标也会不同。

    yuquanle
  • WebDriver自动化项目设计模式快速入门-自动化测试系列笔记

    朵拉小序:Page Object,即”页面对象“,就是将单个页面作为一个对象来处理。 以面向对象的方式来处理页面和业务流程的好处在于,如果某个页面元素的属性有了...

    企鹅号小编
  • 09 . Prometheus监控tomcat+jvm

    https://www.cnblogs.com/you-men/p/12839535.html

    常见_youmen
  • selenium获取缓存数据

    小小咸鱼YwY
  • 绘图系列(3):绘制密度图

    在进行数据可视化的时候,通常可以通过散点图比较直观的查看数据的分布情况。但是当数据量大且分布比较集中的时候就没那么容易确定数据的分布了,这时候可以通过绘制密度或...

    bugsuse
  • docker构建自定义镜像

    要构建一个镜像,第一步准备所需要的文件,第二步编写Dockerfile文件,比如我现在构建一个java web镜像

    用户2409797
  • 使用pyh生成HTML文档

    最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它。 在使...

    Masimaro

扫码关注云+社区

领取腾讯云代金券