zoukankan      html  css  js  c++  java
  • 机器学习集成学习原理

    //2019.08.19
    #机器学习集成学习
    1、集成学习是指对于同一个基础数据集使用不同的机器学习算法进行训练,最后结合不同的算法给出的意见进行决策,这个方法兼顾了许多算法的"意见",比较全面,因此在机器学习领域也使用地非常广泛。

    集成学习(ensemble learning)本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等,可以说所有的机器学习领域都可以看到集成学习的身影。

    生活中其实也普遍存在集成学习的方法,比如买东西找不同的人进行推荐,病情诊断进行多专家会诊等,考虑各方面的意见进行最终的综合的决策,这样得到的结果可能会更加的全面和准确。

    下图概括了集成学习的思想。对于训练集数据,我们通过训练若干个个体学习器,通过一定的结合策略,就可以最终形成一个强学习器,以达到博采众长的目的。


    2、集成学习有两个主要的问题需要解决,第一是如何得到若干个个体学习器,第二是如何选择一种结合策略,将这些个体学习器集合成一个强学习器。

      对于集成学习的算法如果选择是决策树,并且在构建集成学习时使得每个子模型的样本数据特征随机,样本样本数据随机,这样决策树就会寻找随机特征子集上的最优划分特征,而每一个决策树都存在随机性,从而整体的学习算法就称为随机森林。
      极其随机森林extra tree,是指各个子模型的决策树的节点处划分的特征随机,特征的阈值随机,这样使得各个决策树之间的差异增大,随机性增强,会比较好地限制鬼过拟合现象的产生用更快的训练方法,不过也会因此产生较大的数据偏差。



      集成学习解决回归问题的方式和分类问题是完全一致的,只需要引入不同算法的回归算法即可,对于每一种相应的回归算法其超参数也是和分类问题一致的。
      集成学习总共有三大种类方法:
    (1)第一大类Bagging方法:多个子模型之间没有联系,利用投票原则进行最终结果的预测;


    (2)第二大类Boosting方法:它也是集成多个模型,而多个模型之间是有联系的,它们均在增强整体的效果,主要有Ada Boosting 和Gradient Boosting。
    1)第一种Boosting的方式Ada Boosting方式,通过对于每次训练模型的预测错误数据调整权重重新训练新的模型,然后不断地进行迭代建立起不同的决策模型,最终用这些模型综合投票的结果作为预测的结果。

    原理图
    2)第二种Boosting方式:Gradient Boosting,利用特定的机器学习算法(决策树)对于数据进行训练和预测,然后将模型误差再进行训练,然后再对误差的误差训练,依次叠加,最终将其预测数值累积得到的训练结果就是最终的结果

    原理图
    (3)第三大种类集成学习的方法是Stacking:多模型多层次的模型融合集成学习方法,sklearn没有专门的接口进行,可以自行根据理解建立。

    原理图

    3、sklearn中也提供了集成学习的接口voting classifier。

    4、对于集成学习的算法,里面有一个参数voting,它是指集成学习的投票原则,一般具有两种计算原则:
    (1)hard voting :少数服从多数的原则,人人投票平等没有差异;


    (2)soft voting:具有权重的算法服从原则,不同的算法模型根据其专业性选取不同的权重


    5、softvotiing的投票原则必须保证算法具有预测概率的性质:SVC(probability=True)、kNN,逻辑回归,决策树等

    6、集成学习的准确度很大程度上取决于所建立的子模型的数量,子模型的数目越多,集成学习的准确度也将越高;而不同的子模型一定要存在一定的差异。对于子模型之间的差异如何创建,主要有两种思路:

    (1)增加机器学习的算法数目

    (2)每个机器学习算法只看模型的一部分数据

    其中,就第一种思路来讲,对于机器学习算法,其数目是有限的,远远达不到我们所期望达到的数目,所以一般辅助使用,而第二种思路是目前集成学习的主要思路,对于相同的机器学习算法使用同样的基础数据集,但是每个子模型只看其中数据的一部分数据,这样同一种机器学习算法也会训练出来很多种子模型,当然这样也因为只是选取数据一部分的原因而降低子模型算法的准确度,但是这并没有多大的关系,因为集成学习中对于子模型的概率没有太高的要求,可以达到60%以上便可,通过多个模型投票累积便可以形成非常强大准确的集成学习算法(比如500个数据样本,如果每个子模型看其中的100个样本,并且每个子模型的概率都可以达到60%,那么集成学习的理论预测概率就会到99.9%)


    7、对于集成学习的子模型在选取数据集的部分样本数据时有两种方式:放回取样bagging(统计学中将其称为bootstrap)和pasting不放回取样。其中放回取样baging更加常用,它的随机性更加好,所以一般情况下综合效果最好。
    8、sklearn中集成学习的算法,主要的超参数有:

    (1)集成学习机器学习算法的种类

    (2)n_estimators:创建训练子模型的数目(机器算法创建子模型数目)

    (3)max_samples:每次子模型所取基础数据集的样本数目(样本数据随机)

    (4)bootstrap(=True):有无放回取样

    (5)n_jobs(=-1):子模型训练时所用的内核数目,主要用来提高运算效率

    (6)max_features:每次从样本中随机取的最大特征数目(特征随机)

    (7)bootstrap_features(=True):选取特征时有无放回

    (8)oob_score=True:对于37%从来取不到的数据可以进行自我模型验证

    9、对于有放回的取样Bagging式的机器学习算法在生成子模型的训练过程中大概会有37%的样本数据从来都不会在子模型中取上,将其称为OUT-OF-Bagging,因此可以直接首先将其作为测试数据集进行验证,需要在定义集成学习的时候将out_score=true。另外,对于bagging的方式可以使得训练子模型的过程进行并行化,提高计算训练的效率。


    10、对于集成学习的做子模型的差异还可以从数据样本的特征中进行随机取样,这样随机性也会更加提高,使得子模型的差异更大一些,总体的准确度将更好。


    11、对于数据样本的集成学习,子模型的建立可以在基础数据集选取上既从特征上随机,又从数据样本上随机,这样综合效果将达到最好,将其称为random patches。

  • 相关阅读:
    vue 无缝无限滚动横条实现
    小程序 recycle-view 个人demo
    js 笔记
    java整理的一些面试资料
    使用js获取浏览器地址栏里的参数
    java面试题
    sql中索引不会被用到的几种情况
    常用linux命令
    shiro登录成功之后跳转原路径
    springboot 整合 mongodb实现 批量更新数据
  • 原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/11380474.html
Copyright © 2011-2022 走看看