随机森林原理介绍与适用情况(综述篇)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机森林原理介绍与适用情况(综述篇)相关的知识,希望对你有一定的参考价值。
参考技术A 随机森林是一种集成算法(Ensemble Learning),它属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能。其可以取得不错成绩,主要归功于“ 随机 ”和“ 森林 ”,一个使它具有抗过拟合能力,一个使它更加精准。
Bagging也叫自举汇聚法(bootstrap aggregating),是一种在原始数据集上通过有放回抽样重新选出k个新数据集来训练分类器的集成技术。它使用训练出来的分类器的集合来对新样本进行分类,然后用多数投票或者对输出求均值的方法统计所有分类器的分类结果,结果最高的类别即为最终标签。此类算法可以有效降低bias,并能够降低variance。
随机森林(Random Forest,RF)是Bagging算法的一种,其实在介绍完Bagging算法之后,随机森林几乎是呼之欲出的,RF相对于Bagging只是对其中一些细节做了自己的规定和设计。
随机森林的弱分类器使用的是CART数,CART决策树又称分类回归树。当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很好的解决分类问题。
但需要注意的是,该算法是一个 二叉树 ,即每一个非叶节点只能引伸出两个分支,所以当某个非叶节点是多水平(2个以上)的离散变量时,该变量就有可能被多次使用。同时,若某个非叶节点是连续变量时,决策树也将把他当做离散变量来处理(即在有限的可能值中做划分)
特征选择目前比较流行的方法是信息增益、增益率、基尼系数和卡方检验。这里主要介绍基于基尼系数(GINI)的特征选择,因为随机森林采用的CART决策树就是基于基尼系数选择特征的。
基尼系数的选择的标准就是每个子节点达到最高的纯度,即落在子节点中的所有观察都属于同一个分类,此时基尼系数最小,纯度最高,不确定度最小。
对于一般的决策树,假如总共有K类,样本属于第k类的概率为:pk,则该概率分布的基尼指数为:
基尼指数越大,说明不确定性就越大;基尼系数越小,不确定性越小,数据分割越彻底,越干净。
对于CART树而言,由于是二叉树,可以通过下面的表示:
在我们遍历每个特征的每个分割点时,当使用特征A=a,将D划分为两部分,即D1(满足A=a的样本集合),D2(不满足A=a的样本集合)。则在特征A=a的条件下D的基尼指数为:
Gini(D):表示集合D的不确定性。
Gini(A,D):表示经过A=a分割后的集合D的不确定性。
随机森林中的每棵CART决策树都是通过不断遍历这棵树的特征子集的所有可能的分割点,寻找Gini系数最小的特征的分割点,将数据集分成两个子集,直至满足停止条件为止。
首先,正如Bagging介绍中提到的,每个树选取使用的特征时,都是从全部m个特征中随机产生的,本身已经降低了过拟合的风险和趋势。模型不会被特定的特征值或者特征组合所决定,随机性的增加,将控制模型的拟合能力不会无限提高。
第二,与决策树不同,RF对决策树的建立做了改进。对于普通的决策树,我们会在节点上所有的m个样本特征中选择一个最优的特征来做决策树的左右子树划分。但是RF的每个树,其实选用的特征是一部分,在这些少量特征中,选择一个最优的特征来做决策树的左右子树划分,将随机性的效果扩大,进一步增强了模型的泛化能力。
假设每棵树选取msub个特征,msub越小,此时模型对于训练集的拟合程度会变差,偏倚增加,但是会泛化能力更强,模型方差减小。msub越大则相反。在实际使用中,一般会将msub的取值作为一个参数,通过开启oob验证或使用交叉验证,不断调整参数以获取一个合适的msub的值。
随机森林原理与Sklearn参数详解
参考技术A 目录1、集成算法概述
2 、 Sklearn中RandomForestClassifier重要参数详解
3、Sklearn中RandomForestRegressor重要参数详解
4、附录
5、总结
1、集成算法概述: 集成算法的目标是多个评估器建模的结果,汇总后得到一个综合结果,以此来获取比单个模型更好的回归或分类表现。多个模型集成成为的模型叫集成评估器,单个模型叫基评估器。通常说有三种集成算法:装袋法(Bagging)、提升法(Boosting)和stacking。装袋法的基本思想是构建多个相互独立的基评估器,然后通过预测平均或多数表决原则来决定集成评估器的结果。装袋法的典型代表就是随机森林(RandomForest)。
2、RandomForestClassifier重要参数:
n_estimators: integer, optional (default=100), 森林中基评估器的数量,即树的数量。n_estimators越大模型效果越好,但达到一定程度时,精确性趋于稳定。n_estimators越大模型的计算量越大,需要的内存也越大。
random_state: int, RandomState instance or None, optional (default=None), 控制树的生成模式。在DecisionTreeClassifier中random_state生成随机的一棵树,这里的参数控制的是随机生成一片森林模式。 用袋装法集成时,基分类器应当是相互独立的,是不同的。
bootstrap: boolean, optional (default=True), 要让基分类器尽量都不一样,一种方式是使用不同的训练数据集来训练不同的树。而装袋法采用的是有放回采样法,来确保每棵树的随机性。booststrap就是用来控制抽样技术的参数。
oob_score: bool (default=False), 是否启用袋外数据做测试。有放回采样策略中,自助数据集平均包含63%的原始数据被抽中(每个样本从原始数据抽中到自助集的概率为: =63%左右),也就是说袋外数据(out of bag data 简称oob数据)大致占37%。在使用随机森林时,我们可以不划分测试和训练集,只要开启袋外数据支持,就可以用袋外数据测试我们的模型。然后这并不绝对,如果n足够大,则没有数据落入袋外,自然无法使用oob数据来测试模型了。如果需要用袋外数据做测试,则设置该参数为True,实例化并训练模型完成后,可以通过oob_score_来查看真是落入袋外的数据量。
重要属性与接口:
除了estimators_和oob_socre_这两个属性外,作为树模型也有feature_importances这个属性。
常用的接口主要有:apply,fit,predict和score。除此之外,还需要注意随机森林的predict_proba接口,该接口返回预测数据的被分到每一类标签的概率。如果是二分类,则predict_proba返回的数值大于0.5时被划分为1,否则为0。(在sklearn的随机森林中predict_proba返回每棵树的概率,然后取平均概率,从而根据概率值是否大于0.5划分为1,否则为0,来决定样本分类的)
Bagging要求基分类器相互独立,袋装法另一个必要条件是:基分类器的误差率要小于0.5,即准确率大于0.5,集成效果才好于基分类器。所以使用随机森林前,先要观察各基分类器是否都有至少50%的预测正确率。
3、RandomForestRegressor重要参数:
criterion:string, optional (default=”mse”)
1、输入“mse”使用均方误差mean squared err(MSE),父节点和子节点之间的均方误差的差额将被用来作为特征选择的标准,这种方法通过使用叶子节点的均值来最小化L2损失。
2、输入“friedman_mse”使用费尔德曼均方误差,这种指标使用费尔德曼针对潜在分枝中的问题改进后的均方误差。
3、输入“mae”使用绝对平均误差MAE(mean absolute error),这种指标使用叶节点的中值来最小化L1损失。
,
其中N是样本数量,i是每一个数据样本,fi是模型回归出的数值,yi是样本点i实际的数值标签。因此MSE的本质是回归值与真实值的差异。 在回归树中,MSE不仅是最优的分枝指标,也是最常用的衡量回归树回归质量的指标。
回归树接口:
score: 返回的是R平方,并不是MSE。R平方定义如下:
, , ,
其中u是残差平方和(MSE*N),v是总平方和,N是样本数量,i是每个样本,fi是模型回归出的值,yi是样本点i的实际数值标签。y帽是真实数值标签的平均数。
R2可以为正也可以为负,当残差平方和远远大于模型总平方和时,模型非常糟糕,R2为负;但MSE永远为正。但Sklearn当中使用均方误差作为评判标准时,却是计算“负均方误差”(neg_mean_squared_error)以负数表示。其实就是MSE前加了个负号。
4、附录
参数列表
属性列表
接口列表
5、总结: 本文详细介绍了集成学习中Bagging的典型代表随机森林的工作原理,同时对sklearn中RandomForestClassifier和RandomForestRegressor核心参数、属性、接口进行了介绍。
以上是关于随机森林原理介绍与适用情况(综述篇)的主要内容,如果未能解决你的问题,请参考以下文章