【5】集成学习之随机森林

1.前言

本文参考视频:https://www.youtube.com/watch?v=J4Wdy0Wc_xQ
视频很好,这一个还有中文翻译。该系列其他视频都没有,强烈推荐大家去看一看。不过缺点是没有数学支撑。但是通俗易懂啊。
同时,本文还参考了周志华的《机器学习》

有时候单一的模型可能效果不够好,或者我们想把多个效果还不错的模型结合起来,看看能不能获得更好的效果,于是,就诞生了集成学习。集成学习就是基于多个模型来提高整体的效果,具体根据集成的方法不同大致分为三类:

  • boost
  • bagging
  • 随机森林(但是随机森林只是bagging的一个扩展变体,本质上还是bagging)

其中,bagging和随机森林属于一个大类:子模型之间不存在强关联性,可同时生成的并行化方法。而boost属于子模型之间存在强依赖关系,必须串行生成的序列化方法。

不论是上面的哪几个大类或者小类,他们的子模型(或者说个体学习器)都是基于决策树的。原因:

实验证明,决策树模型在集成之后效果最好,其他的模型也可以集成,但是效果并没有决策树的好

所以,你需要先了解决策树算法。

集成学习是非常强大的,各种机器学习比赛基本上都会有很多人使用它,尤其是其中的boost,各种boost:xgboost,catboost,lgbm。但是这些乍一看可能比较难看懂,所以还是先建议学习决策树,随机森林,然后去学习bagging和boost的基本原理。之后学习各种boost。当然,如果只是要用的话,还是比较简单的,几行代码就可以使用了。

2.随机森林

2.1 为什么会有随机森林

决策树很容易建立,容易使用,容易解释,但是在实际中效果可能并不好。

在这里插入图片描述树的不确定性让他们无法成为理想的预测工具,换句话说,他们可以很好的对训练数据进行分类,但是,到了新的数据时,效果就很一般。一部分原因是决策树不够灵活。而随机森林把决策树的简洁性和森林的灵活性结合起来,得到了很好的提升。(暂时这样理解吧)

2.2 建立一个随机森林

step1:创建一个引导(bootstrapped)数据集

在这里插入图片描述
这是我们要使用的数据集。
为了建立引导数据集,我们对原始数据集进行有放回的取样,直到引导数据集样本数和原始数据集一样,之里面必然会有重复的样本。
下面是我们取样后的引导数据集:
在这里插入图片描述

step2:使用引导数据集建立决策树

传统的决策树会在这个数据集上进行各种增益或者基尼指数的计算,来计算处以哪一个属性作为根节点的划分属性最好。但是,随机森林里的决策树不是这样,而是随机选取若干个(具体选几个最好后面再说)属性,在这里面选出最好的作为最优化分属性。

比如,我们在上面的引导数据集里选择这两个属性:
在这里插入图片描述
并且,我们假设其中的Good Blood Circ是最优的划分属性,之后,在下面的结点上,再从剩下的三个属性中随机选择若干个(此处还是2个)作为待选属性:
在这里插入图片描述
之后,不断重复,每次都是只选择若干个(此处一直是2个)属性,从中选择最优的。
最后,我们就建立了一棵树:
在这里插入图片描述
这棵树的建立是我们基于:

  • 随机选择的引导数据集
  • 每次随机选择的若干个属性,并从中选择最优的作为划分属性

这两个准则建立起来的。

step3:重复

然后,我们不断重复整个过程,建立引导数据集,建立树,最后会得到很多树:
在这里插入图片描述
你可以重复上百次,最后建立起来的树都不相同(当然,你要真在上面这个这么小的数据集上做上百次,也是有可能出现重复的)。这种多样性使得随机森林比单独一颗决策树更加有效。

2.3 怎么使用一个随机森林

我们在上面已经建立好了随机森林,但是,要怎么使用它呢?
假设我们来了一个新病人,其中属性我们都知道了,该怎么预测他有没有心脏病呢:
在这里插入图片描述
我们把数据放到第一棵树来跑:
在这里插入图片描述
然后,第一棵树会告诉我们一个结果。现在,他告诉我们的是Yes:
在这里插入图片描述
之后,我们不断重复在剩下的树里进行测试,并且统计yes和no的数目,结果如下:
在这里插入图片描述
这样,我们就可以认为该病人有心脏病了。

这就是很简单的投票表决。

上面的这种建立引导数据集的做法也叫做bagging。(随机森林本身就是bagging的一个扩展变体)随机森林比bagging多个一个随机选择属性。

3.评估随机森林

我们建立完,也知道如何测试了。那么,怎么直到一个随机森林的性能呢。

首先,从建立先导数据集开始,一般而言,原始数据集中的1/3不会出现在任何引导数据集中。这是一个简单的求极限的问题。那些不在引导数据集中的数据成为袋外数据(out-of-bag dataset)

我们把袋外数据在每一刻决策树上跑一遍,然后,进行投票决策。没有被正确分类的袋外数据所占的比例就是袋外错误

4.怎么确定选择属性的个数

之前,我们在引导数据集上建立决策树的时候,每次划分节点时随机选取若干个属性,从中选择最优的。但是,这个若干到底是几才最好呢。
之前我们选择两个属性每次,然后我们知道了选择两个时的错误率。然后,我们改变选择个数,计算一下错误率。多次重复,选择错误率最低的一个就行了
在这里插入图片描述
通常,我们会第一次使用变量个数的平方根,之后尝试这个数的上下一定范围的数。这样,就结束了。

5.Warning of Math

由于时间原因,先不写了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值