美文网首页
集成学习

集成学习

作者: 异同 | 来源:发表于2020-01-13 12:23 被阅读0次

简单投票

hard Voting Classifier

from sklearn.ensemble import VotingClassifier
voting_clf = VotingClassifier(estimaters=[('clf1',obj1),('clf2',obj2),('clf3',obj3)],
                              voting = 'hard')

soft Voting Classifier

有时少数服从多数并不一定是正确的,更合理的投票是应该有权值的。
一种常用的方法是计算各个分类的概率均值,而不是计算各个分类的个数。

例如
clf1:A-85%,B-15%
clf2:A-40%,B-60%
clf3:A-44%,B-56%
clf4:A-49%,B-51%
clf5:A-99%,B-1%
五个模型,其中1、5预测为A类,而2、3、4预测为B类,若完全依据投票,预测结果应当为B。
但是可以明显看出来2、3、4中分类为B的概率并不高,而1、5中分类为A的概率非常高分别为85%和99%。
这5个模型分类为A的概率均值为(85+40+44+49+99)/5=65.4%,B为35.6,因此应当预测为A。

Bagging、Pasting

虽然使用投票的方法进行集成学习是可以取得很好的效果的,但是一个很大的问题是用于投票的模型其实还是不够(例如上面代码及示例中只有3、5个模型),因此我们需要创建更多的(子)模型。
一个简单的思路就是,创建某一种算法下的多个子模型,每个子模型只使用数据的一部分进行训练。例如数据有1000个,我们用svm算法训练100个模型,每个模型只(随机)看100条数据。
优势:每个子模型不需要太高的准确率(概率论原理)!例如有500个子模型,每个子模型的准确率是60%,他们组合起来的准确率有99.9%

放回取样-Bagging(更常用)

  • 因为是放回取样,因此子模型数量不受数据量限制,可以训练更多的子模型。
  • 相比Pasting而言,Pasting由于不放回,相当于是将数据切割成了几部分进行训练。此时数据怎么分将会严重影响到模型的效果,即Pasting严重依赖于随机性。

不放回取样-Pasting

统计学中放回和不放回一般称为:bootstrap。而在sklearn中,控制放回还是不放回取样其实也是修改bootstrap参数。

sklearn中的Bagging和Pasting

#因为多模型做voting时,最好是使用差异性较大的模型,
#而决策树这种无参模型天然就适合做子模型投票
from sklearn.tree import DescessionTreeClassifier
from sklearn.ensemble import BaggingClassifier
#sklearn中靠boostrap一个参数决定是bagging放回取样还是pasting不放回取样
bagging_clf  = BaggingClassifier(DescessionTreeClassifier(),
                                  n_estimators = 500,
                                  max_sample = 100,
                                  bootstrap=True)

OOB问题

Out-of-Bag是意思是,由于在放回取样时,每次仍然是采取随机抽样的方式进行选取数据进行学习。根据统计,平均大约37%的数据在整个训练过程中是没有被选择到的。
因此,我们就不再进行train-test-split分割数据,而是直接进行训练,训练完后将未参与训练的数据视为test-data,进行测试或评估。sklearn中可以直接使用oob_score_表示剩余数据的得分情况。

from sklearn.tree import DescessionTreeClassifier
from sklearn.ensemble import BaggingClassifier
bagging_clf  = BaggingClassifier(DescessionTreeClassifier(),
                                  n_estimators = 500,
                                  max_sample = 100,
                                  bootstrap=True,
                                  oob_score=True)

并行计算

根据Bagging和Pasting的特点,我们是可以并行计算各个子模型的。可以使用n_jobs指定计算调用的cpu数量。

其他相关讨论

Bootstrap Features

除了对数据进行取样,还可以对特征进行取样,即Random Subspaces,这种方式一般只在特征较多的时候可以使用。
还可以在特征和数据两个方向进行随机取样,即Random Patches。

