一,Boosting算法概论

boosting是一族可将弱学习器提升为强学习器的算法。booting中所使用的多个分类器的类型都是一致的,并且不同分类器是通过串行训练而获得的,每个新分类器都根据已训练出的分类器的性能进行训练。Boosting是通过集中关注被已有分类器错分的那些数据来获得新的分类器。boosting分类的结果是基于所有分类器的加权求和结果的,因此boosting中的分类器权重并不相等,每个权重代表的是对应分类器在上一轮迭代中的成功度。boosting算法通过分布迭代(stage-wise)的方式来构建模型,在迭代的每一步中构建的弱分类器都是为了弥补已有模型的不足。(个体学习器之间存在强依赖关系)

样本加权的过程如下:

上图中被放大的点是被加权的样本,样本加权后,在下一次的学习中就会收到更多的关注。也就是说,boosting算法对分类错误的样本更加关注,通过改变分类错误样本的权重来改变下一个弱分类器的分类边界,从而一步步提升分类算法的准确度。

boosting算法拥有多个版本,其中Adaboost算法是其中最流行的版本。

二、Adaboost算法概述

Adaboost是adaptive boosting(自适应boosting)的缩写,其运行过程如下:训练数据中的每一个样本,赋予一个权重,这些权重构成了向量D。一开始,这些权重都初始化为相等值。首先在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后再同一个数据集上再次训练弱分类器,在分类器的第二次训练当中,将会重新调整每个样本的权值,其中,第一次分对的样本的权重将会降低,分错样本的权重将会提高。为了从所有弱分类器中得到最终的分类结果,adaboost为每个分类器都分配一个权重值alpha,这些alpha值是基于每个弱分类器的错误率进行计算的,其中错误率是:

加权后的错误率是:

alpha的计算公式:

计算出alpha值之后,就可以对权重向量D进行更新,以使得那些正确分类的样本的权重降低而错分样本的权重升高。

如果某个样本被正确分类,那么该样本的权重更改为:

如果某个样本被错分,那么该样本的权重更改为:

综合起来就是:

在计算出D之后,Adaboost有开始进入下一轮的迭代。Adaboost算法会不断地重复训练和调整权重的过程,直到错误率为0或者弱分类器的数目达到用户的指定值为止。

关于adaboost中的两种权重

adaboost算法中有两种权重,一种是数据的权重,另一种是弱分类器的权重。其中,数据的权重主要用于弱分类器寻找分类误差最小的决策点,找到之后用这个最小误差计算出弱分类器的权重,分类器的权重越大说明该弱分类器在最终决策时有更大的发言权。

数据的权重:如果训练数据保持不变,那么弱分类器每次找到的最佳决策点都是一样的。这时候,数据的权重就派上用场了,数据的权重主要用于弱分类器寻找其分类误差最小的点。举个例子,在以前没有权重时,一共是十个点,对应每个点的权重都是0.1,分错一个错误率就是0.1;分错三个,错误率就是0.3。现在,每个点的权重不一样了,分别为【0.01,0.01,0.01,0.01,0.01,0.01, 0.01,0.01,0.01,0.91】,如果分错分错第一个点,错误率就是0.01。如果分错第三个点,错误率是0.01。,要是如果分错最后一个点时,错误率就是0.91。这样一来在选择决策点时就会把权重大 的点分对才能降低误差率。由此可见,权重大的点得到更多的关注,权重小的点得到更少的关注。

图示说明Adaboost过程:

图中,“+”和“-”分别表示两个类别,在这个过程中,使用水平或者垂直的直线作为分类器来进行分类。

第一步:

根据分类的正确率,得到一个新的样本分布D2,一个子分类器h1。

其中画圈的是被分错的,分错的样本会增大权重。

第二步:

根据分类的正确率,得到一个新的样本分布D3,一个子分类器h2。

第三步:

得到第三个子分类器h3

整合所有子分类器:

从结果可以看出,即使是简单的弱分类器,组合起来可以获得很好的分类效果。

sklearn类库中的Adaboost应用:

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

class sklearn.ensemble.AdaBoostRegressor(base_entimator=None, n_estimators=50, learning_rate=1.0, loss="linear", random_state=None)

参数:

(1)base_estimator:即弱分类学习器理论上可以选择任何一个分类器,不过需要支持样本权重。我们常用的一般是CART决策树或者神经网络MLP。默认是决策树,即AdaBoostClassifier默认使用CART分类树DecisionTreeClassifier,而AdaBoostRegressor默认使用CART回归树DecisionTreeRegressor。

(2)algorithm:这个参数只有在AdaBoostClassifier中有。主要原因是scikit-learn实现了两种Adaboost分类算法,SAMME和SAMME.R。两者的主要区别是弱分类器权重的度量。SAMME使用了样本集分类效果作为弱分类器的权重,即误差率得到的权重;而SAMME.R使用了对样本集分类的预测概率大小作为权重。由于SAMME.R使用了概率度量的连续值,迭代一般比SAMME快,因此AdaBoostClassifier的默认算法algorithm的值是SAMME.R。但是注意的是使用了SAMME.R后,弱分类器参数base_estimator必须限制使用支持概率预测的分类器。而SAMME算法则没有这个限制。

(3)n_estimators:两者都有,就是我们弱分类器的最大迭代次数,或者最大的弱学习器的个数。一般来说n_eatimators太小,容易欠拟合,太大又容易过拟合,默认是50.在实际调参过程中,我们常常将n_eatimators和learning_rate一起考虑。

