前言

之前的学习中也有好几次尝试过学习该算法,但是都无功而返,不仅仅是因为该算法各大博主、大牛的描述都比较晦涩难懂,同时我自己学习过程中也心浮气躁,不能专心。

现如今决定一口气肝到底,这样我明天就可以正式开始攻克阿里云天池大赛赛题,所以今天一天必须把Adaboost算法拿下!!!

Adaboost

boosting与bagging

  • boosting

    个体学习器间存在强依赖关系、必须串行生成的序列化方法,提高那些在前一轮被弱分类器分错的样本的权值,减小那些在前一轮被弱分类器分对的样本的权值,

    使误分的样本在后续受到更多的关注。

    体现了串行

    加法模型将弱分类器进行线性组合

    代表模型:Adaboost,GBDT,XGBoost,LightGBM
  • bagging

    个体学习器不存在强依赖系,可同时生成的并行化方法

Adaboost算法

关于adaboost,我找到了一段非常易懂的描述,具体说来,整个Adaboost 迭代算法就3步:

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

    所谓的弱学习器,其实就是之前学的一些模型,比如逻辑斯蒂回归模型,决策树模型,都可以称之为弱学习器。而强学习器,就是以后会接触到的一些神经网络模型,而集成学习的思想,就使用多个弱学习器组合来达成强学习器的思想

算法流程

首先确定一个二分类的训练数据集,然后定义基分类器(弱分类器),例如回归就用cart里的回归树,分类就用cart里的分类树等等,然后开始循环

  • 第一步,分为初始化和更新两种可能

    1.初始化当前训练数据的权值分布

    2.更新,首先是当前分类器所算出的每个样本的权值赋给Dm



    而这里的w(m,i)实际是

    逐步解释一下,首先是分母部分的,看上去复杂的不得了,实际上是一个归一化操作,为的是让整个分布变成一个概率分布

    而对于,这个式子他简单来说就是一个具有我们所需要的功能的函数,因为我们要的功能很复杂,所以函数设计的很吓人,但是其实我只需要记住她,然后知道他具有能够在分类正确时降低函数值,分类错误时提高函数值,从而达到更新权重的目的
  • 第二步,训练当前基分类器
  • 第三步,确定权值

    1.权值的计算公式简单来说就是如果分类正确就不计入统计,分类错误的话其权值就会被累加计算,而最后算出来的结果记为em,有0≤em≤0.5

    2.根据em,计算基分类器的权重系数,给出的公式可以保证当em越小,基分类器的权值越大

  • 第四步,把权值和训练好的分类器放入加法模型
  • 第五步,判断是否满足循环条件

    1.分类器个数是否达到M

    2.总分类器误差率是否满足要求

AdaBoost分类问题的损失函数优化

正如刘老师博客中所说:刚才上一节我们讲到了分类Adaboost的弱学习器权重系数公式和样本权重更新公式。但是没有解释选择这个公式的原因,让人觉得是魔法公式一样。其实它可以从Adaboost的损失函数推导出来。

通过视频 https://www.bilibili.com/video/BV1x44y1r7Zc?p=6 的讲解,自己推了三遍,终于成功!附上稿纸

Adaboost小结

Adaboost的主要优点有:

  • Adaboost作为分类器时,分类精度很高
  • 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
  • 作为简单的二元分类器时,构造简单,结果可理解。
  • 不容易发生过拟合

Adaboost的主要缺点有:

  • 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

小结

下一篇我会具体的学习GBDT和XgBoost