”“”假设样本只有500个“”“
random_subspaces_clf  = BaggingClassifier(DescessionTreeClassifier(),
                                  n_estimators = 500,#500个子模型
                                  max_sample = 500,#每个模型使用500个数据进行训练
                                  bootstrap=True,#放回取样
                                  oob_score=True,#使用oob进行评估
                                  max_features = 1, #对特征随机采样
                                  bootstrap_features = True #采用放回的方式对特征随机采样
)


”“”假设样本只有500个“”“
random_patches_clf  = BaggingClassifier(DescessionTreeClassifier(),
                                  n_estimators = 500,#500个子模型
                                  max_sample = 100,#每个模型使用100个数据进行训练
                                  bootstrap=True,#放回取样
                                  oob_score=True,#使用oob进行评估
                                  max_features = 1, #对特征随机采样
                                  bootstrap_features = True #采用放回的方式对特征随机采样
)

Boosting

Voting是多个互不相关的模型最终合并生成一个模型。而Boosting是每个模型都尝试增强整体的效果,即多个模型叠加生成最终的模型,不同模型之间是存在关系的。

AdaBoosting

AdaBoosting是在一个模型的基础上,评估预测结果准确情况并修改数据的学习权重,将附加上权值属性的数据点应用到下一个模型。依次迭代学习,形成最终的模型。

GradientBoosting

模型拟合会出现正确预测的部分和错误预测的部分,我们将错误预测部分的数据提出来,(在新的模型上)进行再一次拟合,同样会出现正确的部分和错误的部分。这样不断的将错误部分提出重新进行拟合并生成新的模型,最后将各个模型叠加起来的方式就是GrandientBoosting。

Staking

类似于Voting,生成多个子模型。不同于Voting直接进行投票,Stacking会将这些子模型的输出作为另外一个模型(上层模型)的输入,并对这个模型进行训练,将这个上层模型作为最终输出。
具体方法是:将训练数据分为两个数据集,其中一个数据集进行常规的子模型训练,另外一个数据集输入到这些子模型中,将这些子模型的输出作为另外一个新模型的输入,训练这个新的模型。即最终模型数量为子模型数量+1。
扩展:除了可以子模型的输出作为另外一个新模型的输入这种两层stacking,还可以形成更多的stacking,甚至是第二层里这些子模型的输入不是输入到一个新的模型中,而是输入到多个新模型中,形成一个网络结构等。

相关文章

  • 11 集成学习 - XGBoost案例 - 波士顿房价进行预测

    08 集成学习 - XGBoost概述09 集成学习 - XGBoost公式推导10 集成学习 - XGBoost...

  • 2019-03-02

    ML——集成学习 个体与集成 集成学习:构建并结合多个学习器来完成学习任务。 同质:集成中只包含同种类型的个体学习...

  • 3.1.1.8 集成学习

    集成学习 原理 《机器学习》周志华 8.1 个体与集成 集成学习(ensemble learning) 通过构建并...

  • 10.machine_learning_model_ensemb

    机器学习集成学习与boosting模型 机器学习中的集成学习 顾名思义,集成学习(ensemble learnin...

  • 西瓜书学习笔记-集成学习

    集成学习 个体与集成 集成学习通过构造多个学习器来完成学习任务。集成学习的构造是先产生一组个体学习器,然后用某种策...

  • Task5 模型集成

    这次主要学习的知识点是:集成学习方法、深度学习中的集成学习和结果后处理思路。 1、集成学习方法 在机器学习中的集成...

  • AdaBoost模型

    集成学习是目前很流行的一种机器学习方法,kaggle比赛取得好成绩的队伍几乎都是用的集成学习。 一、集成学习 集成...

  • CV-模型集成

    集成学习方法 集成学习能够提高预测精度,常见的集成学习方法有stacking、bagging和boosting,同...

  • 集成学习

    集成学习与个体学习器 集成学习是机器学习中常用的一种方法,常用的集成学习方法有boosting,bagging以及...

  • 使用sklearn进行集成学习 理论与实践 Random For

    《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》

网友评论

      本文标题:集成学习

      本文链接:https://www.haomeiwen.com/subject/mregactx.html