1.提高算法算法
提高算法实为将一系列单一算法(如决策树,SVM等)单一算法组合在一块儿使得模型的准确率更高。这里先介绍两种Bagging(表明算法随机森林),Boosting(表明算法AdaBoost-即本篇核心)网络
Bagging思想:以随机森林为例机器学习
假设样本集的总样本量为100个,每一个样本有10个特征(也就是维度是10);随机取样的比例通常为(60%-80%)函数
步骤1 :咱们随机从中拿出60个数据(注意这里是有放回的取样)用于创建决策树,这样随机取50次,最终将会造成60棵决策树。性能
步骤2: 咱们在构建决策树时对于每一个决策树的特征也采用随机取样(有放回),随机选6个特征。学习
步骤3:利用上述步骤1,步骤2构建的60个不一样的决策树模型,最终结果用这60棵综合区评判,以下图(图片来此网络):优化
Boosting思想:在分类问题中,经过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提升分类的性能(后文以AdaBoost进行说明)。spa
Bagging与Boosting的异同点:3d
同:二者都是集成算法,即综合考虑更过的分类器,提升分类的准确性blog
异:分类器层面:好比一个20人的工做小组,如今要对某一问题达成一项决议。如今开会讨论,Bagging是一视同仁的,即不论工做经验多少,能力怎样,我看多数,后者取平均。而Boosting会根据能力或者说经验的多少综合评定给每一个工程师一个权重,也就说能力强的,有经验的权重就大一些,他们的意见就重要一些。在这个基础上再去决策(注意这此示例只针对分类器层面)。
样本层面:Boosting也会给予样本必定的权重。若是从结构层面。
模型结构层面:Bagging是并行决策的(可类比并联电路),而Boosting是串行决策的。
2.AdaBoost算法
2.1 AdaBoost原理以及造成过程
AdaBoost算法的感悟,我在整理时,想采用一种倒立的方式去记录和解读,由于我本身在学习的过程当中直接从数学表达式去学习,老是感受有诸多的疑问,以致于接受此算法所用的时间稍微长了一些,下面正式开始整理本身理解AdaBoost的过程
AdaBoost算法是boosting算法中的一种,它的做用就是将一系列弱分类器线性组合在一块儿造成一个强分类器,能够这样理解AdaBoost就像一个领导,那些弱分类器算法(如:单层决策树等)就像员工,每一个员工均有本身的特征,而AdaBoost作为老板的做用就是将这些员工经过某种方式组合在一块儿将事情作得更好,放在机器学习中就是将分类任务或者说回归任务能作得更好,也就是所说的提高方法。AdaBoost是经过什么样的方式来完成这个任务的呢?
在《李航-统计学习方法中》关于提高方法提出两个问题,而AdaBoost的原理就是如何解决这两个问题
问题1:每一轮如何改变训练数据的权值或几率分布?
AdaBoost:提升那些被前一轮分类器错误分类样本的权值,而下降那些被分类正确样本的权值。这样一来,那些没有获得正确分类的的数据,因为其权值加大而受到后一轮若分类器更大的关注。
问题2:如何将若分类器组合成一个强分类器?
AdaBoost:采用加权多数表决的方法,即加大分类偏差小的弱分类器的权值,使其在表决中起较大的做用,减少分类吴超率大的弱分类器的权值,使其在表决中起较小的做用
理解AdaBoost即就是理解上述两个问题的数学表达:
AdaBoost最终的数学表达式为:
其中m表示:第m个分类器,M表示总共有M个分类器
x:表示样本集合
上式(1)的造成过程以下:
输入:训练数据集,其中
;弱学习算法;
输出:最终分类器G(x)
2.2 分步骤理解上述AdaBoost算法
m = 1 时,即利用第一个分类器开始学习训练数据集时
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
第一步:对于第一个分类器,咱们假设每一个样本的权值是相同的。引用《李航-统计学习方法》中的案例来理解第一步:
例:对于以下数据集,假设弱分类器由x<ν或想x>v产生,其中阀值ν使得该分类器在训练数据集上分类偏差率最低,试用AdaBoost算法学习一个强分类器;
第二步:肯定基本分类器G
此处样本量并不大,咱们能够手动计算一下,例如阀值分别取1.5,2.5,3.5,...,9.5时的分类偏差率,就能获得当v=2.5是分类偏差率最小即:
第三步:计算在分类器上的训练偏差率
第四步:计算分类器的权值(注意这里是以e为底进行计算的)
第六步:肯定最终分类器
利用上述G(x)对训练数据集进行分类,仍有3个数据被分类错误
第七步:计算下一次循环的样本集的权重
D2=(0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715,0.1666, 0.1666, 0.1666, 0.0715)
m = 2 ,组合第二个弱分类器
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
重复上述第二步到第七步
分类偏差率最小的阀值为8.5
此时利用上述G(x)对训练数据集进行分类,仍有3个点被误分类
m = 3 ,组合第三个弱分类器
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
再次重复上述第二步到第七步
分类偏差最小的阀值为5.5
此时利用上述的G(x)在对样本集进行分类,上述训练数据集上有0个误分类点,即误分率为0,此时便可中止,上述G(x)便可做此数据的强分类器
1.3 总结
经过对上述案例的认识,咱们可量化的指标所表现的规律再从定性的角度理解
(1)被前一个分类器分错得样本,下一个分类器再对其进行分类时必定不会被分错,为何?
咱们经过数值观察,被分错的样本,在下一次分类时样本权值被增大如(m=2时样本权值为0.1666的样本),而咱们在流程图中第二步提到,在选择分类器时,要求选择分类偏差率最低的分类器(为甚要这么选的原理见下文式(11)),显然若是将权值大的样本分类错时根本达不到第二步的要求。
(2)m=3时为何误分率为0,从定性的角度如何理解?
m=3时的组合分类器的权值alpha逐渐增大,即咱们给予分类偏差率低的样本给予了高的权值,而从数值上去判断,最终f(x)>0亦或是f(x)<0是由三个分类器所共同决定的,假如说第一个分类器将某同样本本来是1类别,分红了-1类别,那么其对最终分类器来讲,会提供一个负的贡献,然后边的分类器总会将这个负的贡献抵消掉,使得最终结果仍是1类别。
3.AdaBoost算法的理解
《李航-统计学习方法》中提到,AdaBoost算法是模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的二分类学习方法,此解释实际解释了上述咱们的AdaBoost算法的原理的由来;
3.1 加法模型的通常表达式以下:
3.2 前向分步算法:
选定模型后,咱们的目标就是经过训练数据集去训练模型(本质是训练模型中的参数),用什么来衡量模型训练的好坏呢?经常经过经验风险极小化即损失函数极小化,此处在给定训练数据集及损失函数L(y,f(x))的条件下,咱们的目标极小化此损失函数,形式以下:
因为f(x)为加法模型,如今咱们的任务是优化模型参数,使得损失函数
最小,咱们能够采用优化加法模型中的每一项,让每一项的结果最小,这样问题将转化为以下形式:
上述(3)到(4)转化过程即为前向分步算法的核心。
3.3 利用上述加法模型以及前向分步算法的原理推导AdaBoost模型
AdaBoost模型为:
损失函数为:
设已经优化了m-1轮,即已经获得了,如式(7),在第m轮咱们经过迭代可得以下式(8)
咱们可经过使上述式(8)对对应的损失函数最小,损失函数以下式(9)
经过优化式(9)使得式(9)最小便可获得
即不依赖于alpha,也不依赖于G,故以G为自变量求解损失函数的极小值即等价于下述式(11):
式(11)解释了再上述流程图的第二步,咱们每次找分类器的时候,要找偏差率最小的分类器的缘由,即要使得损失函数最小。
而对于alpha,式(9)关于alpha求导,并令倒数等于0,便可获得,过程以下:
,令其为0即得
由上述(9)已知,因此
此处与AdaBoost算法的不一样之处在于,AdaBoost对w进行了归一化
2.实例
3.算法推导
4.注意点