集成学习(2)bagging代表——随机森林
回顾前文对bagging的定义:
1.bagging(Bootstrap Aggregating):针对独立的同质弱学习器,相互独立地并行学习这些弱学习器,并按照某种确定性的平均过程将它们组合起来。(注意这里所说的独立并不是绝对的独立,只是没有强依赖关系)
本篇说一下bagging中的随机森林。
1 bagging的另一个优点——OOB
我们知道,bagging因为样本随机抽样,是基学习器没有强依赖关系,所以有降低方差的优点,除此之外,随机抽样还带来了另外的一个好处。因为bagging对训练集使用有放回的随机采样,所以会形成一个独特的袋外数据(Out Of Bag, OOB),这部分数据是在bagging的每轮随机采样中,没有被采到的数据,可以用作测试集检测模型的泛化能力。这个袋外数据是怎么出现的呢?
对于一个样本点,它在某一次训练集的随机采样中,每次被采集到的概率是1/m。不被采集到的概率为1−1/m。如果m次采样都没有被采集中的概率是。当时,。也就是说,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采到,这就是袋外数据。OOB的测试已被证明是无偏估计,所以在随机森林算法中不需要再进行交叉验证或者划分单独的测试集来获取测试集误差的无偏估计。
2 从bagging到随机森林
随机森林是做了一点改进的bagging模型,当然其还是属于bagging的,上一篇我们已经对bagging做了一些介绍,现在来看一下构建bagging模型的一般流程:
输入:样本集、弱学习器算法、弱分类器迭代次数。
输出:最终的强分类器。(1)对于
- 对训练集进行第次随机有放回的采样,共采集次,得到包含个样本的采样集;
- 用采样集训练第个弱学习器;
(2) 弱学习器的结合
- 如果是分类问题,个弱学习器投出最多票数的类别或者类别之一为最终类别;
- 如果是回归问题,个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
随机森林对bagging所做的改进是:不止对训练集数据进行随机采样,还对样本特征进行随机采样,即假如本来样本有100个,随机森林的一个基学习器只随机选择其中的80个进行训练,这样的做法增强了基学习器之间的差异和独立性,按上一篇的分析,这可能会是的集成模型的方差Variance更小,泛化能力更强,同时也增加了模型对噪声的抗性,对缺失值的敏感性降低(本身就是用缺失了特征的数据训练出来的)。基于这样的做法,随机森林的流程为:
输入:样本集、弱学习器算法、弱分类器迭代次数。
输出:最终的强分类器。(1)对于
- 对训练集进行第次随机有放回的采样,共采集次,得到包含个样本的采样集;
- 在采样集中随机选择m个特征形成训练集,使用训练第个决策树;
(2) 弱学习器的结合
- 如果是分类问题,个弱学习器投出最多票数的类别或者类别之一为最终类别;
- 如果是回归问题,个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
在特征选择的过程中,对于一个包含 p 个特征的分类问题,可以在每次划分时使用 个特征;对于回归问题,推荐 但不少于 5 个特征。 (A Data Complexity Analysis of Comparative Advantages of Decision Forest Constructors)
随机森林因为其天然降低方差的能力,即使单个树模型的预测对训练基的噪声非常敏感,但对于多个树模型,只要这些树并不相关,这种情况就不会出现,因此随机森林一般不会过拟合,所以随机森林中的决策树一般也不需要剪枝,让其自由生长即可,理论上来说决策树越多方差越小,不过树太多的话计算量会更大,所以在使用随机森林时最重要的参数就是决策树的数量,树太少了可能欠拟合,太多了效率太低。
3 随机森林的一些特点
3.1 随机森林获取特征重要性
随机森林可以输出特征的重要性排名,当然这个重要性是针对随机森林算法来说的,换成别的学习器排名估计就不一样了,因为学习的原理不同嘛,我们来看看随机森林是怎么计算特征的重要性的:
- 使用训练集训练一个随机森林模型,在训练过程中记录下每棵树的out-of-bag每个数据点误差,然后在整个森林上进行平均得到;
- 为了度量第个特征的重要性,在训练数据中把第个特征的值被打乱(比如随机改变第个特征的值),并重新计算打乱后的数据的out-of-bag误差,平均后得到;
- 计算打乱前后的out-of-bag误差的差值,即为第个特征的重要性分数,值越大说明特征越重要。其逻辑是加入随机噪声后,袋外数据准确率大幅度下降(即上升),说明这个特征对于样本的预测结果有很大影响,即可说明重要程度比较高。
*该方法中对数据进行打乱的方法通常有两种:
1)使用gaussian抽取随机值替换原特征值;
2)将所有样本的第个特征值重新打乱分布(推荐)。
3.2 随机森林在回归问题上的缺陷
随机森林在回归中的非线性特性使其比线性算法更具普适性优势。不过其缺陷是随机森林无法向外推断,即它只能在训练数据有的值域范围内进行回归。在训练和预测输入的范围、分布不同的情况下,随机森林会无法处理。假设我们需要进行时间序列数据的预测,例如商品价格,商品销量,对于训练中不存在的时间段,随机森林就难以预测了。
这是为啥呢?主要是因为它是基于邻域的模型,可以理解为他主要是把训练数据根据特征取值来划分成很多很多个块,这样看它倒是很像基于KD树的KNN是不是,事实上随机森林和KNN都可以被看作是所谓的“加权邻居的方案”,本质上是根据“邻居”的取值来计算预测值,所以对于特征无法达到的数据就找不到邻居没法计算了,这也是基于树的算法在无限值域目标变量中的先天短板,我们在应用中一定要注意。
4 总结
随机森林的良好效果体现了集成学习的强大,而且它的使用非常快捷方便,因为它没太多参数需要调参,拿来就用效果还挺好,因此非常适合快速的开发,最后我们来总结一下随机森林的优缺点:
优点:
- 训练速度快,容易做成并行化方法(训练时树与树之间是相互独立的),适用于大量数据;
- 一般不会过拟合,泛化能力强;
- 可以多分类,可以回归;
- 对缺失数据不敏感(训练数据随机抽样)。
- 能够处理高维度的数据,并且不用做特征选择(特征随机抽样);
- 在训练完后,能够输出特征的重要性;
缺点:
- 随机森林在某些噪音较大的分类或回归问题上会过拟合;
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
主要参考
《机器学习》——周志华
维基百科-随机森林