Boosting和AdaBoost

  • 简介

    • Bagging采用的是一种多个分类器简单评分的方式。而Boosting是和Bagging对应的一种将弱分类器组合成为强分类器的算法框架,它根据分类器学习误差率来更新训练样本的权重。AdaBoost算法就是Boosting算法的一种。它建立在多个若分类器的基础上,为分类器进行权重赋值,性能好的分类器能获得更多权重,从而使评分效果更理想。
  • 原理
    • AdaBoost算法的基本步骤有以下三步。

      • 初始化样本权重,一般进行等权重处理。
      • 训练弱分类器,根据每个分类器的结果更新权重,再进行训练,直到符合条件。
      • 将弱分类器集合成为强分类器,一般是分类器误差小的权重大。
    • 以二元分类问题为例分析AdaBoost算法的原理,对于多元问题和回归问题可以进行类似推理。
      • 假设训练集样本是:T={(x1,y1),(x2,y2),...,(xm,ym)}T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} T={(x1​,y1​),(x2​,y2​),...,(xm​,ym​)}
      • 训练集第k个弱学习器的输出权重为:D(k)=(wk1,wk2,...wkn);w1i=1/m;i=1,2,...mD(k)=(w_{k1},w_{k2},...w_{kn}); w_{1i}=1/m;i=1,2,...m D(k)=(wk1​,wk2​,...wkn​);w1i​=1/m;i=1,2,...m
      • 假设二元分类问题的输出为{−1,1}\{-1,1\}{−1,1},则第k个弱分类器Gk(x)G_k(x)Gk​(x)在训练集上的加权误差率为ek=p(Gk(xi)̸=yi)=∑i=1mWki∣(Gk(xi)̸=yi)e_k=p(G_k(x_i) \not= y_i)=\sum_{i=1}^m W_{ki}|(G_k(x_i) \not= y_i) ek​=p(Gk​(xi​)̸​=yi​)=i=1∑m​Wki​∣(Gk​(xi​)̸​=yi​)
      • 第k个弱分类器Gk(x)G_k(x)Gk​(x)的权重系数为:αk=12log⁡1−ekek\alpha_k={1 \over 2}\log {1-e_k \over e_k} αk​=21​logek​1−ek​​
      • 从上式可以看出,如果分类误差率eke_kek​越大,则对应的弱分类器权重系数αk\alpha_kαk​越小。也就是说,误差率小的弱分类器权重系数越大。
      • 样本权重的更新过程如下,假设第k个弱分类器的样本集权重系数为D(k)=(wk1,wk2,...wkm)D(k)=(w_{k1},w_{k2},...w_{km})D(k)=(wk1​,wk2​,...wkm​),则对应的第k+1个弱分类器的样本集权重系数为:wk+1,i=wkiZKexp(−αkyiGk(xi))w_{k+1,i}={w_{ki} \over Z_K}exp(-\alpha_ky_iG_k(x_i)) wk+1,i​=ZK​wki​​exp(−αk​yi​Gk​(xi​)),这里ZKZ_KZK​是规范因子。
      • 从上面的wk+1,iw_{k+1,i}wk+1,i​的计算公式可以看出,如果第i个样本分类错误,则yiGk(xi)y_iG_k(x_i)yi​Gk​(xi​)导致样本的权重在第k+1个弱分类器中增大;如果分类正确,则权重在第k+1个弱分类器中减小。
      • AdaBoost算法采用加权平均方法进行融合,最终的强分类器为:f(x)=sign(∑k=1kαkGk(x))f(x)=sign(\sum_{k=1}^k \alpha_kG_k(x)) f(x)=sign(k=1∑k​αk​Gk​(x))
    • AdaBoost具有原理简单、分类精度高、能使用各种分类模型来构建弱学习器、不容易过拟合等特点,在实际中得到了广泛应用。
  • 实战
    • 使用AdaBoost进行二元分类
    • 分类器使用sklearn模型(默认使用CART决策树作为弱分类器)
    • 数据集随机生成
    • 代码
      •   # -*-coding:utf-8-*-import numpy as npimport matplotlib.pyplot as pltfrom sklearn.ensemble import AdaBoostClassifierfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.datasets import make_gaussian_quantiles# 生成随机数据集X1, y1 = make_gaussian_quantiles(cov=2.0,n_samples=500,n_features=2,n_classes=2,random_state=1)X2, y2 = make_gaussian_quantiles(mean=(3, 3),cov=1.5,n_samples=400,n_features=2,n_classes=2,random_state=1)X = np.concatenate((X1, X2))y = np.concatenate((y1, -y2+1))# 绘制散点图,将数据可视化plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)plt.show()# 该参数准确率最高bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),algorithm='SAMME',n_estimators=600,learning_rate=0.7)# 训练bdt.fit(X, y)# 生成网格图查看拟合区域x_min, x_max = X[:, 0].min()-1, X[:, 0].max()+1y_min, y_max = X[:, 1].min()-1, X[:, 1].max()+1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))Z = bdt.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)plt.contour(xx, yy, Z, cmap=plt.cm.Paired)plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)plt.show()# 查看AdaBoost方法的分类精度print(bdt.score(X, y))
        
    • 运行效果
  • 补充说明
    • 参考书为《Python3数据分析与机器学习实战》,对部分错误修改
    • 具体数据集和代码见我的Github,欢迎Star或者Fork

