专栏首页张俊红Sklearn参数详解—Adaboost

Sklearn参数详解—Adaboost

总第112篇

前言

今天这篇讲讲集成学习,集成学习就是将多个弱学习器集合成一个强学习器,你可以理解成现在有好多道判断题(判断对错即01),如果让学霸去做这些题,可能没啥问题,几乎全部都能做对,但是现实情况是学霸不常有,学渣倒是很多,怎么样做才能保证题做对的准确率较高呢?就是让多个学渣一起做, 每个人随机挑选一部分题目来做,最后将所有人的结果进行汇总,然后根据将票多者作为最后的结果;另一种方式就是先让学渣A做一遍,然后再让学渣B做,且让B重点关注A做错的那些题,再让C做,同样重点关注B做错的,依次循环,直到所有的学渣都把题目做了一遍为止。通过上面两种方式就可以做到学渣也能取得和学霸一样的成绩啦。我们把这种若干个学渣组合达到学霸效果的这种方式称为集成学习

注:这里的学渣并无它意,请勿过度解读。

理解了集成学习的原理以后,我们来看看关于集成学习的一些理论知识。

理论知识

集成学习,就是将多个弱学习器集合成一个强学习器,那么我们如何来选取弱学习器呢,主要有两种方式。

  • 第一种是所有的弱学习器都是一个种类的,比如都是决策树模型。
  • 另一种是所有的弱学习器并不完全一样,你可以用LR预测一个结果,然后再用贝叶斯预测一个,再用SVM预测一个,然后对三个模型的预测结果进行投票,票数多者做为最后的结果。

我们实际业务中用的比较多的都是用同一种类的弱学习器去集合成一个强学习器。

我们找到了弱学习器以后就可以对弱学习器进行组合,组合的方式也有两种,划分依据主要是看弱学习器之间是否有联系。

  • 一种是弱学习器之间没有联系,每个弱学习器都是随机从总样本中抽取部分数据集(有放回抽样)进行训练,各个弱学习器之间是并联关系,这样就会生成若干个弱学习器,这种集成方式叫做bagging。随机森林(RF)是bagging中比较有代表的算法。
  • 另一种是弱学习器之间是相互联系的,先所有训练集样本上训练一个基模型,然后根据基模型的分类效果,把那些分类错误的样本给予较高的权重(默认n个样本中每个样本的权重为1/n),再次进行训练,这样又会得出一个模型,模型又会有错分类的,再次提高这些错分类样本的权重;如此循环,直到满足预先设定的弱分类器数目。这种集成方式中各个弱学习器是串联关系,每个弱学习器是建立在前一个弱学习器的基础上的,我们把这种方式称为boosting。Boosting系列算法里主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树中应用最广最普遍的算法就是梯度提升树(Gradient Boosting Tree)。

Adaboost-模型

讲完了集成学习,顺便讲讲Sklearn中Adaboost模型,关于Adaboost模型的原理篇见:提升方法-Adaboost算法

Adaboost-参数

class sklearn.ensemble.AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm='SAMME.R', random_state=None)

base_estimator:基分类器,默认是决策树,在该分类器基础上进行boosting,理论上可以是任意一个分类器,但是如果是其他分类器时需要指明样本权重。 n_estimators:基分类器提升(循环)次数,默认是50次,这个值过大,模型容易过拟合;值过小,模型容易欠拟合。 learning_rate:学习率,表示梯度收敛速度,默认为1,如果过大,容易错过最优值,如果过小,则收敛速度会很慢;该值需要和n_estimators进行一个权衡,当分类器迭代次数较少时,学习率可以小一些,当迭代次数较多时,学习率可以适当放大。 algorithm:boosting算法,也就是模型提升准则,有两种方式SAMME, 和SAMME.R两种,默认是SAMME.R,两者的区别主要是弱学习器权重的度量,前者是对样本集预测错误的概率进行划分的,后者是对样本集的预测错误的比例,即错分率进行划分的,默认是用的SAMME.Rrandom_state:随机种子设置。

