adaboost

Adaboost算法及其代码实现

偶尔善良 提交于 2020-01-30 01:06:11
Adaboost算法及其代码实现 算法概述 AdaBoost(adaptive boosting),即自适应提升算法。 Boosting 是一类算法的总称,这类算法的特点是通过训练若干弱分类器,然后将弱分类器组合成强分类器进行分类。 为什么要这样做呢?因为弱分类器训练起来很容易,将弱分类器集成起来,往往可以得到很好的效果。 俗话说,"三个臭皮匠,顶个诸葛亮",就是这个道理。 这类 boosting 算法的特点是各个弱分类器之间是串行训练的,当前弱分类器的训练依赖于上一轮弱分类器的训练结果。 各个弱分类器的权重是不同的,效果好的弱分类器的权重大,效果差的弱分类器的权重小。 值得注意的是,AdaBoost 不止适用于分类模型,也可以用来训练回归模型。 这需要将弱分类器替换成回归模型,并改动损失函数。 $几个概念 强学习算法 :正确率很高的学习算法; 弱学习算法 :正确率很低的学习算法,仅仅比随机猜测略好。 弱分类器 :通过弱学习算法得到的分类器, 又叫基本分类器; 强分类器 :多个弱分类器按照权值组合而成的分类器。 $提升方法专注两个问题: 1.每一轮如何改变训练数据的权值或者概率分布: Adaboost的做法是提高被分类错误的训练数据的权值,而提高被分类错误的训练数据的权值。 这样,被分类错误的训练数据会得到下一次弱学习算法的重视。 2.弱组合器如何构成一个强分类器 加权多数表决 。

GBDT与XGBOOST

情到浓时终转凉″ 提交于 2020-01-25 19:56:59
Boosting方法实际上是采用加法模型与前向分布算法。在上一篇提到的Adaboost算法也可以用加法模型和前向分布算法来表示。以决策树为基学习器的提升方法称为提升树(Boosting Tree)。对分类问题决策树是CART分类树,对回归问题决策树是CART回归树。 1、前向分布算法   引入加法模型      在给定了训练数据和损失函数L(y,f(x))L(y,f(x)) 的条件下,可以通过损失函数最小化来学习加法模型      然而对于这个问题是个很复杂的优化问题,而且要训练的参数非常的多,前向分布算法的提出就是为了解决模型的优化问题,其核心思想是因为加法模型是由多各模型相加在一起的,而且在Boosting中模型之间又是有先后顺序的,因此可以在执行每一步加法的时候对模型进行优化,那么每一步只需要学习一个模型和一个参数,通过这种方式来逐步逼近全局最优,每一步优化的损失函数:      具体算法流程如下:   1)初始化f0(x)=0f0(x)=0;   2)第m次迭代时,极小化损失函数      3)更新模型,则$f_m (x)$:      4)得到最终的加法模型       Adaboost算法也可以用前向分布算法来描述,在这里输入的数据集是带有权重分布的数据集,损失函数是指数损失函数。 2、GBDT算法   GBDT是梯度提升决策树(Gradient Boosting

AdaBoost算法理解

时光总嘲笑我的痴心妄想 提交于 2020-01-25 17:51:33
AdaBoost的前身和今世 强可学习和弱可学习 在概率近似正确(PAC)学习框架中, 一个类如果存在: 一个多项式复杂度的学习算法,正确率略大于随机猜测(例如二分类问题中大于1/2),称 弱可学习的 一个多项式复杂度的学习算法,并且正确率很高,称 强可学习的 Kearns和Valiant证明了强可学习和弱可学习是 等价 的 The Strength of Weak Learnability Adaboost算法就是将弱学习器组成强学习器的算法 Explaining AdaBoost 算法受到工业界和学术界的关注, 充分的理论研究 (统计学习方法证明) AdaBoost算法是为了证明弱可学习和强可学习算法等价而提出的 ,随后,人们发现该类集成算法能够有效的提升一个学习器的作用,基于AdaBoost演化出了诸多的算法,例如在各大数据挖掘上大放光彩的XGBoost,几乎霸占了诸多数据竞赛榜单的前几多年(从2017开始),在数据预处理上填充空值常用的随机森林算法等等。 随后,学术界纷纷把关注点投向了这个算法的理论证明。得到了该类算法的统计学派角度的证明, 即为AdaBoost是在指数损失函数、模型是加性模型、算法是前向分布算法 。进一步的,给出了学习算法的训练误差界,说明了其训练过程中的最坏情况,并且表明其训练误差是以指数级别下降的。在明白了AdaBoost的统计意义后

集成学习

强颜欢笑 提交于 2020-01-18 19:34:30
Bagging,Boosting以及Stacking (1)Bagging + 决策树 = 随机森林 (2)AdaBoost + 决策树 = 提升树 (3)Gradient Boosting + 决策树 = GBDT 一、Boosting 1)Adaboost https://www.cnblogs.com/willnote/p/6801496.html 2)Gradient Boosting https://www.cnblogs.com/massquantity/p/9174746.html 二、Bagging (bootstrap aggregating) https://www.cnblogs.com/zongfa/p/9304353.html 相比与Adaboost,不考虑权重 三、Stacking https://blog.csdn.net/maqunfi/article/details/82220115 https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python (Introduction to Ensembling/Stacking in Python) 来源: CSDN 作者: huanglv997 链接: https://blog.csdn.net/weixin

08.模型集成

