bootstrap, boosting, bagging
介绍boosting算法的资源:
视频讲义。介绍boosting算法,主要介绍AdaBoosing http://videolectures.net/mlss05us_schapire_b/
在这个站点的资源项里列出了对于boosting算法来源介绍的几篇文章,能够下载: http://www.boosting.org/tutorials
一个博客介绍了很多视觉中经常使用算法,作者的实验和理解。这里附录的链接是关于使用opencv进行人脸检測的过程和代码,能够帮助理解训练过程是怎样完毕的:
http://www.cnblogs.com/tornadomeet/archive/2012/03/28/2420936.html这里是一个台湾的电子期刊上关于AdaBoost的介绍: http://140.113.87.114/cvrc/edm/vol_6/tech1.htm
1 Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting
这些术语。我经常搞混淆,如今把它们放在一起,以示差别。
(部分文字来自网络,因为是之前记的笔记,忘记来源了,特此向作者抱歉)
Bootstraping: 名字来自成语“pull up by your own bootstraps”,意思是依靠你自己的资源,称为自助法。它是一种有放回的抽样方法。它是非參数统计中一种重要的预计统计量方差进而进行区间预计的统计方法。其核心思想和基本过程例如以下:
(1) 採用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程同意反复抽样。
(2) 依据抽出的样本计算给定的统计量T。
(3) 反复上述N次(一般大于1000),得到N个统计量T。
(4) 计算上述N个统计量T的样本方差。得到统计量的方差。
应该说Bootstrap是现代统计学较为流行的一种统计方法。在小样本时效果非常好。
通过方差的预计能够构造置信区间等,其运用范围得到进一步延伸。
Jackknife: 和上面要介绍的Bootstrap功能相似,仅仅是有一点细节不一样,即每次从样本中抽样时候仅仅是去除几个样本(而不是抽样)。就像小刀一样割去一部分。
==============================================================
下列方法都是上述Bootstraping思想的一种应用。
bagging:bootstrap aggregating的缩写。
让该学习算法训练多轮,每轮的训练集由从初始的训练集中随机取出的n个训练样本组成,某个初始训练样本在某轮训练集中能够出现多次或根本不出现。训练之后可得到一个预測函数序列h_1,⋯ ⋯h_n
,终于的预測函数H对分类问题採用投票方式,对回归问题採用简单平均方法对新演示样例进行判别。
[训练R个分类器f_i,分类器之间其它同样就是參数不同。
当中f_i是通过从训练集合中(N篇文档)随机取(取后放回)N次文档构成的训练集合训练得到的。对于新文档d,用这R个分类器去分类。得到的最多的那个类别作为d的终于类别。]
boosting: 当中基本的是AdaBoost(Adaptive Boosting)。初始化时对每个训练例赋相等的权重1/n,然后用该学算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重。也就是让学习算法在兴许的学习中集中对照较难的训练例进行学习,从而得到一个预測函数序列h_1,⋯, h_m
, 当中h_i
也有一定的权重,预測效果好的预測函数权重较大。反之较小。终于的预測函数H对分类问题採用有权重的投票方式,对回归问题採用加权平均的方法对新演示样例进行判别。
(相似Bagging方法。可是训练是串行进行的。第k个分类器训练时关注对前k-1分类器中错分的文档,即不是随机取。而是加大取这些文档的概率。)
Bagging与Boosting的差别:二者的主要差别是取样方式不同。Bagging採用均匀取样,而Boosting依据错误率来取样。因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各轮训练集之间相互独立。而Boostlng的各轮训练集的选择与前面各轮的学习结果有关;Bagging的各个预測函数没有权重,而Boosting是有权重的;Bagging的各个预測函数能够并行生成,而Boosting的各个预測函数仅仅能顺序生成。对于象神经网络这样极为耗时的学习方法。
Bagging可通过并行训练节省大量时间开销。
bagging和boosting都能够有效地提高分类的准确性。
在大多数数据集中,boosting的准确性比bagging高。
在有些数据集中。boosting会引起退化— Overfit。
Boosting思想的一种改进型AdaBoost方法在邮件过滤、文本分类方面都有非常好的性能。
gradient boosting(又叫Mart, Treenet):Boosting是一种思想,Gradient Boosting是一种实现Boosting的方法。它基本的思想是,每一次建立模型是在之前建立模型损失函数的梯度下降方向。
损失函数(loss function)描写叙述的是模型的不靠谱程度。损失函数越大,则说明模型越easy出错。假设我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度(Gradient)的方向上下降。
Rand forest: 随机森林。顾名思义,是用随机的方式建立一个森林,森林里面有非常多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下推断。看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预測这个样本为那一类。 在建立每一棵决策树的过程中。有两点须要注意 - 採样与全然分裂。首先是两个随机採样的过程,random forest对输入的数据要进行行、列的採样。对于行採样。採用有放回的方式。也就是在採样得到的样本集合中。可能有反复的样本。假设输入样本为N个,那么採样的样本也为N个。这样使得在训练的时候。每一棵树的输入样本都不是所有的样本。使得相对不easy出现over-fitting。
然后进行列採样。从M个feature中,选择m个(m << M)。之后就是对採样之后的数据使用全然分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。
一般非常多的决策树算法都一个重要的步骤 - 剪枝。可是这里不这样干,因为之前的两个随机採样的过程保证了随机性。所以就算不剪枝。也不会出现over-fitting。 按这样的算法得到的随机森林中的每一棵都是非常弱的,可是大家组合起来就非常厉害了。能够这样比喻随机森林算法:每一棵决策树就是一个精通于某一个窄领域的专家(因为我们从M个feature中选择m让每一棵决策树进行学习)。这样在随机森林中就有了非常多个精通不同领域的专家,对一个新的问题(新的输入数据),能够用不同的角度去看待它,终于由各个专家,投票得到结果。
Rand forest与bagging的差别:
1)Rand forest是选与输入样本的数目同样多的次数(可能一个样本会被选取多次。同一时候也会造成一些样本不会被选取到)。而bagging一般选取比输入样本的数目少的样本。
2)bagging是用所有特征来得到分类器,而rand forest是须要从所有特征中选取当中的一部分来训练得到分类器。 一般Rand forest效果比bagging效果好!
2 bootstrps bagging boosting
bootstrps bagging boosting这几个概念经经常使用到,现细致学习了一下:
他们都属于集成学习方法,(如:Bagging,Boosting,Stacking),将训练的学习器集成在一起,原理来源于PAC学习模型(ProbablyApproximately CorrectK)。Kearns和Valiant指出,在PAC学习模型中,若存在一个多项式级的学习算法来识别一组概念,而且识别正确率非常高,那么这组概念是强可学习的;而假设学习算法识别一组概念的正确率仅比随机推測略好。那么这组概念是弱可学习的。他们提出了弱学习算法与强学习算法的等价性问题,即能否够将弱学习算法提升成强学习算法。假设两者等价,那么在学习概念时。仅仅要找到一个比随机推測略好的弱学习算法,就能够将其提升为强学习算法。而不必直接去找通常情况下非常难获得的强学习算法。
bootstraps:名字来自成语“pull up by your ownbootstraps”,意思是依靠你自己的资源,它是一种有放回的抽样方法,学习中还发现有种叫jackknife的方法,它是每一次移除一个样本。
bagging:bootstrapaggregating的缩写。
让该学习算法训练多轮。每轮的训练集由从初始的训练集中随机取出的n个训练倒组成。初始训练例在某轮训练集中能够出现多次或根本不出现训练之后可得到一个预測函数序列h.,⋯⋯h 终于的预測函数H对分类问题採用投票方式,对回归问题採用简单平均方法对新演示样例进行判别。
–(训练R个分类器fi,分类器之间其它同样就是參数不同。
当中fi是通过从训练集合中(N篇文档)随机取(取后放回)N次文档构成的训练集合训练得到的。–对于新文档d,用这R个分类器去分类,得到的最多的那个类别作为d的终于类别.)
boosting:当中基本的是AdaBoost(Adaptive Boosting)。
初始化时对每个训练例赋相等的权重1/n,然后用该学算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在兴许的学习中集中对照较难的训练铡进行学习,从而得到一个预測函数序列h一⋯h当中h.也有一定的权重。预測效果好的预測函数权重较大,反之较小。终于的预測函数H对分类问题採用有权重的投票方式,对回归问题採用加权平均的方法对新演示样例进行判别。(相似Bagging方法。可是训练是串行进行的。第k个分类器训练时关注对前k-1分类器中错分的文档。即不是随机取,而是加大取这些文档的概率).
Bagging与Boosting的差别:在于Bagging的训练集的选择是随机的。各轮训练集之间相互独立,而Boostlng的训练集的选择是独立的,各轮训练集的选择与前面各轮的学习结果有关;Bagging的各个预測函数没有权重。而Boosting是有权重的;Bagging的各个预測函数能够并行生成。而Boosting的各个预測函数仅仅能顺序生成。对于象神经网络这样极为耗时的学习方法。Bagging可通过并行训练节省大量时间开销。
bagging和boosting都能够有效地提高分类的准确性。
在大多数数据集中,boosting的准确性比bagging高。在有些数据集中,boosting会引起退化。—Overfit
文本分类中使用的投票方法(Voting。也叫组合分类器)就是一种典型的集成机器学习方法。它通过组合多个弱分类器来得到一个强分类器。包含Bagging和Boosting两种方式,二者的主要差别是取样方式不同。
Bagging採用均匀取样,而Boosting依据错误率来取样,因此Boosting的分类精度要优于Bagging。
投票分类方法尽管分类精度较高。但训练时间较长。
Boosting思想的一种改进型AdaBoost方法在邮件过滤、文本分类方面都有非常好的性能。
參考文献:
1. http://blog.sina.com.cn/s/blog_5dd2e9270100c8ko.html
2. http://blog.csdn.net/jlei_apple/article/details/8168856
3. http://www.xuebuyuan.com/1200532.html