关于Adaboost模型本身的参数并不多,但是我们在实际中除了调整Adaboost模型参数外,还可以调整基分类器的参数,关于基分类的调参,和单模型的调参是完全一样的,比如默认的基分类器是决策树,那么这个分类器的调参和我们之前的Sklearn参数详解——决策树是完全一致。

Adaboost-对象

先生成一个分类器

from sklearn.datasets import load_iris
from sklearn.ensemble import AdaBoostClassifier
iris=load_iris()
model=AdaBoostClassifier(n_estimators=100)
clf=model.fit(iris.data,iris.target)python

estimators_:以列表的形式返回所有的分类器。

运行结果

列表长度 可以看到该对象得到的list的长度为100,刚好是咱们自定义的基分类器个数。 classes_:类别标签

运行结果 estimator_weights_:每个分类器权重。

estimator_errors_:每个分类器的错分率,与分类器权重相对应。

feature_importances_:特征重要性,这个参数使用前提是基分类器也支持这个属性。

Adaboost-方法

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)在模型上的准确率。 staged_decision_function(X):返回每个基分类器的决策函数值 staged_predict(X):返回每个基分类器的预测数据集X的结果。 staged_predict_proba(X):返回每个基分类器的预测数据集X的概率结果。 staged_score(X, Y):返回每个基分类器的预测准确率。

Adaboost的大部分方法和其他模型基本一致,比其他模型多了几个staged方法。staged是返回每个基分类的结果。

可以看到,直接运行staged方法,不会直接输出结果,而是输出一个生成器,要想得到具体的结果,需要遍历打印输出。

还可以看到,共输出100项,这正好是我们100个基分类器的结果。

本文分享自微信公众号 - 张俊红(zhangjunhong0428)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 提升方法-Adaboost算法

    总第85篇 01|基本概念: 提升方法的基本思想:对于任何一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比任何一个专家单独的判断好。 先来看...

    张俊红
  • Sklearn参数详解—GBDT

    这篇介绍Boosting的第二个模型GBDT,GBDT和Adaboost都是Boosting模型的一种,但是略有不同,主要有以下两点不同:

    张俊红
  • 数据结构-常用的排序算法

    好久不见哈,我终于又更新了,惊不惊喜,意不意外,哈哈哈哈。等之后会专门写一篇文章给大家汇报汇报我最近在忙什么呢,今天这篇还是接着之前的数据结构系列继续,主要讲讲...

    张俊红
  • 学界 | Ian Goodfellow牵头举办NIPS机器学习对抗赛,提升系统鲁棒性

    via pulse2 每年年底举办的 NIPS 都是令学者为之一振的顶级学术盛会。AI 科技评论了解到,今年首次增加了一个新议程,即「NIPS 2017 Com...

    AI科技评论
  • 机器学习中Bagging和Boosting的区别

    Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类...

    机器学习算法工程师
  • 详解配置Visual Studio/Webstorm来调试JavaScript

    译者按: 本文介绍了使用 Node Inspector 来调试 JavaScript 和 TypeScript 应用。

    Fundebug
  • 如何在Ubuntu 16.04上设置时间同步

    准确的计时已成为现代软件部署的关键组成部分。无论是确保以正确的顺序记录日志还是正确应用数据库更新,不同步的时间都可能导致错误,数据损坏和其他难以调试的问题。

    小皇帝James
  • kafka使用avro序列化和反序列化

    使用avro生成entity文件可以查看这篇文章https://blog.csdn.net/u012062455/article/details/8488969...

    我是李超人
  • Katalon Studio之接口测试中token处理

    1、新建一个API/Web Service的项目,在Object Repository中添加Web Service Request,method选择post,设...

    小老鼠
  • 分片加载超长列表渲染

    很早以前就有面试问超长列表如何优化,那时候觉得一般前端不会有这种功能,有也是分页,也就没有去关注。今天分享一个超长列表渲染的优化方法,分片加载,现在几乎也都不会...

    wade

扫码关注云+社区

领取腾讯云代金券