集成学习Boosting

集成学习大致可分为两大类:BaggingBoosting。Bagging一般使用强学习器,其个体学习器之间不存在强依赖关系,容易并行。Boosting则使用弱分类器,其个体学习器之间存在强依赖关系,是一种序列化方法。Bagging主要关注降低方差,而Boosting主要关注降低偏差。Boosting是一族算法,其主要目标为将弱学习器“提升”为强学习器,大部分Boosting算法都是根据前一个学习器的训练效果对样本分布进行调整,再根据新的样本分布训练下一个学习器,如此迭代M次,最后将一系列弱学习器组合成一个强学习器。而这些Boosting算法的不同点则主要体现在每轮样本分布的调整方式上。

AdaBoost原理简介

AdaBoost算法是Adaptive Boost的简称,Boosting通过将一系列弱学习器组合起来,通过集成这些弱学习器的学习能力,得到一个强学习器。具体到AdaBoost算法,AdaBoost在之前学习器的基础上改变样本的权重,增加那些之前被分类错误的样本的比重,降低分类正确样本的比重,这样之后的学习器将重点关注那些被分类错误的样本。最后通过将这些学习器通过加权组合成一个强学习器,具体的,分类正确率高的学习器权重较高,分类正确率低的学习器权重较低。

AdaBoost 算法流程

  • 输入:训练集 D=((x1,y1),(x2,y2),...,(xm,ym))D=((x_1,y_1),(x_2,y_2),...,(x_m,y_m))D=((x1​,y1​),(x2​,y2​),...,(xm​,ym​)) ,训练轮数T,和一个基学习算法L。
  • 首先,让所有数据的权重都为 D1(x)=1mD_1(x) = \frac{1}{m}D1​(x)=m1​;
  • 然后,对于每一轮的train过程,得到一个基学习器 ht=L(D,Dt)h_t = L(D,D_t)ht​=L(D,Dt​);
  • 计算这个基学习器 hth_tht​ 在训练数据集D上的误差 ϵt=Px∼Dt(ht(x)≠f(x))\epsilon_t = P_{x\sim D_t}(h_t(x)\ne f(x))ϵt​=Px∼Dt​​(ht​(x)​=f(x));
  • 如果这个误差大于0.5,那么直接停止本轮的train,进行下一轮;
  • 计算此轮基学习器在最终的模型中所占的权重 αt=12ln1−ϵtϵt\alpha_t=\frac{1}{2}ln \frac{1-\epsilon_t}{\epsilon_t}αt​=21​lnϵt​1−ϵt​​;
  • 对于在这一轮基学习器中做错的样本和做对的样本进行调整: Dt+1(x)=Dt(x)Ztexp(−αtf(x)ht(x))D_{t+1}(x) = \frac{D_t(x)}{Z_t}exp(-\alpha_tf(x)h_t(x))Dt+1​(x)=Zt​Dt​(x)​exp(−αt​f(x)ht​(x));
  • 上述中的 ZtZ_tZt​ 是一个规范化因子;一般Z(m)=∑i=1Nω(m)ie−yiαmGm(xi)Z^{(m)}=\sum_{i=1}^{N}\omega^{(m)}ie^{-y_{i}\alpha_{m}G_{m}(x_{i})}Z(m)=∑i=1N​ω(m)ie−yi​αm​Gm​(xi​),以确保所有的ω(m+1)\omega^{(m+1)}ω(m+1)构成一个分布;
  • 最终,得到ensemble后的model为 H(x)=sign(∑t=1Tαtht(x))H(x)=sign(\sum_{t=1}^T\alpha_th_t(x))H(x)=sign(∑t=1T​αt​ht​(x));

最后一步的模型Ensemble如下图所示,前面的数字表示α(t)\alpha(t)α(t),后面表示学习到的三个基学习器。

动手实践

在 Python 环境下使用 Adaboost 进行手写数字识别。

import pandas as pd
import numpy as np
import matplotlib.pyplot as pltfrom sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifierfrom sklearn.metrics import accuracy_score
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
from sklearn.model_selection import train_test_split
from sklearn.model_selection import learning_curvefrom sklearn.datasets import load_digits

首先,载入数据

dataset = load_digits()
X = dataset['data']
y = dataset['target']

X 包含长度为 64 的数组,它们代表了简单的 8x8 的平面图像。使用该数据集的目的是为了完成手写数字识别任务。下图为一个给定的手写数字的示例:

如果我们坚持使用深度为 1 的决策树分类器(决策树桩),以下是如何在这种情况下实现 AdaBoost 分类器:

reg_ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1))
scores_ada = cross_val_score(reg_ada, X, y, cv=6)
scores_ada.mean()

这样得到的分类准确率的结果应该约为 26%,还具有很大的提升空间。其中一个关键的参数是序列决策树分类器的深度。那么,决策树的深度如何变化才能提高分类准确率呢?

core = []
for depth in [1,2,10] : reg_ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=depth))scores_ada = cross_val_score(reg_ada, X, y, cv=6)score.append(scores_ada.mean())

在这个简单的例子中,当决策树的深度为 10 时,分类器得到了最高的分类准确率 95.8%。

