一文串讲随机森林与集成学习

三个弱分类器,顶个强分类器。                                                                                                                      ----沃.兹基硕德

集成学习

1.基本概念

集成学习通过构建并结合多个学习器来完成学习任务。

个体学习器:由现有的学习算法从训练数据产生。若集成中只包含同一类学习器则称它们为“基学习器”,相应的算法称为“基学习算法”。若包含不同类的个体学习器则称为异质的。

集成学习原则:好而不同。个体学习器要有一定的准确性,也要有一定的差异性。

集成学习常见算法:串行(Boosting)、并行(Bagging、决策树)、堆叠型(Stacking)下面依次讲解

2.常见算法

Boosting

核心思想:错过的重点关注。

算法:先从基学习器训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值 T,最终将这T个基学习器进行加权结合。其中最典型的代表为:Adaboost

Boosting 主要关住降低偏差,因此 Boosting能基于泛化性能相当弱的学习器构建出很强的集成。

流程图如下:

Bagging

算法:对训练样本进行有放回的采样产生T个训练集,对每一个采样集训练出一个基学习器,再通过投票法/平均法将这些学习器的结果结合起来。

算法:

其算法过程如下:

1)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)

2)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

3)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

流程图如下:

优点:高效、可用于多分类、回归,降低方差

 

Stacking

将训练好的所有基模型对整个训练集进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测:

 

下面通过下图对stacking算法做简要讲解:

        假设原始数据有10300份,我们将其中300份留作测试集,剩下10000份做训练集,并且在每一个基础模型进行5折交叉验证,如:用XGBoost作为基础模型Model1,5折交叉验证就是先拿出四折作为training data,另外一折作为testing data。每一次的交叉验证包含两个过程:

1. 基于training data训练模型;

2. 基于training data训练生成的模型对testing data进行预测。

        在整个第一次的交叉验证完成之后我们将会得到关于当前testing data的预测值,这将会是一个一维2000行的数据,记为a1。注意!在这部分操作完成后,我们还要对数据集原来的整个testing set进行预测,这个过程会生成300个预测值,这部分预测值将会作为下一层模型testing data的一部分,记为b1。因为我们进行的是5折交叉验证,所以以上提及的过程将会进行五次,最终会生成针对testing set数据预测的5列2000行的数据a1,a2,a3,a4,a5,对testing set的预测会是5列2500行数据b1,b2,b3,b4,b5。

        在完成对Model1的整个步骤之后,我们可以发现a1,a2,a3,a4,a5其实就是对原来整个training set的预测值,将他们拼凑起来,会形成一个10000行一列的矩阵,记为A1。而对于b1,b2,b3,b4,b5这部分数据,我们将各部分相加取平均值,得到一个300行一列的矩阵,记为B1。通过不同的分类器可得到不同的结果,再将它们的结果进一步融合便得到了最终结果。

3.随机森林

随机森林可以看做Bagging的变体。其主要思想是在样本随机选择的同时,多棵决策树的构建过程中每棵决策树的属性的选择也随机,然后根据选择属性构建最优决策树进行集成。这样基学习器的多样性不仅来自于样本的扰动,同时还来自属性的扰动,也就是说,随机森林的随机性主要体现在两个方面:(1)样本的随机选择(2)属性的随机选择。因此随机森林最终集成的泛华性能和个体学习器的差异进一步加大。此外,由于随机森林每棵树的训练都是独立的,其并不依赖前一棵树的分类结果,因此随机森林天生就适应并行,故其训练效率和模型的泛化误差往往均优于Boosting,然而该模型的精度较低(一般情况下低于Boosting几个百分点)。

在RF中,对基决策树的每个节点,先从该节点的属性集合随机划分大小为k的子集,再从子集中选择最优属性用于划分。k值常取log2d

RF的主要优点有:

    1) 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。

    2) 由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。

    3) 在训练后,可以给出各个特征对于输出的重要性

    4) 由于采用了随机采样,训练出的模型的方差小,泛化能力强。

    5) 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。

    6) 对部分特征缺失不敏感。

RF的主要缺点有:

    1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合。

    2) 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

RF和GBDT的异同:

主要有以下两点:

    1) 模型迭代方式不同,GBDT是boosting模型,RF是bagging模型。

    2) GBDT只能使用CART模型,RF默认是CART模型,也可以选择ID3模型。

    3) 参数同样也分为两部分,一部分是框架提升部分的参数,另一部分是决策树参数。

sklearn中RF的参数:

参数:

n_estimators:随机森林中树的棵树,默认是10棵。
criterion:样本集切分策略,默认是gini指数,此时树模型为CART模型,当值选为信息增益的时候,模型就成了ID3模型,默认为CART模型。
bootstrap:是统计学中的一种重采样技术,可以简单理解成是有放回地抽样,默认是True,即采取有放回抽样这种策略,这不就是bagging的思想么。
oob_score:袋外估计(out-of-bag),这个外是针对于bagging这个袋子而言的,我们知道,bagging采取的随机抽样的方式去建立树模型,那么那些未被抽取到的样本集,也就是未参与建立树模型的数据集就是袋外数据集,我们就可以用这部分数据集去验证模型效果,默认值为False。

classes_:输出样本集的类别。
n_classes_:输出类别数量。
n_features_:特征数量。
n_outputs_:当模型被fit时的输出维度。看看下图来感受一些这个属性。

feature_importances_:特征重要性。
oob_score_:袋外估计准确率得分,必须是oob_score参数选择True的时候才可用。
oob_decision_function_:袋外估计对应的决策函数。

方法:

apply(X):将训练好的模型应用在数据集X上,并返回数据集X对应的叶指数。
decision_function(X):返回决策函数值(比如svm中的决策距离)
fit(X,Y):在数据集(X,Y)上训练模型。
get_parms():获取模型参数
predict(X):预测数据集X的结果。
predict_log_proba(X):预测数据集X的对数概率。
predict_proba(X):预测数据集X的概率值。
score(X,Y):输出数据集(X,Y)在模型上的准确率。

随机森林的推广

extra trees

    extra trees是RF的一个变种, 原理几乎和RF一模一样,仅有区别有:

    1) 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。

    2) 在选定了划分特征后,RF的决策树会基于基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。

    从第二点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是偏倚相对于RF进一步增大。在某些时候,extra trees的泛化能力比RF更好。

参考:

西瓜书.周志华

https://www.jianshu.com/p/a779f0686acc

https://www.itcodemonkey.com/article/5181.html

https://www.zhihu.com/question/29036379/answer/111637662

https://www.cnblogs.com/earendil/p/8872001.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值