1. 概述

AdaBoost是英文“Adaptive Boosting”(自适应增强)的缩写,它的自适应在于:前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器。

将学习器的重点放在“容易”出错的样本上。可以提升学习器的性能。

2. 示例


       如图所示,4被分类错误,所以在下次选取样本时,它的权值会增大。

3. 算法步骤

  1. 首先,初始化训练数据的权值分布D_1。假设有N个训练样本数据,则每一个训练样本最开始时都被赋予相同的权值:w_1=1/N。
  2. 然后,训练弱分类器h_i。具体训练过程是:如果某个训练样本点被弱分类器h_i准确的分类,那么在构造下一个数据集中,它对应的权值要减小;相反,如果某个训练样本点被错误分类,那么它的权值就应该增大。权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
  3. 最后,将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其咋最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换而言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。


AdaBoost训练过程:

AdaBoost判断过程:

4. 代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn import tree
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_gaussian_quantiles
from sklearn.metrics import classification_report# 生成2维正态分布,生成的数据按分位数分为两类,500个样本,2个样本特征
x1, y1 = make_gaussian_quantiles(n_samples=500, n_features=2,n_classes=2)
# 生成2维正态分布,生成的数据按分位数分为两类,400个样本,2个样本特征均值都为3
x2, y2 = make_gaussian_quantiles(mean=(3, 3), n_samples=500, n_features=2, n_classes=2)
# 将两组数据合成一组数据
x_data = np.concatenate((x1, x2))
y_data = np.concatenate((y1, - y2 + 1))plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()

输出:

# 决策树模型
model = tree.DecisionTreeClassifier(max_depth=3)# 输入数据建立模型
model.fit(x_data, y_data)# 获取数据值所在的范围
x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1
y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1# 生成网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))z = model.predict(np.c_[xx.ravel(), yy.ravel()])# ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据
z = z.reshape(xx.shape)
# 等高线图
cs = plt.contourf(xx, yy, z)
# 样本散点图
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()

输出:

# AdaBoost模型
model = AdaBoostClassifier(DecisionTreeClassifier(max_depth=3),n_estimators=10)
# 训练模型
model.fit(x_data, y_data)# 获取数据值所在的范围
x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1
y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1# 生成网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))# 获取预测值
z = model.predict(np.c_[xx.ravel(), yy.ravel()])
z = z.reshape(xx.shape)
# 等高线图
cs = plt.contourf(xx, yy, z)
# 样本散点图
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()

输出:

【机器学习】集成学习--AdaBoost相关推荐

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

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

  2. 集成学习—Adaboost(理解与应用)

    在上一篇集成学习-Adaboost(论文研读)中已经将Adaboost的原始论文精读了一遍,这篇博客主要是对Adaboost算法(主要是二分类的Adaboost)进行更深入的理解和推导,以及尝试下关于 ...

  3. 集成学习—Adaboost(论文研读)

    这篇博客主要是对Adaboost算法的论文精度,包括翻译以及自己的一些基本理解,如果对原论文不感兴趣,只是想快速理解与应用,可以参考另外一篇集成学习-Adaboost(理解与应用) Adaboost是 ...

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

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

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

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

  6. 机器学习——集成学习算法(Adaboost、随机森林)

    集成算法简述 什么是集成学习 如何得到多个个体学习器 集成学习常用算法 Bagging 自助采样 学习器结合 包外估计 随机森林 Adaboost Boosting Adaboost算法原理 注意 什 ...

  7. 机器学习知识点(十六)集成学习AdaBoost算法Java实现

    理解http://blog.csdn.net/fjssharpsword/article/details/61913092中AdaBoost算法,从网上找了一套简单的代码加以理解. 1.基分类器,实现 ...

  8. 机器学习集成学习与模型融合!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,深圳大学,Datawhale高校群成员 对比过kaggle ...

  9. 集成学习-Adaboost

    Author: 鲁力; Email: jieyuhuayang@foxmail.com Datawhale Adaboost 算法简介 集成学习(ensemble learning)通过构建并结合多个 ...

  10. 【机器学习基础】浅析机器学习集成学习与模型融合

    作者:李祖贤,深圳大学,Datawhale高校群成员 对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物.集成学习可谓是上分大杀器,今天就跟大家分享在Kagg ...

最新文章

  1. 【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )
  2. leetcode_add_two_numbers
  3. 听腾讯 TEG 大佬谈腾讯万亿级 Elasticsearch 技术解密
  4. 依附B2B平台照样做搜索营销
  5. 有机物燃烧的化学方程式配平(洛谷P1994题题解,Java语言描述)
  6. 关于token你需要知道的
  7. 用装饰器来进行登录验证
  8. mysql提供的六种约束_MySQL中的六个约束
  9. 数据结构实验——就餐人数最多的时间段
  10. 如何写出如散文般的代码――《代码整洁之道》读书笔记(Ch1-Ch3)
  11. oracle查询排名第二,2020年2月数据库排名:第一是Oracle,第二是MySQL,SQLite进前十名...
  12. 用友摩天获“2021最受欢迎企业数智化学习认证社区”殊荣
  13. php url 减号,PHP编码转换减号(连接符)无法转换问题
  14. 万物互联背景下的边缘计算安全需求与挑战
  15. python第五次笔记
  16. c中double型比较大小
  17. 查询计算机系统操作工,计算机系统操作工B卷
  18. mingw linux c 开发环境,MSYS2和MINGW的开发环境安装
  19. fedora17下nvidia双显卡闭源驱动的安装
  20. CCF C³活动第二期主题“智能家居”,与CTO聚首小米科技园!

热门文章

  1. python如何只保留数字_如何查询刷卡消费有没有积分?只需用4个数字马上能查...
  2. 6.GD32F103C8T6 定时器的基本使用
  3. 用winformz时间格式不正确_霜冻不可怕,用生态防寒布正确预防减少损失
  4. 从零学习perl语言--perl学习笔记(1)--从基础概念到hello world编写(本文约1000字)
  5. android 6.0电池优化,Android 优化——电量优化
  6. W25Q128 闪存芯片SPI详解
  7. 统计分组的原则是要体现什么_跨境选品有哪些方法,要遵循什么原则?
  8. mysql like 贪婪匹配_mysql模糊查询like与REGEXP的使用详细介绍
  9. 《深入理解 Spring Cloud 与微服务构建》第六章 服务注册和发现 Eureka
  10. 力扣326.3的幂 C/C++