随机森林分类模型
原文链接
啥是随机森林
随机森林是一种由决策树构成的(并行)集成算法,属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能,同时也有很好的稳定性,广泛应用在各种业务场景中。随机森林有如此优良的表现,主要归功于「随机」和「森林」,一个使它具有抗过拟合能力,一个使它更加精准。
前面有些乱七八糟的名词,后面来一一解释
集成算法
1)集成学习
对于训练数据集,我们训练一系列「个体学习器」,再通过「结合策略」将它们集成起来,形成一个更强的学习器,这就是「集成学习」在做的事情,内核思想类似「三个臭皮匠,顶个诸葛亮」。
2)个体学习器
个体学习器是相对于集成学习来说的,其实我们在之前了解到的很多模型,比如 C4.5 决策树算法、逻辑回归算法、朴素贝叶斯算法等,都是个体学习器。
Bagging
我们在这里讲到的随机森林是并行集成模型,而Bagging是并行式集成学习方法最著名的代表。
1)Bootstrap Sampling
要理解bagging,首先要了解自助采样法(Bootstrap Sampling):
搞得玄乎其玄,其实原理挺简单,前面文章也讲到过。
给定包含\(m\)个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中。
上述过程重复\(m\)轮,我们得到\(m\)个样本的采样集,初始训练集中有的样本在采样集中多次出现,有的则从未出现,约\(63.2\)的样本出现在采样集中,而未出现的约\(36.8\)的样本可用作验证集来对后续的泛化性能进行「包外估计」。
2)Bagging
Bagging是Bootstrap aggregating的缩写,是在Boostrap Sampling基础上构建的,,上述的采样过程我们可以重复\(T\)次,采样出\(T\)个含\(m\)个训练样本的采样集,然后基于每个采样集训练出一个基学习器,然后将这些基学习器进行结合。
在对预测输出进行结合时(也就是图中对学习器的结合),Bagging 通常对分类任务使用简单投票法(即选取票数最多的类别作为最终预测结果),对回归任务使用简单平均法(计算所有基学习器的预测结果的算术平均值),这就是Bagging 的基本流程。
随机森林算法
Random Forest(随机森林,简称RF)是一种基于树模型的Bagging的优化版本。核心思想依旧是Bagging,但是做了一些独特的改进——RF使用了CART决策树(CART详见基尼指数那块)作为基学习器。具体过程如下:
-
输入为样本集\(D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}\),其中\(x_i\)是第\(i\)个样本的特征向量,每个样本有\(d\)个特征,\(y_i\)是对应的标签(分类任务中为类别标签,回归任务中为连续值)。
-
对于\(t=1,2,...,T\):对训练集进行\(t\)次随机采样,共采集m次,得到包含m个样本的采集机\(D_T\),用此采样集训练第\(T\)个决策树模型\(G_T(x)\),在标准的决策树训练过程中,我们会在所有特征中选择一个最优特征来进行划分。但在训练随机森林决策树模型的节点的时候,要在节点上所有的样本特征中选择一部分样本特征,在这些随机选择的部分样本特征中选择一个最优的特征来做决策树的左右子树划分。
下面是对于同一份数据集(iris数据集),我们使用决策树和不同树棵树的随机森林做分类的结果,我们对其决策边界做了可视化。
可以很明显地看到,随着随机森林中决策树数量的增多,模型的泛化能力逐渐增强,决策边界越来越趋于平滑(受到噪声点的影响越来越小)。
(1)随机森林优点
对于高维(特征很多)稠密型的数据适用,不用降维,无需做特征选择。
构建随机森林模型的过程,亦可帮助判断特征的重要程度。
可以借助模型构建组合特征。
并行集成,有效控制过拟合。
工程实现并行简单,训练速度快。
对于不平衡的数据集友好,可以平衡误差。
对于特征确实鲁棒性强,可以维持不错的准确度。
(2)随机森林缺点
在噪声过大的分类和回归数据集上还是可能会过拟合。
相比单一决策树,因其随机性,模型解释会更复杂一些。
影响随机森林的参数与调优
1)核心影响参数
(1)生成单颗决策树时的特征数 max_features
增加 max_features 一般能提高单个决策树模型的性能,但降低了树和树之间的差异性,且可能降低算法的速度。
太小的 max_features 会影响单颗树的性能,进而影响整体的集成效果。
需要适当地平衡和选择最佳的 max_features。
(2)决策树的棵数 n_estimators
较多的子树可以让模型有更好的稳定性和泛化能力,但同时让模型的学习速度变慢。
我们会在计算资源能支撑的情况下,选择稍大的子树棵树。
(3)树深 max_depth
太大的树深,因为每颗子树都过度学习,可能会有过拟合问题。
如果模型样本量多特征多,我们会限制最大树深,提高模型的泛化能力。
2)参数调优
(1)RF划分时考虑的最大特征数 max_features
总数的百分比,常见的选择区间是\([0.5,0.9]\)。
(2)决策树的棵树 n_estimators
可能会设置为\(>50\)的取值,可根据计算资源调整。
(3)决策树最大深度 max_depth
常见的选择在\(4 到 12\)之间。
(4)内部节点再划分所需最小样本数 min_samples_split
如果样本量不大,不需要调整这个值。
如果样本量数量级非常大,我们可能会设置这个值为\(16,32,64\)等。
(5)叶子节点最少样本数 min_samples_leaf
为了提高泛化能力,我们可能会设置这个值大于1。