半城伤御伤魂 提交于 2020-01-16 04:31:00
机器学习实战教程(十):提升分类器性能利器-AdaBoost 模型融合方法总结 机器学习模型优化之模型融合 xgboost lightgbm 文章目录 集成方法 1、Bagging 2、Boosting 3、Bagging、Boosting二者之间的区别 4、AdaBoost 1) 计算样本权重 2) 计算错误率 3) 计算弱学习算法权重 4) 更新样本权重 5) AdaBoost算法 5.实例 Bagging Adaboost 集成方法 将不同的分类器组合起来,而这种组合结果则被成为 集成方法 (ensemble method)或者 元算法 (meta-algorithm)。 集成方法主要包括 Bagging 和 Boosting 两种方法,Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法,即将 弱分类器 组装成 强分类器 的方法。 1、Bagging 自举汇聚法 (bootstrap aggregating),也称为bagging方法。Bagging对训练数据采用自举采样(boostrap sampling),即有放回地采样数据,主要思想: 从原始样本集中抽取训练集( 每次都是从训练集中做有放回的随机采样 )。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本

Adaboost – 分类

为君一笑 提交于 2020-01-14 20:37:33
  Adaboost(Adaptive boosting)是boosting(提升)家族的重要算法。boosting家族算法的核心是串行训练学习器,可以理解为"站在巨人的肩膀",后一个学习器的学习是基于前一个学习器的学习基础之上的,对应的是bagging学习器,学习器之间没有依赖关系。 Adaboost基本流程描述   我们先来了解一下boosting的基本流程:   先来过一下Adaboost学习的全流程:   拥有数据集T={(x1, y1), (x2, y2), (x3, y3),... (xm, ym)};   第一步:设置样本权重   初始化样本权重(sample weight)D={ω11, ω12,...,ω1m}, ω1i = 1/m;权重之和=1,不仅仅是初始化,后面的标准化目的都是要保证ω之和为1;   第二步:训练数据   使用数据T训练模型,同时传入样本权重D,比如如果弱学习器采用的是决策树(Decision Tree),则是在调用fit(T, D)。   第三步:计算学习器权重   模型训练出来之后,需要计算一下该模型(学习器)的权重,为了计算权重首先计算一下错误率(统计所有的样本的):   ωki这里代表的样本i(共有m个样本)在第k轮学习器训练中的权重,这里I(·)是一个指示函数,代表如果Gk(xi)≠yi,则I(·)值为1,反之为0

机器学习实战笔记7(Adaboost)

时光毁灭记忆、已成空白 提交于 2020-01-13 03:43:30
1:简单概念描写叙述 Adaboost是一种弱学习算法到强学习算法,这里的弱和强学习算法,指的当然都是分类器,首先我们须要简介几个概念。 1:弱学习器:在二分情况下弱分类器的错误率会低于50%。 事实上随意的分类器都能够做为弱分类器,比方之前介绍的KNN、决策树、Naïve Bayes、logiostic回归和SVM都能够。这里我们採用的弱分类器是单层决策树,它是一个单节点的决策树。 它是adaboost中最流行的弱分类器,当然并不是唯一可用的弱分类器。即从特征中选择一个特征来进行分类。该特征能使错误率达到最低。注意这里的错误率是加权错误率,为错分样本(1)与该样本的权重的乘积之和(不明确看后面代码)。 更为严格点的定义: 强学习:一个概念假设存在一个多项式的学习算法可以学习它,而且正确率非常高。那么。这个概念是强可学习的; 弱学习:一个概念假设存在一个多项式的学习算法可以学习它,而且学习的正确率仅比随机推測略好(高于50%)。那么。这个概念是弱可学习的; 强可学习与弱可学习是等价的。 而且理论证明能够将若干个弱学习分类器通过线性叠加提升为强学习分类器。 2:强学习器:识别准确率非常高并能在多项式时间内完毕的学习算法 3:集成方法:就是将不同的分类器组合在一起。这样的组合的结果就是集成方法或者称为元算法。 它能够是不同算法的集成。也能够是同一算法在不同设置下的集成

机器学习7—AdaBoost学习笔记

我只是一个虾纸丫 提交于 2020-01-13 03:36:17
Adaboost算法原理分析和实例+代码(简明易懂) (转载) 【尊重原创,转载请注明出处】 http://blog.csdn.net/guyuealian/article/details/70995333 本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理。也许是自己能力有限吧,很多资料也是看得懵懵懂懂。网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创。有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者很难看懂AdaBoost过程。 本博客将会详细介绍AdaBoost算法过程,并给出了一个Adaboost例子的详细求解过程,当然也给出了Matlab代码求解过程。碍于太多复杂公式,文章是在电脑Word文档写好再复制上博客的,为了排版好看,有些地方给出了截图。 下面给出几个我认为不错的博客资料: 【1】http://blog.csdn.net/v_july_v/article/details/40718799 感谢这位博主给出了 Adaboost 算法的原理与推导,本文章很多地方都参考了他的内容 【2】http://blog.csdn.net/m0_37407756/article/details/67637400 该博客有一个Adaboost 算法的例子,但其过程简略太多,初学者很难看懂

Threshold values for viola jones object detection

北战南征 提交于 2020-01-03 05:01:08
问题 I am trying to perform Adaboost training stated by Viola and Jones in their paper on rapid object detection. However, I do not understand how to get the threshold values that will classify the faces from non faces for each of the 160k features. Is this a threshold you set manually? or is this based on some kind of maths ? Can someone please explain the maths to me thanks a lot. 回答1: IMO, the best way to describe what happens during threshold assignment of the weak classifiers in every

How to boost a Keras based neural network using AdaBoost?

一笑奈何 提交于 2020-01-01 02:45:46
问题 Assuming I fit the following neural network for a binary classification problem: model = Sequential() model.add(Dense(21, input_dim=19, init='uniform', activation='relu')) model.add(Dense(80, init='uniform', activation='relu')) model.add(Dense(80, init='uniform', activation='relu')) model.add(Dense(1, init='uniform', activation='sigmoid')) # Compile model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Fit the model model.fit(x2, training_target, nb_epoch