class-提升方法boosting

道之有道 道之有道     2022-10-23     220

关键词:


Boosting在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。AdaBoost最具代表性,由Freund和Schapire在1995年提出;Boost树在2000年由Friedman提出

1 AdaBoost算法

基本思想:对于分类而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)比强分类器容易得多。因此此方法就是从弱分类器出发,反复学习,得到一系列弱分类器(基本分类器),然后组合成一个强分类器。Boosting方法大多是改变训练数据的权值分布,针对不同训练数据分布调用弱分类器进行一系列学习的方法。如何改变训练数据的权值或概率分布?提高前一轮弱分类器错误分类的样本的权值,而降低正确分类样本的权值,这样错误分类的样本在本次弱分类器中就被更大的关注,一次分类问题就被一系列分类器分而治之。如何组合这一组弱分类器?——加权多数表决的方法,加大无误差率低的弱分类器的权值,减小误差率大的弱分类器的权值,让其在表决中起较小作用。
算法:


说明:
步骤一中,权值分布采取均匀分布得到权值向量D1,在原始数据上学习分类器;
步骤二中,m表示轮数,m=1表示第一轮学习过程。
(a)使用当前权值向量Dm加权训练集,学习基本分类器Gm(x)。
(b)计算基本分类器在加权训练集上的误分类率em,可以看出Gm(x)的分类误差率是误分类样本权重之和
(c) Gm的系数就是在最终组合分类器所占的权重,表示此分类器的重要性。em小于1/2时,alpham>=0,随着误分类率的减小而增大,所以误分类率越小的基本分类器在最终分类器所起的作用越大。
(d)中更新权值分布,为下一轮做准备,其实yGm相乘是验证此个样本值分类的正确性,正确则同号,同号则为正,为正则指数部分为负数,就减少此样本值的分量,减少的多少由alpha决定。即

步骤三中,f(x)的线性组合实现了M个基本分类器的加权表决,系数alpha是基本分类器的重要性。注意这里的alpha之和不为1。f(x)的符号表示实例的类别,绝对值的大小表示分类的确信度。最终sign得到强分类器G(x)。
在具体执行过程中,可以每次都进行组合然后得到误分类点,直到误分类点为0为止或者达到m的最大值M为止

2 AdaBoost训练误差分析

定理:训练误差的界:

证明:

定理:二类分类的AdaBoost训练误差界:

证明:


推论:
表明AdaBoost误差界以指数速率下降。
注意:AdaBoost算法不需要知道下界γ,具有适应性adaptive Boosting

3 AdaBoost algorithm 另外的解释

这个解释是AdaBoost算法模型是加法模型,损失函数是指数函数,学习算法为前向分步算法时的二类分类学习方法。

3.1 前向分步算法

加法模型(additive model)

其中,b为基函数,γ为基函数的参数;β为基函数的系数;
给定训练集和损失函数L(y,f(x))条件下,学习加法模型f成为风险极小化或损失函数极小化的问题:

前向分步算法(forward stagewise algorithm)求解思路是:因为学习的模型是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化函数目标(上式),那么就可以简化优化的复杂度。因此,每步只需优化如下损失函数:

算法明细:

3.2 前向分步算法与AdaBoost

定理:AdaBoost算法是前向分步算法的特例,model为基本分类器组成的加法模型,损失函数是指数函数。
证明:根据算法流程对比二者并无区别,需要注意的是前向分步算法的损失函数是指数损失函数(exponential loss function)

4 提升树

Boosting Tree被认为是统计学习中性能最好的方法之一,以分类树或回归树为基本分类器的提升方法。

4.1 提升树模型

