Bootstraping:
名字来自成语“pull up by your own bootstraps”,意思是依靠你自己的资源,称为自助法,它是一种有放回的抽样方法,它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法。其核心思想和基本步骤如下:
(1) 采用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样。
(2) 根据抽出的样本计算给定的统计量T。
(3) 重复上述N次(一般大于1000),得到N个统计量T。
(4) 计算上述N个统计量T的样本方差,得到统计量的方差。
应该说Bootstrap是现代统计学较为流行的一种统计方法,在小样本时效果很好。通过方差的估计可以构造置信区间等,其运用范围得到进一步延伸。
Jackknife:
和上面要介绍的Bootstrap功能类似,只是有一点细节不一样,即每次从样本中抽样时候只是去除几个样本(而不是抽样),就像小刀一样割去一部分。
下列方法都是上述Bootstraping思想的一种应用。
boosting:
Boosting有很多种,比如AdaBoost(Adaptive Boosting), Gradient Boosting等,这里以AdaBoost,Gradient Boosting为典型讲下。
Boosting也是集合了多个决策树,但是Boosting的每棵树是顺序生成的,每一棵树都依赖于前一颗树。顺序运行会导致运行速度慢。
首先介绍下AdaBoost的思想,而不去阐述Boosting决策树的构建构建方法和数学公式推导。
AdaBoost,运用了迭代的思想。每一轮都加入一个新训练一个预测函数,直到达到一个设定的足够小的误差率,或者达到最大的树的数目。
①开始的时候每一个训练样本都被赋予一个初始权重,用*所有样本*训练第一个预测函数。计算该预测函数的误差,然后利用该误差计算训练的预测函数的权重系数(该预测函数在最终的预测函数中的权重,此处忽略公式)。接着利用误差更新样本权重(此处忽略公式)。如果样本被错误预测,权重会增加;如果样本被正确预测,权重会减少。通过权重的变化,使下轮的训练器对错误样本的判断效果更好。
②以后每轮训练一个预测函数。根据最后得出的预测函数的误差计算新训练的预测函数在最终预测中的权重,然后更新样本的权重。权重更新之后,所有样本用于下轮的训练。
③如此迭代,直到误差小于某个值或者达到最大树数。
这里涉及到两个权重,每轮新训练的预测函数在最终预测函数中所占的权重和样本下一轮训练中的权重。这两个权重都是关于 每轮训练的预测函数产生的误差 的函数。
Adaboost的算法流程:
假设训练数据集为T={(X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4),(X5,Y5)} 其中Yi={-1,1}
1、初始化训练数据的分布
训练数据的权重分布为D={W11,W12,W13,W14,W15},其中W1i=1/N。即平均分配。
2、选择基本分类器
这里选择最简单的线性分类器y=aX+b ,分类器选定之后,最小化分类误差可以求得参数。
3、计算分类器的系数和更新数据权重
误差率也可以求出来为e1.同时可以求出这个分类器的系数。基本的Adaboost给出的系数计算公式为
上面求出的am就是这个分类器在最终的分类器中的权重。然后更新训练数据的权重分布。如果样本被错误预测,权重会增加;如果样本被正确预测,权重会减少。
总而言之:Boosting每次迭代循环都是利用所有的训练样本,每次迭代都会训练出一个分类器,根据这个分类器的误差率计算出该分类器的在最终的分类器中的权重,并且更新训练样本的权重。这就使得每次迭代训练出的分类器都依赖上一次的分类器,串行速度慢。
Boosting最终的组合弱分类器方式:
通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。