(4)learning_rate:两者都有,即每个弱学习器的权重缩减系数。

主要方法:

(1)fit(x,y): 从训练集中创建一个提升分类器

(2)get_params():得到模型的参数

(3)predict(x):预测

(4)score(x,y):验证集上验证算法的精度

from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import load_iris
from sklearn import model_selection
#import matplotlib.pyplot as plt
iris = load_iris()
x_train,x_test,y_train,y_test = model_selection.train_test_split(iris.data,iris.target,test_size=0.2,random_state=0)
abc = AdaBoostClassifier(n_estimators=100)
abc.fit(x_train,y_train)
abc.score(x_test,y_test)
0.90000000000000002
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import load_iris
from sklearn import model_selection
from sklearn.tree import DecisionTreeClassifier
#import matplotlib.pyplot as plt
iris = load_iris()
x_train,x_test,y_train,y_test = model_selection.train_test_split(iris.data,iris.target,test_size=0.2,random_state=0)
abc = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2,min_samples_split=20, min_samples_leaf=5),n_estimators=100)
abc.fit(x_train,y_train)
abc.score(x_test,y_test)

1.0(震惊脸-_-)

参考:https://blog.csdn.net/zwqjoy/article/details/80424783

http://www.cnblogs.com/pinard/p/6136914.html

机器学习(四)——Adaboost算法相关推荐

  1. 【机器学习】adaboost算法

    [机器学习]adaboost算法 转载自:https://blog.csdn.net/guyuealian/article/details/70995333(算法原理与实例结合讲解很好!) 一.Ada ...

  2. eclipse的jsp第一行代码报错_机器学习之AdaBoost算法及纯python代码手工实现

    Adaboost算法是boost算法中最具代表性的一个,它是adaptive boosting的简称(自使用算法);在训练数据中的每个样本赋予一个权重,构成初始的向量D(每个样本的权重初始时均相等). ...

  3. 机器学习:AdaBoost算法及其实现

    文章目录 楔子 算法描述: adaboost里的样本权重和话语权 算法描述 AdaBoost的实现: 数学基础(了解) 楔子 前面提到boosting算法为一类算法,这一类算法框架分为3步:1.训练一 ...

  4. 【白话机器学习】算法理论+实战之AdaBoost算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

  5. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. 机器学习(machine learning)之AdaBoost算法

    转自:http://blog.csdn.net/haidao2009/article/details/7514787   浅谈 Adaboost 算法 机器学习是利用一些方法来使机器实现人的学习行为, ...

  7. 强化学习ppt_机器学习原理、算法与应用配套PPT第四部分(深度学习概论、自动编码器、强化学习、聚类算法、半监督学习等)...

    本文是SIGAI公众号文章作者雷明编写的<机器学习>课程新版PPT第四部分,包含了课程内容的深度学习概论,自动编码器,受限玻尔兹曼机,聚类算法1,聚类算法2,聚类算法3,半监督学习,强化学 ...

  8. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

    机器学习 集成学习篇--python实现Bagging和AdaBOOST算法 摘要 Bagging算法 Adaboost算法 摘要 本文通过python实现了集成学习中的Bagging和AdaBOOS ...

  9. 机器学习-集成之AdaBoost算法原理及实战

    Boosting和AdaBoost 简介 Bagging采用的是一种多个分类器简单评分的方式.而Boosting是和Bagging对应的一种将弱分类器组合成为强分类器的算法框架,它根据分类器学习误差率 ...

最新文章

  1. object-c中管理文件和目录:NSFileManager使用方法
  2. 向oracle中导入*.csv文件
  3. 基因组重复序列检测:RepeatMasker
  4. 新建arcgis api for android 项目失败
  5. 阿里1582.73亿营收背后的持续交付如何玩?
  6. 引导win7+linux系统安装,win7 + ubuntu16.04LTS双系统安装(Legacy引导模式)
  7. Qt QWidget实现消息提示控件TipsWidget
  8. idea中新建分支并且切换到新建的分支上
  9. eclipse连接mysql_专题一、flask构建mysql数据库正确姿势
  10. android 时钟动态图标,Android 8.1 Launcher3实现动态指针时钟功能
  11. Spark on YARN的部署
  12. 亮风台AR眼镜震撼发布 HiAR 产品全面升级
  13. 丁小平:人类究竟需要什么样的微积分原理
  14. java socket 发对象_Java Socket 发送对象
  15. 基于Spring-statemachine的有限状态机(FSM)的介绍及示例
  16. JAVA:实现RabinKarpAlgorithm拉宾卡普算法(附完整源码)
  17. USRP_X310_Device_Recovery手册
  18. iOS:xcode5 自定义模板
  19. Windows下和Linux下VS Code与C/C++ Python Go Java Vue3 Git vim Latex开发环境搭建和配置史上最详细易懂的讲解
  20. Eureka 没凉,别过度悲伤

热门文章

  1. 使用EasyExcel进行百万数据文件导出思路
  2. Ui设计中常用的6大工具
  3. ValueError:too many values to unpacked(expect2)
  4. PostgreSQL 修改密码
  5. shell脚本之遍历字符串数组
  6. loadrunnner3
  7. mos管的rc吸收电路计算_RC吸收计算应用.doc
  8. EF框架(一)搭建过程
  9. 朴素贝叶斯模型、SVM模型笔记
  10. VMWare:vSphere6 企业版参考序列号