机器学习利器——决策树和随机森林

更多深度文章,请关注:https://yq.aliyun.com/cloud



决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。决策树是一种基本的分类和回归方法,学习通常包含三个步骤:特征选择、决策树的生成和决策树的剪枝。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。分类树(决策树)是一种十分常用的分类方法。数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来做预测。

一个简单的决策树分类模型:红色框出的是特征。

在机器学习中,随机森林是一个包含多个决策树分类器,并且其输出的类别是由个别树输出的类别的众数而定。Leo Breiman和Adele
Cutler发展出推论出随机森林的算法。随机森林在过去几年一直是新兴的机器学习技术。它是基于非线性的决策树模型,通常能够提供准确的结果。然而,随机森林大多是黑盒子,经常难以解读和充分理解。在这篇博客中,我们将深入介绍随机森林的基本原理,以更好地了解它们。我们首先看看决策树和随机森林的构建块。这项工作是由Ando Saabas(https://github.com/andosa/treeinterpreter)完成。可以在我的GitHub上找到在这个博客中所需的代码。

决策树如何工作?

决策树以迭代地方式将数据分解成不同的子集来工作:对于回归树,选择它们来最小化所有子集中的MSE(均方误差)或MAE(平均绝对误差)是个不错的选择;对于分类树,选择分解数据以便最小化所得到的子集中的熵或基尼杂质。所得到的分类器将特征空间分成不同的子集。根据观察到的子集进行观察的预测:

图为:决策树的迭代

决策树的贡献值

鲍鱼数据集为例。我们将尝试基于贝壳重量,长度,直径等变量来预测其头数。为了说明的目的,我们拟合一个浅层决策树。我们通过将树的最大深度限制为3级来实现。

图为:用于预测环数的决策树路径

为了预测鲍鱼的头数,决策树将沿着树向下移动,直到达到叶。每个步骤将当前子集分成两部分。对于特定的分割,确定分割的变量的贡献值(contributions)被定义为平均数量的变化。

例如,如果我们拿一个贝壳重量为0.02和长度为0.220的鲍鱼,它将落在最左边的叶子中,预计的头数为4.4731。

壳重的贡献值(contributions)结果是:

(7.587 - 9.958) + (5.701 - 7.587) = -4.257

长度的贡献值(contributions)结果:

(4.473 - 5.701) = -1.228

这些贡献值(contributions)结果意味着特定的壳体重量和长度值可以预测其鲍鱼的头数。

我们可以通过运行以下代码获得这些贡献值(contributions)结果。

from treeinterpreter import treeinterpreter as ti
dt_reg_pred, dt_reg_bias, dt_reg_contrib = ti.predict(dt_reg, X_test)

该变量dt_reg是sklearn分类器对象,X_test是一个Pandas DataFrame或numpy数组,其中包含我们希望得出预测和贡献值的特征。dt_reg_contrib是具有(n_obs,n_features)的2d numpy数组,其中n_obs是观察n_features次数。

我们可以为给定的鲍鱼绘制这些影响元素,以查看哪些特征最能影响其预测头数。从下图可以看出,这个特定的贝壳的体重和长度值对预测的头数有很大的影响。

图为:例子的贡献值图(决策树)

我们可以通过使用小提琴图比较特征对鲍鱼头数预测的影响。这将内核密度估计覆盖到图上。在下图中,我们看到鲍鱼的体重对其头数的影响最大。实际上,壳重量值给它带来了更大的影响。

图为:小提琴贡献值图(决策树)

上述情节虽然有洞察力,但仍不能充分了解具体变量如何影响鲍鱼的头数。相反,我们可以绘制给定特征对其值的影响程度。如果我们绘制壳重量与其影响程度的关系,我们可以获得增加壳重量会增加影响程度的见解。

图为:贡献值与壳重的关系(决策树)

我们可以看到,减轻壳重量与影响程度具有非线性,非单调关系。

扩展到随机森林

确定特征贡献的过程当然可以通过对森林中所有树木的变量进行平均贡献来扩展到随机森林。

图为:小提琴贡献值图(随机森林)

因为随机森林本身是随机的,所以在给定的壳体重量上有贡献的变化。然而,平滑的黑色趋势线显示出增长趋势。与决策树一样,我们看到增加的壳体重量对应于更高的贡献值。

图为:贡献值与壳重的关系(随机森林)

再次,我们可能会看到复杂的,非单调的趋势。直径似乎在约0.45的贡献下降,在0.3和0.6附近的贡献峰值。除此之外,直径和环数之间似乎有越来越大的关系。

图为:贡献值与直径的关系(随机森林)

分类

我们已经表明,回归树的特征贡献值来源于它在连续分裂中的变化。我们可以将其扩展到二项式和多项式中分类,而不是看每个子集中某个类的观察的百分比。特征的贡献值是观察从该特征引起的百分比的总体变化。

这个例子更容易解释。假设我们试图预测性别,即鲍鱼是公还是母,婴幼儿还是成年?

图为:多项式分类的决策树路径

每个节点具有3个值,子集中的雌雄,雄和婴幼儿的百分比。内脏重量为0.1和壳重量为0.1的鲍鱼最终落在最左侧的叶中(概率为0.082,0.171和0.747)。

内脏重量对婴儿鲍鱼的贡献值是:

(0.59 - 0.315) = 0.275

壳重量的贡献值是:

(0.747 - 0.59) = 0.157

我们可以为每个贡献值类绘制一个贡献图。以下是我们为婴儿类分析的结果。

图为:观察的婴儿小提琴的贡献值图(多类决策树)

和以前一样,我们还可以绘制每个特征类的贡献。随着壳重量的增加,鲍鱼是母的几率就增加,而作为婴儿的几率则下降。对于公的,当壳重超过0.5时,几率最初增加,然后减小。

图为:每个特征类的贡献值与壳体重量(随机森林)

总结:

我们可以在这篇博客中看到,通过查看路径,我们可以更深入地了解决策树和随机森林。这是特别有用的,因为随机森林是一个非常难理解的结构,通常是高性能的机器学习模型。为了满足业务需求,我们不仅需要提供高预测性的模型,而且也是一个可以解释的模型。也就是说,我们不想提供一个黑盒子。这个要求其实很重要,因为我们的模型可以合规性的传递下去,让更多的人使用。

本文由北邮@爱可可-爱生活老师推荐,@阿里云组织翻译。

文章原标题《interpreting-decision-trees-and-random-forests

作者:Greg Tam Pivotal工程师  博客地址: http://engineering.pivotal.io/authors/gtam/

译者:袁虎 审阅:

文章为简译,更为详细的内容,请查看原文

时间: 2024-09-13 22:39:39

机器学习利器——决策树和随机森林的相关文章

干货|从决策树到随机森林:树型算法的实现原理与Python 示例

基于树(Tree based)的学习算法在数据科学竞赛中是相当常见的.这些算法给预测模型赋予了准确性.稳定性以及易解释性.和线性模型不同,它们对非线性关系也能进行很好的映射.常见的基于树的模型有:决策树.随机森林和提升树. 在本篇文章中,我们将会介绍决策树的数学细节(以及各种 Python 示例)及其优缺点.你们将会发现它们很简单,并且这些内容有助于理解.然而,与最好的监督学习方法相比,它们通常是没有竞争力的.为了克服决策树的各种缺点,我们将会聚焦于各种概念(附有 Python 实例),比如自助

R语言 决策树和随机森林 回归分析

[R语言进行数据挖掘]决策树和随机森林 1.使用包party建立决策树 这一节学习使用包party里面的函数ctree()为数据集iris建立一个决策树.属性Sepal.Length(萼片长度). Sepal.Width(萼片宽度).Petal.Length(花瓣长度)以及Petal.Width(花瓣宽度)被用来预测鸢尾花的 Species(种类).在这个包里面,函数ctree()建立了一个决策树,predict()预测另外一个数据集. 在建立模型之前,iris(鸢尾花)数据集被分为两个子集:训

从决策树到随机森林:树型算法的原理与实现

在本篇文章中,我们将会介绍决策树的数学细节(以及各种 Python 示例)及其优缺点.你们将会发现它们是很简单的,并且这些内容是有助于理解的.然而,与最好的监督学习方法相比,它们通常是没有竞争力的.为了克服决策树的各种缺点,我们将会聚焦于各种概念(附有 Python 实例),比如自助聚集或袋装(Bootstrap Aggregating or Bagging),还有随机森林(Random Forests).另一种广泛使用的提升方法会在以后进行单独讨论.每种方法都包括生成多种树,这些树被联合起来,

随机森林:猜糖豆游戏揭示的机器学习算法

还记得那款老的嘉年华游戏吗,大家一起猜测一个罐子里糖豆的数量?虽然准确猜出糖豆的数量需要一点运气和技巧的组合,事实证明,通过平均所有人的各种各样的猜测,平均结果出奇地接近正确答案. 这是一个被称为"众人的智慧(the wisdom of the crowd)"的典型例子,也是机器学习常用的建模策略之一. 前提条件还是有的:你要有数量足够多的不同的数据,每一个数据都在某些程度上包含所需信号,但数据之间没有任何其他维度的相关性(这样数据的误差往往对称分布在真实结果周围),当然还需要一种合适

随机森林 VS 梯度提升机——模型融合之我见

更多深度文章,请关注:https://yq.aliyun.com/cloud 博主信息:Xavier Amatriain, 前机器学习领域研究员,如今就职于Quora. 随机森林相比于梯度提升决策树,主要有以下两个优点: 随机森林比梯度提升机更容易训练 随机森林比梯度提升机更难过拟合 对于第一点来说,随机森林通常只需要设置一个超参数即可:每个节点上随机选取的特征数量.在大多数情况下,将该参数设置为特征总数的平方根,模型足以取得不错的效果.而梯度提升机的超参数则包括提升树的数量和深度.学习率等等.

独家 | 手把手教随机森林

随机森林-概述   当变量的数量非常庞大时,你将采取什么方法来处理数据?   通常情况下,当问题非常庞杂时,我们需要一群专家而不是一个专家来解决问题.例如Linux,它是一个非常复杂的系统,因此需要成百上千的专家来搭建.   以此类推,我们能否将许多专家的决策力,并结合其在专业领域的专业知识,应用于数据科学呢?现在有一种称为"随机森林"的技术,它就是使用集体决策来改善单一决策产生的随机结果.在这种方法中,每个软件"专家"使用树型算法来完成它们的任务,然后使用这样的树

机器学习中的算法(1)-决策树模型组合之随机森林与GBDT

机器学习中的算法(1)-决策树模型组合之随机森林与GBDT. 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 模型组合(比如说有Boosting,Bagging等)与决策树相关的算法比较多,这些算法最终的结果是生成N(可能会有几百棵以上)棵树,这样可以大大的减少单决策树带来的毛病,

机器学习——随机森林算法及原理

1. 随机森林使用背景 1.1 随机森林定义 随机森林是一种比较新的机器学习模型.经典的机器学习模型是神经网络,有半个多世纪的历史了.神经网络预测精确,但是计算量很大.上世纪八十年代Breiman等人发明分类树的算法(Breiman et al. 1984),通过反复二分数据进行分类或回归,计算量大大降低.2001年Breiman把分类树组合成随机森林(Breiman 2001a),即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果.随机森林在运算量没有显著提

决策树模型组合之(在线)随机森林与GBDT

前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时, 单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 模型组合(比如说有Boosting,Bagging等)与决策树相关的算法比较多,这些算法最终的结果是生成N(可能会有几百棵以上)棵树,这样可以大 大的减少单决策树带来的毛病,有点类似于三个臭皮匠等于一个诸葛亮的做法,虽然这几