提升方法实际上采用的是加法模型(基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树。对分类问题的决策树是二叉分类树,对回归问题的决策树是二叉回归树。基本分类器xv可以看做由一个根结点直接连接两个叶子结点的简单决策树,即决策树桩(decision stump)。提升树模型可以表示为决策树的加法模型:

提升算法采用前向分步算法,首先确定初始提升树,则第m步的模型是
经验最小化函数:,m-1表示当前树,经验最小化函数可以确定下一个树的决策参数。
不同问题的提升树学习算法,主要区别是使用的损失函数不同(回归问题:平方误差损失函数;分类问题指数损失函数)。
回归问题
已知训练集T=(x1,x2),…(xN,yN),x属于Rn,y属于R,如果将输入空间划分为J个互不相交的区域R1,…,RJ,并且在每个区域上确定输出常量cj,树可表示为

其中,表示树的区域划分和各区域上常数(类)。J是回归树的复杂度即叶子结点个数。
回归提升树使用前向分步算法:

前向分步算法第m步,给定当前模型fm-1,需求:
当采用平方误差损失函数时,
代入得:

这里,是当前模型拟合数据的残差(residual)
回归树算法:

4.2 梯度提升

当损失函数不是平方误差函数或者指数函数时,优化并不简单,故提出梯度提升(gradient Boosting)算法,关键是利用损失函数的负梯度在当前模型的值
作为回归问题中残差的近似值拟合回归树。
梯度提升算法:

 

一文详解机器学习中最好用的提升方法:boosting与adaboost(代码片段)

在Kaggle及其它机器学习任务中,集成方法非常流行,不论是还是随机森林,它们都强大无比。而本文作者从最基础的Boosting概念到AdaBoost算法进行了详细的介绍,并展示了如何实现AdaBoost,这些都是走进集成方... 查看详情

从 boost 共享内存中转储数据的最佳方法

...19:18:51【问题描述】:我有2个申请。一个写入高频数据来提升托管共享内存,数据结构是提升双端队列。typedefboost::interprocess::allocator<REALTIME_INFO,boost::interprocess::managed_s 查看详情

Boost(或其他库)是不是提供了一种将“无构造函数”类的名称提升为使用聚合初始化的函数对象的方法?

...或其他库)是不是提供了一种将“无构造函数”类的名称提升为使用聚合初始化的函数对象的方法?【英文标题】:DoesBoost(oranotherlibrary)offerawaytoliftthenameofa"constructor-less"classintoafunctionobjectthatusesaggregateinitialization?Boost(或... 查看详情

课时boost与adaboost

提升的概念提升算法提升算法推导梯度提升决策树决策树的描述正则项的定义目标函数的计算目标函数继续化简子树划分Adaboost误差上限方差与偏差Bagging能够减少训练方差,对于不剪枝的决策树、神经网络等学习器有良好的集成... 查看详情

boost_class_export

...类(错误多多,一波三折)之外。还有还有一种更简单的方法:用BOOST_CLASS_EXPORT宏。以下我们来分析如何用BOOST_CLASS_EXPORT来实现用基类的指针去转存派生类。首先来看前面实例的一段代码:voidsave(){ std::ofstreamofs("t7.xml" 查看详情

机器学习集成学习(boosting)——adaboost提升算法(理论+图解+公式推导)

...​一、集成学习​​​​二、AdaBoost算法​​​​1.Boosting提升方法​​​​2.AdaBoost算法思想​​​​3.AdaBoost原理解释​​​​4.构造损失函数,求解参数​​​​5.前向分步算法​​2021人工智能领域新星创作者,带你从入门到... 查看详情

禁用 /W4 警告以进行提升

】禁用/W4警告以进行提升【英文标题】:Disable/W4warningsforboost【发布时间】:2011-03-2211:26:36【问题描述】:如何禁用来自boost库的所有MSVC警告?我知道我可以在它们发生的地方禁用特定的警告等......但它会使我的代码变得混乱,... 查看详情

关于 C++/Boost 的真正基础 - 测试提升

】关于C++/Boost的真正基础-测试提升【英文标题】:ReallybasicaboutC++/Boost-testingboost【发布时间】:2013-04-2302:05:55【问题描述】:我认为我已经正确安装了boost,所以我尝试使用here找到的测试“first.cpp”:#include<iostream>#include<... 查看详情

boost提升

1提升的概念提升是机器学习技术,可以用于回归和分类问题,它每一步产生一个弱预测模型(如决策树),并加权累加到总模型中;如果每一步的弱预测模型生成都市一句损失函数的梯度方向,则称之为梯度提升(Gradientboosting)... 查看详情

提升属性树性能

】提升属性树性能【英文标题】:boostpropertytreeperformance【发布时间】:2012-08-1204:53:27【问题描述】:我计划为我们的应用程序http://www.boost.org/doc/libs/1_41_0/doc/html/property_tree.html使用boost属性树。现在我想知道,每次我们调用这个... 查看详情

CMake:找不到提升

】CMake:找不到提升【英文标题】:CMake:CouldNOTfindBoost【发布时间】:2014-09-1515:48:47【问题描述】:我正在尝试安装gtsam,但遇到了一些问题。我将boost安装到c:/programfiles/boost/boost_1_56_0并将以下内容添加到我的CMakeLists.text中:set(BO... 查看详情

CMake,JNI 提升读取 json 文件 - Android

】CMake,JNI提升读取json文件-Android【英文标题】:CMake,JNIboostreadjsonfile-Android【发布时间】:2021-12-0805:46:12【问题描述】:用boost::property_tree::json_parser::read_json打开文件的正确方法是什么当前树:boost::property_tree::ptreeconfig;boost::prope... 查看详情

试图理解提升示例 httpserver3。 shared_ptr 重置方法不清楚

】试图理解提升示例httpserver3。shared_ptr重置方法不清楚【英文标题】:tryingtounderstandboostexamplehttpserver3.Somethingunclearwithshared_ptrresetmethod【发布时间】:2013-09-1418:50:09【问题描述】:我正在使用boost示例httpserver3:http://www.boost.org/doc... 查看详情

机器学习集成学习(boosting)——提升树算法(bdt)(理论+图解+公式推导)

...码”即可获取,阿光期待着您的光临~文章目录​​Boosting提升树​​​​提升树模型​​​​提升树算法​​​​优化问题​​2021人工智能领域新星创作者,带你从入门到精通,该博客每天更新,逐渐完善机器学习各个知识体... 查看详情

什么是boosting方法

...,那么这组概念是弱可学习的。如果能将一个弱学习算法提升为强学习算法,那么在学习概念时,只要找到一个比随机猜测略好的弱学习算法,就可以将其提升为强学习算法,而不必直接去找通常情况下很难获得的强学习算法。... 查看详情

adaboost算法

...总结2.正则化3.逻辑回归4.Boosting5.Adaboost算法转自:原地址提升方法(boosting)是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分... 查看详情

《统计学习方法(李航)》讲义第08章提升方法

   提升(boosting)方法是一种常用的统计学习方法,应用广泛且有效.在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能.本章首先介绍提升方法的思路和代表性... 查看详情

提升 GraphML 格式

】提升GraphML格式【英文标题】:BoostGraphMLformat【发布时间】:2018-04-0919:20:14【问题描述】:谁能解释Boost使用的GraphML格式?它包括其他GraphML编写者不使用的间接级别。我已经包含了来自2个来源的GraphML输出,它们都来自相同的... 查看详情