【学习笔记】 Adaboost算法的更多相关文章

  1. 数据挖掘学习笔记--AdaBoost算法(一)

    声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢- 背景: AdaBoost算法,这个算法思路简单,但是论文真是各种晦涩啊-,以下是自己看了A Short Introd ...

  2. 集成学习值Adaboost算法原理和代码小结(转载)

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类: 第一个是个体学习器之间存在强依赖关系: 另一类是个体学习器之间不存在强依赖关系. 前者的代表算法就是提升(bo ...

  3. [ML学习笔记] XGBoost算法

    [ML学习笔记] XGBoost算法 回归树 决策树可用于分类和回归,分类的结果是离散值(类别),回归的结果是连续值(数值),但本质都是特征(feature)到结果/标签(label)之间的映射. 这 ...

  4. 集成学习之Adaboost算法原理小结

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boostin ...

  5. 学习笔记 - Manacher算法

    Manacher算法 - 学习笔记 是从最近Codeforces的一场比赛了解到这个算法的~ 非常新奇,毕竟是第一次听说 \(O(n)\) 的回文串算法 我在 vjudge 上开了一个[练习],有兴趣 ...

  6. 集成学习之Adaboost算法原理

    在boosting系列算法中,Adaboost是最著名的算法之一.Adaboost既可以用作分类,也可以用作回归. 1. boosting算法基本原理 集成学习原理中,boosting系列算法的思想:

  7. 学习笔记——EM算法

    EM算法是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步组成:E步,求期望(expectation):M步,求 ...

  8. 学习笔记-KMP算法

    按照学习计划和TimeMachine学长的推荐,学习了一下KMP算法. 昨晚晚自习下课前粗略的看了看,发现根本理解不了高端的next数组啊有木有,不过好在在今天系统的学习了之后感觉是有很大提升的了,起 ...

  9. Java学习笔记——排序算法之快速排序

    会当凌绝顶,一览众山小. --望岳 如果说有哪个排序算法不能不会,那就是快速排序(Quick Sort)了 快速排序简单而高效,是最适合学习的进阶排序算法. 直接上代码: public class Q ...

  10. Java学习笔记——排序算法之进阶排序(堆排序与分治并归排序)

    春蚕到死丝方尽,蜡炬成灰泪始干 --无题 这里介绍两个比较难的算法: 1.堆排序 2.分治并归排序 先说堆. 这里请大家先自行了解完全二叉树的数据结构. 堆是完全二叉树.大顶堆是在堆中,任意双亲值都大 ...

随机推荐

  1. Overfitting & Train Set & Test Set

    假设数据集是独立同分布的,可以将数据集划分为不同的比例:Train Set and Test Set. 同时在Train Set and Test Set上做精度测试,或者隔一段时间在Test Set ...

  2. Kalman卡尔曼滤波,Least Square最小二乘估计,加权最小二乘,递归最小二乘

    以下是Kalman的收敛性证明思路: cite:Stochastic Processes and Filtering Theory

  3. springboot修改文件上传大小

    servlet配置文件上传限制 spring: servlet: multipart: max-file-size: 1000MB max-request-size: 1000MB mysql设置re ...

  4. 前 K 个高频元素问题

    前 K 个高频元素问题 作者:Grey 原文地址: 前 K 个高频元素问题 题目描述 LeetCode 347. Top K Frequent Elements 思路 第一步,针对数组元素封装一个数据 ...

  5. ESP分区重建,解决各种引导问题

    电脑装了双系统,win7和win10,每次重启都进入不同系统,郁闷至极,索性把不常用的Win7盘格式化,但依旧解决不了问题.所以有了以下方法. 1.进PE删除ESP分区(先备份). 2.新建ESP分区 ...

  6. SP8496 NOSQ - No Squares Numbers 题解

    To SP8496 这道题可以用到前缀和思想,先预处理出所有的结果,然后 \(O(1)\) 查询即可. 注意: 是不能被 \(x^2(x≠1)\) 的数整除的数叫做无平方数. \(d\) 可以为 \( ...

  7. 第七天python3 函数、参数及参数解构(二)

    函数参数 参数规则: 参数列表参数一般顺序是:普通参数<--缺省参数<--可变位置参数<--keyword-only参数(可带缺省值)<--可变关键字参数 def fn(x,y ...

  8. 使用Properties集合存储数据,遍历取出Properties集合中的数据和Properties集合中的方法store和load

    package com.yang.Test.PropertiesStudy; import java.io.FileWriter; import java.io.IOException; import ...

  9. @Convert 注解在jpa中进行查询的注意事项

    如果要实现实体类中属性的类型和数据库表中字段的类型相互转化,则需要使用 @Convert 注解 package javax.persistence; import java.lang.annotati ...

  10. NOIP提高组模拟赛26

    A. LCIS 蓝书原题,CF10D 弱化版 首先直接把 LIS 和 LCS 合起来设计一个 DP . 设 \(dp_{i,j}\) 表示 \(A_{1\dots i}\) 和 \(B_{1\dots ...