随机森林

其实从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想。

特点:

  • 在当前所有算法中,具有极好的准确率
  • 能够有效地运行在大数据集上
  • 能够处理具有高维特征的输入样本,而且不需要降维
  • 能够评估各个特征在分类问题上的重要性
  • 在生成过程中,能够获取到内部生成误差的一种无偏估计
  • 对于缺省值问题也能够获得很好得结果

1、构建一棵树

每棵树的按照如下规则生成:
在这图片描述
1)如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本(这种采样方式称为bootstrap sample方法),作为该树的训练集;

从这里我们可以知道:每棵树的训练集都是不同的,而且里面包含重复的训练样本(理解这点很重要)。

为什么要随机抽样训练集?(add @2016.05.28)

如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的,这样的话完全没有bagging的必要;

为什么要有放回地抽样?(add @2016.05.28)

我理解的是这样的:如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是"有偏的",都是绝对"片面的"(当然这样说可能不对),也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决,这种表决应该是"求同",因此使用完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的,这样无异于是"盲人摸象"。

2)每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;

3)每棵树都尽最大程度的生长,并且没有剪枝过程。(便于计算每个特征的重要程度,剪枝的话将无法进行计算)

一开始我们提到的随机森林中的“随机”就是指的这里的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)。

随机森林真正厉害的地方不在于它通过多棵树进行综合得出最终结果,而是在于通过迭代使得森林中的树不断变得优秀(森林中的树选用更好的特征进行分枝)。上面的一个森林相当于第一次迭代得到的森林。那么随机森林是怎么往后迭代的呢?

2、随机森林的迭代(挑选特征)

随机森林的思想是构建出优秀的树,优秀的树需要优秀的特征。那我们需要知道各个特征的重要程度。

对于每一棵树都有m个特征,要知道某个特征在这个树中是否起到了作用,可以随机改变这个特征的值,使得“这棵树中有没有这个特征都无所谓”,之后比较改变前后的测试集误差率,误差率的差距作为该特征在该树中的重要程度,测试集即为该树抽取2N/3个样本之后剩余的样本(袋外样本)(由袋外样本做测试集造成的误差称为袋外误差)。

在一棵树中对于m个特征都计算一次,就可以算出m个特征在该树中的重要程度。我们可以计算出所有树中的特征在各自树中的重要程度。但这只能代表这些特征在树中的重要程度不能代表特征在整个森林中的重要程度。那我们怎么计算各特征在森林中的重要程度呢?每个特征在多棵数中出现,取这个特征值在多棵树中的重要程度的均值即为该特征在森林中的重要程度。如下式:
在这里插入图片描述
其中ntree表示特征Ai在森林中出现的次数。errOOB_t1表示第t棵树中Ai属性值改变之后的袋外误差,errOOB_t2表示第t棵树中正常Ai值的袋外误差。可以用下图来表示:
在这里插入图片描述
这样就得到了所有特征在森林中的重要程度。将所有的特征按照重要程度排序,去除森林中重要程度低的部分特征,得到新的特征集。这时相当于我们回到了原点,这算是真正意义上完成了一次迭代。

随机森林分类效果(错误率)与两个因素有关:
  • 森林中任意两棵树的相关性:相关性越大,错误率越大;
  • 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。

减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。

3、最优的森林

照上面的步骤迭代多次,逐步去除相对较差的特征,每次都会生成新的森林,直到剩余的特征数为m为止。最后再从所有迭代的森林中选出最好的森林。迭代的过程如下图所示:
在这里插入图片描述
得到了每次迭代出的森林之后,我们需要选择出最优秀的森林(随机森林毕竟是集成学习,所以最后的森林不一定是最优的,一个诸葛亮不一定顶的上三个臭皮匠)。那么我们怎么比较这些森林的好坏呢?这时我们需要引入OOB一个指标来评价一个森林的好坏,

  • 上面的OOB用于评价套外样本在树中的误差率
  • 这里的OOB评价套外样本在森林中的误差率。(因为都是利用套外样本,所以名字都是(out-of-bag))

预测出所有所有样本的结果之后与真实值进行比较,就可以得到这个森林的套外误差率。

选择套外误差率最小的森林作为最终的随机森林模型

转载1:https://blog.csdn.net/qq_34106574/article/details/82016442
转载2:https://blog.csdn.net/cg896406166/article/details/83796557

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值