• 机器学习总结(二)bagging与随机森林


    一:Bagging与随机森林

    与Boosting族算法不同的是,Bagging和随机森林的个体学习器之间不存在强的依赖关系,可同时生成并行化的方法。

    Bagging算法

    bagging的算法过程如下:

    1:从原始样本集中使用Bootstraping自助采样的方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
    2:对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)
    3:对于分类问题:由k个模型的预测结果投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同


    从算法的流程可以看出,Bagging生成的每个基学习器的训练样本都会不同,由此基学习器之间具有一定的差异,但是这种差异不会特别大,因为采集的样本是在原样本上有放回的重复采样,采样子集之间有交叠。k轮随机采样,每轮经过n次随机的有放回的抽样,得到k个含有n个样本的采样集。从而可以在k个采样集上训练出k个基学习器,然后再将这些基学习 器进行结合。在对预测输出进行结合时,对分类任务使用简单的投票法,对回归任务采用简单平均法。

    Bagging算法有以下优点:

    (1)假定一个基学习器的计算复杂度为O(m),Bagging的复杂度为T(O(m)+O(s)),由于采样过程和投票平均过程 的复杂度O(s)很小,T是一个不大的常数,训练一个Bagging与直接使用基学习算法训练一个学习器的复杂度同阶。

    (2)与标准的Adaboost算法只能用于二分类任务 不同,Bagging能不经修改的用于 多分类、回归任务。

    (3)由于采样过程中每个基学习器会没有使用约有36.8%的样本,所以可以用来作为验证集,对基学习器的样本进行泛化性能包外估计。若基学习器为决策树,包外样本可用于对决策树进行剪枝,若基学习器为神经网络,可用来辅助 早期停止,以减少过拟合的风险。

    (4)从偏差方差分解来看,Bagging主要是关注降低方差(在取样过程添加了随机性),在不剪枝的决策树、神经网络等易受样本扰动的学习器比较有效。决策树是一种贪心的算法,样本中噪音过多时,容易过拟合。而神经网络的拟合能力非常强,所以也是一种对样本中的噪音非常敏感的算法,容易过拟合。

    随机森林算法

    随机森林RF是是Bagging算法的变体。RF的基学习器为决策树,其在构建决策树基学习器的过程,是在Bagging的基础上,进一步引入了 随机属性 选择。具体来说,一般决策 树 是 在当前结点中所有的属性集合中选择最优属性来划分,而 RF对每个基决策树的结点,从结点中随机选择一个包含k个属性的子集,然后再从这些子集中选择一个最优的属性划分。这个K在sklearn里叫做max_feature,是重要的参数。k控制了随机性的引入程度,即会对最终的算法的泛化能力产生影响。

    随机森林的优点:

    随机森林与Bagging相比,在其样本扰动的基础上,增加了属性扰动,泛化性能通过个体学习器之间的差异 度的增加而进一步提升。

    随机森林算法可以对特征的重要性进行选择,如通过包外估计法和基于不纯度减少的方法(哪个特征对不纯度减少的贡献越大,那么哪个特征就越重要

    包外估计法原理:

    假设针对某个特征X,我们利用套袋法建立了一颗决策树T,然后用T对袋外数据TOOB进行分类检测,得到其正确分类的个数XT,然后对袋外数据的特征X进行“随机扰乱”,对特征X的取值赋予随机取的新数值,这时再用T对袋外数据TOOB'进行分类检测,得到正确分类数XT',这时对于T来说,特征X的重要性D=|XT' - XT|,我们对随机森林中共N颗决策树做相同操作,可以得到N个特征X的重要性,取其均值作为X的重要性度量,即D(X) = (D1+D2+......+DN)/N,其中Di = |XT'i - XTi|(i=1,2,3,....,N)。

    总结

    随机森林是一种优秀的算法。由于随机森林和Bagging的方法在每个基学习器的训练过程相对独立,存在一种加法的性质 ,所以这决定了这算法可以进行并行计算,从而加快运行速度。由于其加入了数据样本扰动和输入属性扰动,所以会具有更好的泛化性能。

  • 相关阅读:
    在 WinForm 中打开页面采用POST方式传参http。可以多个参数传递,返回json字符串
    交换平台第二章:项目边界与架构设计(上)
    物理隔离下的数据交换平台难点解析与实践(一)
    十年风雨,一个普通程序员的成长之路(六)抉择与出发
    十年风雨,一个普通程序员的成长之路(五) 成长:得到与教训
    十年风雨,一个普通程序员的成长之路(四)深圳:积累与转折
    十年风雨,一个普通程序员的成长之路(三)铜陵:大雪与加班
    十年风雨,一个普通程序员的成长之路(二)外包:颠沛与流离
    十年风雨,一个普通程序员的成长之路(一)怀念:西安的小黑屋
    多数据源连接Oracle报错,linux熵池耗尽问题
  • 原文地址:https://www.cnblogs.com/jackhehe/p/9787147.html
Copyright © 2020-2023  润新知