随机森林

随机森林是bagging的进化版
1.bagging算法流程

输入为样本集D={(x,y1),(x2,y2),…(xm,ym)},弱学习器算法, 弱分类器迭代次数T。
输出为最终的强分类器f(x)
1)对于t=1,2…,T:

  • a)对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集Dt
  • b)用采样集Dt训练第t个弱学习器Gt(x)

2)如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

2.随机森林对bagging思想的改进

首先,RF使用了CART决策树作为弱学习器。第二,在使用决策树的基础上,RF对决策树的建立做了改进,对于普通的决策树,我们会在节点上所有的n个样本特征中选择一个最优的特征来做决策树的左右子树划分,但是RF通过随机选择节点上的一部分样本特征,这个数字小于n,假设为m,然后在这些随机选择的m个样本特征中,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。   
m越小,则模型越健壮,当然此时对于训练集的拟合程度会变差,即m越小,模型方差越小,但偏差会增大,在实际案例中,一般会通过交叉验证调参获取一个合适的m值
RF算法如下:
输入为样本集D={(x,y1),(x2,y2),…(xm,ym)},弱分类器迭代次数T。
输出为最终的强分类器f(x)
1)对于t=1,2…,T:

  • a)对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集Dt
  • b)用采样集Dt训练第t个决策树模型Gt(x),在训练决策树模型的节点的时候, 在节点上所有的样本特征中选择一部分样本特征, 在这些随机选择的部分样本特征中选择一个最优的特征来做决策树的左右子树划分

2)如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
**注意:**不同的决策树,这m个特征不同,而对于同一棵决策树,它的全部节点应用的是同一个随机特征子集

3.袋外误差率
随机采样(bootsrap)就是从我们的训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能继续被采集到。对于我们的Bagging算法,一般会随机采集和训练集样本数m一样个数的样本。这样得到的采样集和训练集样本的个数相同,但是样本内容不同。如果我们对有m个样本训练集做T次的随机采样,,则由于随机性,T个采样集各不相同。

对于一个样本,它在某一次含m个样本的训练集的随机采样中,每次被采集到的概率是1/m。不被采集到的概率为1−1/m。如果m次采样都没有被采集中的概率是(1−1m)m。当m→∞时,(1−1/m)m→1/e≃0.368。也就是说,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采样集采集中。对于这部分大约36.8%的没有被采样到的数据,我们常常称之为袋外数据(Out Of Bag, 简称OOB)。这些数据没有参与训练集模型的拟合,因此可以用来检测模型的泛化能力。

随机森林林有一个重要的优点就是,没有必要对它进⾏交叉验证或者⽤一个独立的测试集来获得误差的一个无偏估计。它可以在内部进⾏评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。oob误分率是随机森林泛化误差的无偏估计,它的结果近似于需要大量计算的k折交叉验证。

袋外错误率(oob error)计算⽅式如下:
1)对每个样本计算它作为oob样本的树对它的分类情况
2)以简单多数投票作为该样本的分类结果
3)最后⽤误分个数占样本总数的⽐率作为随机森林的oob误分率

4.随机采样和完全分裂

  • ⾸先是两个随机采样的过程,random forest对输⼊的数据要进⾏⾏、列的采样。对于⾏采样,采
    ⽤有放回的⽅式,也就是在采样得到的样本集合中,可能有重复的样本。假设输⼊样本为N个,那么采样的样本也为N个。这样使得在训练的时候,每⼀棵树的输⼊样本都不是全部的样本,使得相对不容易出现over-fitting。然后进⾏列采样,从M个feature中,选择m个(m << M)。
  • 对采样之后的数据使⽤完全分裂的⽅式建⽴出决策树,这样决策树的某⼀个叶⼦节点要么是⽆法继续分裂的,要么⾥⾯的所有样本的都是指向的同⼀个分类。⼀般很多的决策树算法都⼀个重要的步骤 - 剪枝,但是这⾥不这样⼲,由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现over-fitting。

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

为什么要有放回地抽样?
如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是“有偏的”,也就是说每棵树训练出来都是有很大的差异的,而随机森林最后分类结果取决于多棵树的投票表决,这种表决应该是“求同”,因此使用完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的,这无异于盲人摸象。

5.使用随机森林做特征选择

特征好坏衡量

  • 对每一颗决策树,选择相应的袋外数据(out of bag,OOB)​计算袋外数据误差,记为errOOB1.
    (所谓袋外数据是指,每次建立决策树时,通过重复抽样得到一个数据用于训练​决策树,这时还有大约1/3的数据没有被利用,没有参与决策树的建立。这部分数据可以用于对决策树的性能进行评估,计算模型的预测错误率,称为袋外数据误差。)
  • 随机对袋外数据OOB所有样本的特征X加入噪声干扰(可以随机改变样本在特征X处的值),再次计算袋外数据误差,记为errOOB2。
  • ​假设森林中有N棵树,则特征X的重要性=∑(errOOB2-errOOB1)/N。这个数值之所以能够说明特征的重要性是因为,如果加入随机噪声后,袋外数据准确率大幅度下降(即errOOB2上升),说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。

特征选择
在特征重要性的基础上,特征选择的步骤如下:

  • 计算每个特征的重要性,并按降序排序
  • 确定要剔除的比例,依据特征重要性剔除相应比例的特征,得到一个新的特征集
  • 用新的特征集重复上述过程,直到剩下m个特征(m为提前设定的值)
  • 根据上述过程中得到的各个特征集和特征集对应的袋外误差率,选择袋外误差率最低的特征集

你可能感兴趣的:(机器学习笔记)