bagging的作用
bagging是增强原算法的一种手段。
神经网络、分类问题、回归问题、线性回归中的子集选择问题、k最近邻算法都可以使用bagging来加强。
使用bagging加强后的算法的性能会出现一些有规律的变化。一般而言,若原来的算法的稳定性差,使用bagging后,算法的准确率会得到较大程度的提高。若原来的算法的稳定性高,则使用bagging后,算法的准确率会略微降低。因此,在考虑使用bagging之前,要先知道原算法的稳定性。
研究表明,神经网络、分类问题、回归问题、线性回归中的子集选择问题都是不稳定的,而k最近邻算法是稳定的Breiman [1994]。
bagging简介
设有数据集L={(y_n,x_n), n = 1,…,N},其中y是数值或者类别。记phi(x,L)是一个预测器,其中输入是x,输出的y是算法由x得到的预测值。
如果我们有一组数据集{L_k},其中每个数据集由N个来自数据集L相同分布的观测值组成,那么我们可以基于数据集{L_k}得到比基于数据集L更好的预测器。基于数据集{L_k},可以得到预测器组合{phi(x,L_k)},将分两种情况得到一个{L_k}整体的预测器。
- y是数值
整体的预测器是预测器组合{phi(x,L_k)}的平均 - y是类别
采用提票机制,预测器组合{phi(x,L_k)}预测出的类别最多的类别作为整体预测器输出的预测类别
如果没有数据集{L_k},可以通过bootstrap sample的方法来产生一组近似的数据集。
Bootstrapping算法
所谓的Bootstrapping法就是利用有限的样本资料经由多次重复抽样,重新建立起足以代表母体样本分布之新样本。
对于一个采样,我们只能计算出某个统计量(例如均值)的一个取值,无法知道均值统计量的分布情况。但是通过自助法(自举法)我们可以模拟出均值统计量的近似分布。有了分布很多事情就可以做了(比如说有你推出的结果来进而推测实际总体的情况)。
bootstrapping方法的实现很简单,假设你抽取的样本大小为n:
在原样本中有放回的抽样,抽取n次。每抽一次形成一个新的样本,重复操作,形成很多新样本,通过这些样本就可以计算出样本的一个分布。新样本的数量多少合适呢?大概1000就差不多行了,如果计算成本很小,或者对精度要求比较高,就增加新样本的数量。
最后这种方法的准确性和什么有关呢?这个我还不是清楚,猜测是和原样本的大小n,和Bootstrapping产生的新样本的数量有关系,越大的话越是精确,更详细的就不清楚了,想知道话做个搞几个已知的分布做做实验应该就清楚了。