接下来会介绍一些基于决策树的具有代表性的集成模型,如随机森林(RF),GBDT,XGBoost以及lightGBM。
本章主要介绍随机森林(Random Forest,简写RF)
,RF是bagging
集成模型的扩展变体,所以前面会简要介绍一些关于bagging的内容,后面会有专门的 “集成学习” 的章节来重点介绍bagging相关内容。
决策树
与随机森林都属于机器学习中监督学习的范畴,主要用于分类问题。
决策树算法有这几种:ID3、C4.5、CART等,基于决策树的算法有bagging、随机森林、GBDT等。
决策树
是一种利用树形结构进行决策的算法,对于样本数据根据已知条件或叫特征进行分叉,最终建立一棵树,树的叶子结节标识最终决策。新来的数据便可以根据这棵树进行判断。随机森林是一种通过多棵决策树进行优化决策的算法
。
根据个体学习器之间的依赖关系,集成学习方法大致可分为两大类:
- 个体学习器之间存在强依赖关系,必须
串行
生成的序列化方法:代表是Boosting
- 个体学习器间不存在强依赖关系,可同时生成的
并行
化方法:代表是Bagging和“随机森林”(Random Forest)
bagging
是并行式集成学习
方法的著名代表。
bagging希望集成中的个体学习器尽可能 相互独立,而这在现实任务中几乎无法做到,更简单方便的实现是 使基学习器具有较大差异
,或者说使得基学习器更具有 “多样性
” 。
bagging基学习器的多样性通过“样本扰动
”达到,而这是通过自主采样法(bootstrap sampling)
实现
bootstrap sampling:
- 给定包含 m m m 个样本的数据集 D D D,每次随机、有放回的挑选一个样本,执行 m m m 次,最后得到一个包含 m m m 个样本的数据集 D D D。一个样本在 m m m 次采样中始终不被抽取到的概率是 ( 1 − 1 m ) m ≈ 0.368 (1 − \frac{1}{m} )^m ≈0.368 (1−m1)m≈0.368,
l i m m → ∞ ( 1 − 1 m ) m → 1 e ≈ 0.368 lim_{m\rightarrow \infty }(1-\frac{1}{m})^{m}\rightarrow \frac{1}{e}\approx 0.368 limm→∞(1−m1)m→e1≈0.368
即初始训练集中有63.2%
的样本会出现在采样集中。
bagging对分类任务使用简单投票法
,对回归任务使用简单平均法
。
从偏差-方差分解角度看,bagging主要关注降低方差
。
随机森林即由多个决策树组成,每个决策树并不相同
,在构建决策树时,我们从训练数据中有放回的随机选取一部分样本
,并且也不会使用数据的全部特征,而是随机选取部分特征
进行训练。每棵树使用的样本和特征都不相同,训练出的结果也不相同。
这么做的原因:为开始训练前,无法知道哪部分数据存在异常样本,也无法知道哪些特征最能决定分类结果,随机过程降低了两个影响因素对于分类结果的影响。
随机森林由Leo Breiman(2001)提出的一种分类算法,它通过自助法(bootstrap)重采样技术,从原始训练样本集 N N N 中有放回地重复随机抽取 n n n 个样本生成新的训练样本集合训练决策树,然后按以上步骤生成 m m m 棵决策树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于独立抽取的样本。
单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样本可以通过每一棵树的分类结果经统计后选择最可能的分类。
随机森林大致过程如下:
- 1)从样本集中有放回随机采样选出 n n n 个样本;
- 2)从所有特征中随机选择 k k k 个特征,对选出的样本利用这些特征建立决策树(一般是CART,也可是别的或混合);
- 3)重复以上两步 m m m 次,即生成 m m m 棵决策树,形成随机森林;
- 4)对于新数据,经过每棵树决策,最后投票确认分到哪一类。
随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树
。
随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。“森林”我们很好理解,一棵叫做树,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本, N N N 棵树会有 N N N 个分类结果。而 RF 集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想
。那么成百上千棵就可以叫做森林了
森林好理解,那么如何理解随机呢?两个随机
随机有放回的抽样
:如果不随机有放回抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的随机抽取m个特征
: M M M 维特征,随机抽取 k < M kk<M 个特征进行最优特征的选取:如果每个样本的特征维度为 M M M,指定一个常数 m < < M m<m<<M ,随机地从 M M M 个特征中选取 m m m个特征子集,每次树进行分裂时,从这m个特征中选择最优的。
每棵树都尽最大程度的生长,并且没有剪枝过程,两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)
随机森林分类效果(错误率)与两个因素有关:
- 森林中任意两棵树的相关性:相关性越大,错误率越大
- 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低
减小特征选择个数 m m m,树的相关性和分类能力也会相应的降低;增大 m m m,两者也会随之增大。所以关键问题是如何选择最优的 m m m(或者是范围),这也是随机森林唯一的一个参数。
random forest是bagging的扩展变体
。在以决策树为基学习器构建bagging集成的基础上,进一步在决策树训练过程中引入“随机属性选择”。
传统决策树在选择划分属性时,是在当前节点的属性集合 k k k 中选择一个最优属性;而在RF中,是先从该节点的属性集合中随机选择含有 d d d 个属性的子集,然后从该子集中选择一个最优属性用于划分。一般地,推荐 d = l o g 2 k d =log_{2}k d=log2k 或者 d = k d=\sqrt{k} d=k 。
简单来说,bagging
基学习器的多样性来自于“样本扰动
”,而RF除了“样本扰动”,还增加了“属性扰动
”,而这使得最终基学习器之间的差异度进一步增加,从而使得最终的集成模型的泛化性能进一步提升。
RF 与 bagging的比较:
- 随机森林的 收敛性与bagging相似,其实性能相对较差,因为引入了属性扰动,个体的性能往往有所降低,但随着基学习器的个数增加,随机森林能收敛到更低的泛化误差。
- 因为是考察的属性的子集,所以RF的 训练效率 常优于bagging。
RF中决策树采用的是CART决策树
作为基学习器
。
假设有 k k k 棵树组成的RF,那么我们就需要 k k k 的自动样本集,如上面的流程图;可是我们只有 N N N 个样本组成的一个数据集 X X X ,而现在需要 k k k 个数据集,这里采用的方法是:
- 1)对每一颗决策树,选择相应的袋外数据(out of bag,OOB)计算袋外数据误差,记为errOOB1
所谓袋外数据是指,每次建立决策树时,通过重复抽样得到一个数据用于训练决策树,这时还有大约1/3的数据没有被利用,没有参与决策树的建立。这部分数据可以用于对决策树的性能进行评估,计算模型的预测错误率,称为袋外数据误差;- 2)随机对袋外数据OOB所有样本的特征 X X X 加入噪声干扰(可以随机改变样本在特征 X X X 处的值),再次计算袋外数据误差,记为errOOB2;
- 3)假设森林中有 k k k 棵树,则特征x的重要性 = ∑ ( e r r O O B 2 − e r r O O B 1 ) / k =∑(errOOB2−errOOB1)/k =∑(errOOB2−errOOB1)/k
上面公式之所以能够说明特征的重要性是因为,如果加入随机噪声后,袋外数据准确率大幅度下降(即errOOB2上升)
,说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。
RF的主要优点:
- 1) 高度并行化训练,对于大样本(样本数)训练速度有优势
- 2) 能处理特征较多的高维数据,由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型
- 3)在训练后,可以给出各个特征对于输出的重要性
- 4) 由于采用了随机采样(样本随机,特征随机),不容易发生过拟合,训练出的模型的方差小,泛化能力强
- 5) 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单
- 6)RF对异常值/缺失值不敏感,十分具有鲁棒性
RF的缺点:
- 1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合
- 2)取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果
可以是分类树,也可以是回归树
;而GBDT只由回归树
组成,GBDT的会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树并行
生成;而GBDT只能是串行
生成多数投票
等;而GBDT则是将所有结果累加起来,或者加权累加起来
异常值不敏感
,GBDT对异常值非常敏感
基于权值的弱分类器的集成
模型方差
提高性能,GBDT是通过减少模型偏差
提高性能参考文档:
随机森林的原理分析
随机森林(Random Forest)原理小结
随机森林(原理/样例实现/参数调优)