机器学习-集成之AdaBoost算法原理及实战相关推荐

  1. 机器学习-关联之FP-Growth算法原理及实战

    FP-Growth 简介 FP-Growth算法是一种发现数据集中频繁模式的有效方法,它在Apriori算法的原理的基础上,采用FP(Frequent Pattern,频繁模式)树数据结构对原始数据进 ...

  2. 机器学习-关联之Apriori算法原理及实战

    Apriori算法 前言 关联分析是一种无监督的机器学习方法,主要用于发现大规模数据集中事物之间的依存性和关联性.挖掘数据中隐藏的有价值的关系(如频繁项集.关联规则),有利于对相关事物进行预测,也能帮 ...

  3. adaboost 算法 原理

    Adaboost 算法 算法简介 (1)adaboost是有监督的分类算法 有监督 无监督的区别,直观来看,区别在于训练集中,是否需要包括因变量Y. 例如: 无监督算法 -- K-means聚类算法, ...

  4. Adaboost算法原理分析和实例+代码(简明易懂)

    Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333   ...

  5. Adaboost算法原理分析和实例+代码(转载)

    [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时 ...

  6. 【机器学习】Softmax Regression算法原理与java实现

    [机器学习]Softmax Regression算法原理与java实现 1.Softmax Regression算法原理 1.1.样本概率 1.2.损失函数 1.3.梯度下降法训练模型 2.java实 ...

  7. 【AdaBoost算法】集成学习——AdaBoost算法实例说明

    [AdaBoost算法]集成学习--AdaBoost算法实例说明 AdaBoost算法是数据挖掘十大算法之一,但是部分参考书上只给了该算法的数学推导过程,具体的流程并未详细举例加以解释,因此不利于学习 ...

  8. 机器学习 - [集成学习]Bagging算法的编程实现

    机器学习 - [集成学习] Bagging算法的编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...

  9. AdaBoost算法原理

    AdaBoost算法原理 前言 1.AdaBoost(Adaptive Boosting)是boosting类算法最著名的代表. 2.Kearns 和 Valiant首先提出了"强可学习&q ...

最新文章

  1. 计算机学院会会,学生分会——计算机学院学生会
  2. 2020全球Top10 AI专利公司:美国过半,中国仅占两席
  3. [CTO札记]高效能辅导(Coach)转摘
  4. TypeScript的推介与应用
  5. c语言编程功率谱,有谁会用C编写求功率谱(答案越多越好)
  6. zblog php 指定分类,zblogPHP 为某些分类指定分类模板,后台版方法
  7. Qt图形界面编程入门(基本窗口及控件)
  8. linux runqueue定义,Linux中多CPU的runqueue及抢占
  9. PHP:10个不常见却非常有用的PHP函数
  10. mysql 复制_MySQL的复制功能
  11. 2019蓝桥杯Java决赛题答案_2019-01-15 第八届蓝桥杯javaB组第二题
  12. linux嵌入式第一阶段,零基础学嵌入式编程系列第一阶段Linux操作系统基础知识.ppt...
  13. 林锐:5 C++/C程序的基本概念
  14. 兰州大学计算机基础在线考试,[兰州大学]《计算机基础》2020年5月考试在线考核试题...
  15. open3d 0.13的c++版本使用demo
  16. c语言数组回文数编写字符串,回文数C语言(示例代码)
  17. 计算机相关知识——前端Base64编码解码的基础使用
  18. 奥斯卡大乌龙,然而人工智能也预测《爱乐之城》为最佳影片
  19. 轻体重者入门跑鞋选购全攻略(包括跑姿分析及跑鞋推荐)
  20. Linux命令详解之 ls

热门文章

  1. SpringMVC核心流程图
  2. MyBatis 实际使用案例-mappers
  3. Spring容器初始化实现V2 版本
  4. 对称加密-DES解密
  5. 配置Swagger2
  6. mysql count 排序_SQL进阶排序和窗口函数
  7. 我们是python_我们生活在“Python时代”
  8. dicom格式怎么转换_QQ音乐下载的歌曲怎么转换MP3?音频转换格式详细教程
  9. php 微信机器人_微信小程序机器人自动客服功能
  10. 在 IntelliJ IDEA 中误添加自定义的 JavaDoc 标签,如何删除