作者:韩信子@ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/34
本文地址:http://www.showmeai.tech/article-detail/191
声明:版权所有,转载请联系平台与作者并注明出处
随机森林是一种由决策树构成的(并行)集成算法,属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能,同时也有很好的稳定性,广泛应用在各种业务场景中。
随机森林有如此优良的表现,主要归功于「随机」和「森林」,一个使它具有抗过拟合能力,一个使它更加精准。我们会在下文中做更详细的展开讲解。
(本篇部分内容涉及到机器学习基础知识、决策树、回归树算法,没有先序知识储备的宝宝可以查看ShowMeAI的文章 图解机器学习 | 机器学习基础知识、决策树模型详解 及 回归树模型详解)。
学习随机森林,我们需要先了解一些概念,比如第1个大家要了解的概念是集成学习(ensemble learning):
对于训练数据集,我们训练一系列「个体学习器」,再通过「结合策略」将它们集成起来,形成一个更强的学习器,这就是「集成学习」在做的事情,内核思想类似「三个臭皮匠,顶个诸葛亮」。
个体学习器是相对于集成学习来说的,其实我们在之前了解到的很多模型,比如C4.5决策树算法、逻辑回归算法、朴素贝叶斯算法等,都是个体学习器。
若集成中只包含同种类型的个体学习器,叫做「同质」集成,个体学习器称作「基学习器」。例如随机森林中全是决策树集成。
若集成中包含不同类型的个体学习器,叫做「异质」集成,个体学习器称作「组件学习器」。例如同时包含决策树和神经网络进行集成。
个体学习器代表的是单个学习器,集成学习代表的是多个学习器的结合。
我们在这里讲到的随机森林是并行集成模型,而Bagging是并行式集成学习方法最著名的代表。
要理解bagging,首先要了解自助采样法(Bootstrap Sampling):
给定包含 \(m\) 个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中。
上述过程重复 \(m\) 轮,我们得到 \(m\) 个样本的采样集,初始训练集中有的样本在采样集中多次出现,有的则从未出现,约63.2%的样本出现在采样集中,而未出现的约36.8%的样本可用作验证集来对后续的泛化性能进行「包外估计」。
Bagging是Bootstrap aggregating的缩写,是在Boostrap Sampling基础上构建的,上述的采样过程我们可以重复 \(T\) 次,采样出 \(T\) 个含 \(m\) 个训练样本的采样集,然后基于每个采样集训练出一个基学习器,然后将这些基学习器进行结合。
在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法,这就是Bagging的基本流程。
从「偏差-方差分解」的角度看,Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等易受到样本扰动的学习器上效用更明显。
Random Forest(随机森林,简称RF)是一种基于树模型的Bagging的优化版本。核心思想依旧是Bagging,但是做了一些独特的改进——RF使用了CART决策树作为基学习器。具体过程如下:
输入为样本集 \(D=\left\{\left(x, y_{1}\right),\left(x_{2}, y_{2}\right), \ldots,\left(x_{m}, y_{m}\right)\right\}\)
对于 \(t=1,2,...,T\):
分类场景,则 \(T\) 个基模型(决策树)投出最多票数的类别为最终类别。
随机森林核心点是「随机」和「森林」,也是给它带来良好性能的最大支撑。
「随机」主要体现在两个方面:
样本扰动:直接基于自助采样法(Bootstrap Sampling),使得初始训练集中约63.2%的样本出现在一个采样集中。并带来数据集的差异化。
属性扰动:在随机森林中,对基决策树的每个结点,先在该结点的特征属性集合中随机选择k个属性,然后再从这k个属性中选择一个最优属性进行划分。这一重随机性也会带来基模型的差异性。
「集成」体现在:根据多个(差异化)采样集,训练得到多个(差异化)决策树,采用简单投票或者平均法来提高模型稳定性和泛化能力。
下面是对于同一份数据集(iris数据集),我们使用决策树和不同树棵树的随机森林做分类的结果,我们对其决策边界做了可视化。
可以很明显地看到,随着随机森林中决策树数量的增多,模型的泛化能力逐渐增强,决策边界越来越趋于平滑(受到噪声点的影响越来越小)。
下面我们来总结一下随机森林的优缺点:
上面我们已经系统了解了随机森林的原理与机制,下面我们一起来看看工程应用实践中的一些重点,比如随机森林模型有众多可调参数,它们有什么影响,又如何调优。
增加max_features一般能提高单个决策树模型的性能,但降低了树和树之间的差异性,且可能降低算法的速度。
太小的max_features会影响单颗树的性能,进而影响整体的集成效果。
需要适当地平衡和选择最佳的max_features。
较多的子树可以让模型有更好的稳定性和泛化能力,但同时让模型的学习速度变慢。
我们会在计算资源能支撑的情况下,选择稍大的子树棵树。
太大的树深,因为每颗子树都过度学习,可能会有过拟合问题。
如果模型样本量多特征多,我们会限制最大树深,提高模型的泛化能力。
如果样本量不大,不需要调整这个值。
如果样本量数量级非常大,我们可能会设置这个值为16,32,64等。
更多监督学习的算法模型总结可以查看ShowMeAI的文章 AI知识技能速查 | 机器学习-监督学习。
可以点击 B站 查看视频的【双语字幕】版本
双语字幕+资料下载】MIT 6.036 | 机器学习导论(2020·完整版)
https://www.bilibili.com/video/BV1y44y187wN?p=12