机器学习十大经典算法之AdaBoost相关推荐

  1. 数据挖掘十大经典算法之——AdaBoost 算法

    数据挖掘十大经典算法系列,点击链接直接跳转: 数据挖掘简介及十大经典算法(大纲索引) 1. 数据挖掘十大经典算法之--C4.5 算法 2. 数据挖掘十大经典算法之--K-Means 算法 3. 数据挖 ...

  2. 机器学习十大经典算法之岭回归和LASSO回归

    机器学习十大经典算法之岭回归和LASSO回归(学习笔记整理:https://blog.csdn.net/weixin_43374551/article/details/83688913

  3. 机器学习十大经典算法:深入浅出聊贝叶斯决策(贝叶斯公式,最小风险贝叶斯,最小错误贝叶斯)

    前言    常听人说,在学习一个东西时,如果能够深入浅出的讲给别人听,才算是真的懂了.最近正好在学模式识别,于是就用它来练笔了.贝叶斯决策(Bayes Decision) 是十大经典机器学习算法之一, ...

  4. pagerank数据集_机器学习十大经典算法-PageRank(附实践代码)

    Yo, yo, check it out. 保证看完不晕倒... 如果公式让你脑瓜疼,请忽略公式,或者忽略脑瓜. Kagging咖金:推荐系统之关联规则(附实践代码)​zhuanlan.zhihu.c ...

  5. 数据挖掘领域十大经典算法之—AdaBoost算法(超详细附代码)

    相关文章: 数据挖掘领域十大经典算法之-C4.5算法(超详细附代码) 数据挖掘领域十大经典算法之-K-Means算法(超详细附代码) 数据挖掘领域十大经典算法之-SVM算法(超详细附代码) 数据挖掘领 ...

  6. 机器学习十大经典算法之决策树

    机器学习经典十大算法 机器学习/人工智能的子领域在过去几年越来越受欢迎.目前大数据在科技行业已经炙手可热,而基于大量数据来进行预测或者得出建议的机器学习无疑是非常强大的.一些最常见的机器学习例子,比如 ...

  7. 机器学习十大经典算法之KNN最近邻算法

    KNN简介 KNN(K-NearestNeighbor)是机器学习入门级的分类算法,非常简单.它实现将距离近的样本点划为同一类别:KNN中的K指的是近邻个数,也就是最近的K个点 :根据它距离最近的K个 ...

  8. 机器学习十大经典算法

    本文介绍了机器学习新手需要了解的 10 大算法,包括线性回归.Logistic 回归.朴素贝叶斯.K 近邻算法等. 在机器学习中,有一种叫做「没有免费的午餐」的定理.简而言之,它指出没有任何一种算法对 ...

  9. 机器学习十大经典算法之随机森林

    随机森林简介 随机森林是机器学习一种常用的方法.它是以决策树为基础,用随机的方式排列建立的,森林里每个决策树之间都是没有关联的. 在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策 ...

最新文章

  1. 浅谈Transformer 及Attention网络
  2. CentOS7定制封装发行版-基于CentOS minimal
  3. 计算机英语学情分析怎么写,2016年信息技术教学计划及学情分析(600字)
  4. C++编码中减少内存缺陷的方法和工具
  5. 用c语言绘制自定义图形,Android使用自定义View绘图
  6. 面试官:说说你知道多少种线程池拒绝策略
  7. hadoop配置文件_Hadoop分布式集群
  8. apache commons Java包简介
  9. uefi legacy linux知乎,【U盘工具】制作纯净万能“便携系统+pe维护”双系统U盘——UEFI与Legacy双启动...
  10. 磁共振成像(MRI)影像心脏组织分割
  11. 弧微分直角系最详细推导
  12. matlab列联表的独立性检验,(8.4列联表独立性分析案例.ppt
  13. 计算机英语中paste表示,计算机英语常用词汇
  14. Docker 启动tomcat报错Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use.
  15. layer添加元素 openlayer_OpenLayers 官网例子的中文详解
  16. Halcon二维码扫描算法总结
  17. vue-element-admin 花裤衩 模板 ,中文版,运行报错解决方案
  18. 机器学习 | MATLAB实现BP神经网络newff参数设定(中)
  19. 远程关闭计算机提示拒绝访问权限,shutdown远程关机win10系统拒绝访问最佳解决方法...
  20. 拼题 L2-001 紧急救援 最短路计数+记录路径

热门文章

  1. Hive的数据库和表
  2. Ollydbg中F8的Bug
  3. 模拟——魔法少女小Scarlet(洛谷 P4924)
  4. C语言课后习题(19)
  5. 今明两场直播丨openGauss和MogDB的优化分享;为什么学习 PostgreSQL 是当下不二之选...
  6. 实战经验:关于Oracle Delete数据后空间重用问题的测试
  7. 另辟蹊径:从其他角度去解决数据库问题
  8. oracle 12c dg搭建以及故障诊断
  9. 这两个小技巧,让SQL语句不仅躲了坑,还提升了1000倍
  10. 升级过log4j,却还没搞懂log4j漏洞的本质?