机器学习——随机森林

时间:2024-03-23 15:28:29

以下内容均为个人理解,如有错误,欢迎指出


什么是随机森林

以下内容摘自周志华老师的《机器学习》

随机森林是Bagging的一个扩展变体,它在以决策树为基学习器构建的Bagging集成的基础上,进一步在决策树的训练过程中引入随机属性的选择


什么是Bagging

Bagging是集成学习中的一种算法,其将并行训练多个基学习器,对于一个测试样本,将其输入到训练好的多个基学习器,获得多个输出,对于分类任务,常采用简单的投票法,对回归任务使用简单的平均法,Bagging侧重于降低方差,其偏差与基学习器基本相同,因此,我们常采用强基学习器,关于这点简单的理论推导,可以查看我之前的文章机器学习——XGBoost

可以看到随机森林其实非常简单,本文将侧重总结随机森林的某些细节,并不会对决策树等进行介绍,决策树请查看我之前的文章机器学习——决策树(ID3、C4.5、CART)


如何生成随机森林基学习器的训练数据集

首先肯定不能所有的基学习器都使用相同的训练集,对于Bagging来说,这意味着每个决策树都是一样的,集成学习的结果等于单个决策树的输出,这是没有意义的,若每个决策树使用完全不同的训练数据,由之前的博客分析我们知道,Bagging的基学习器必须是强学习器,深度足够的决策树可以很好拟合训练数据,数据越多,决策树也就越强,顺带一提,作为Bagging基学习器的决策树一般不需要减枝,如果我们对训练数据进行平分,每个基学习器的训练数据可能很少,导致基学习器的强度不够,因此,我们采用了一种折中的做法,如下:

每个基学习器的训练数据集(采样集)都是从初使训练数据集中有放回的进行抽样,即先从初使训练数据集中抽出一个样本放入某个基学习器的采样集,接着放回,在接着抽样,假设有m个基学习器,通过上述操作,我们将获得m个采样集,初使训练集的某些样本在m个采样集中多次出现,有的从未出现,采样集的大小由自己确定,随机森林作为Bagging的一种扩展变体,也继承了这种做法


"随机"的含义

与决策树不同,随机森林的决策树每次分裂前,都会从n个特征中随机抽取m个特征(m<n),从这m个特征中选择一个作为分裂特征,这一措施使得随机森林能更加显著的降低方差,由之前的博客可知Bagging的方差为(11m)δ2ρ+δ2m(1-\frac{1}{m})\delta^2\rho+\frac{\delta^2}{m}
其中,δ2\delta^2表示基学习器的方差,ρ\rho为两两基学习器的相关系数,Bagging通过增加基学习器的个数降低方差,而随机森林通过上述随机策略,降低了两两基学习器的相关系数,从而使方差下降更加明显,在ESL中,给出了随机选择的特征个数m与两两基学习器的相关系数之间的关系,如下图:
机器学习——随机森林
可见m越小,树与树之间的相关系数越小


Bagging集成学习的评测方法

这同时也是随机森林的评测方法。
对于一颗树,不在它训练集中的初始训练集样本称为oob样本,对于每个样本
(1)对每个样本,计算它作为oob样本的树对它的分类情况;
(2)然后以简单多数投票作为该样本的分类结果;
(3)最后用误分个数占样本总数的比率作为Bagging的oob误分率;


随机森林的参数

以下是个人理解的参数,仅做参考

  1. 决策树的个数,这个当然是越多越好
  2. 决策树停止分裂的条件,对于Bagging、随机森林来说,决策树要足够深
  3. 采样集的大小
  4. 随机抽样的样本个数m,在ESL一书中,给出的建议如下:
    机器学习——随机森林
    当然也需要根据实际情况进行调参,上图也给出了决策树停止分裂的条件(node size即叶子节点的大小)