【机器学习】Bootstrap--Bagging--Boosting--AdaBoost

Bootstrap:

在统计学中被称作自助抽样法。是一种从给定训练集中有放回的均匀抽样。也就是说,每当选中一个样本,它等可能地会被再次选中并且被再次添加到训练集中。它的具体过程如下:
1、记原始的数据集为D,那么由Boostrap方法构建的新数据集为D_b。
2、利用D_b作为训练集学习构建hypothesish_b
3、利用剩下的样本得到对h_b的预测
4、以上过程一般被重复B次(几百次)。

因此我们会得到一系列的预测hypotheses, 其中K小于或等于B。

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第1张图片

此时我们估计的bias为

估计的variance为

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第2张图片


Bagging: bootstrap aggregation

        通过bootstrap我们可以针对每一个构建的训练集可以得到一个hypothesis h_b, 那我们为什么不直接用所有得到的hypothesis来做预测呢。例如:在分类问题中最终的结果可以用投票的方式选择majority class。 在回归问题中,最终的结果可以取预测的平均 average。
       根据我们估计bias和variance的方法,bagging可以降低variance,但是会提高bias。因此对不稳定的学习算法(unstable learner)使用bagging会有较好的效果。例如 决策树(decision trees)、神经网络(neural network)。
       那么什么是unstable learner呢。在learning theory中,稳定性(stability)用来描述在输入数据发生小变化时,机器学习算法被影响的程度。稳定的学习算法在训练数据轻微调整时,其预测结果不会发生大的变化。因此unstable learner就是受输入数据影响较大的学习算法。


Boosting

        在bagging中,最终的输出通过取一系列hypotheses的平均来确定,那么有没有可能不同的hypotheses 有不同的权重呢。因此我们不再像bagging那样对每一个数据集单独构建每一个hypotheses,而是针对那些现有的hypotheses不能解决的数据,来构建新的hypotheses。 这就是Boosting做的事情。

        大多数Boosting算法由迭代使用弱学习分类器(weak learner)组成,并将其加入最终的强学习分类器(stronger learner)。加入弱分类器的过程中,通常根据它们的分类准确率赋予不同的权重。每加入一个弱学习分类器之后,训练数据通常会被重新加权,之前分类错误的训练例的权重将会增加,而分类正确的训练例的权重将会降低。

       训练例被赋予的权重,表明它被某个分类器选入训练集的概率。也就是说,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,Boosting能“聚焦于”那些较难分(更富信息)的样本上。

其中weak learner的定义:分类结果只比随机分类好一点点的分类器。strong learner的定义:结果非常接近真实值的分类器。

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第3张图片
(注意这张图里面weak learner是依次添加的)


AdaBoost

 是 Adaptive Boosting的简称,是Boosting中的一种。AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。其算法如下:

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第4张图片

    其中distribution D_t即是第t次迭代时候的训练集,在最开始时给训练集每个数据点分配的权重都相等,因此可以看做是normal distribution。然后经过T次迭代,不断更新D_t。每次迭代都会根据新得到的 D_t训练一个新的hypothesis。

的更新方式如下:

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第5张图片


是第t个子分类器(弱学习器)的权重,其计算公式如下:

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第6张图片

    其中是指示函数。代表子分类器结果h(x)与真正结果y不同时,那么这个函数的值为1。因此表示数据集中子分类器分类错误的总个数与数据集中总数据个数的比值。


    下面是一个AdaBoost的实现样例,根据这个例子可以对AdaBoost有一个更加深刻的理解。最开始D1中的每一个数据的权重都是相同的。

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第7张图片

第一次迭代:有三个数据分类错误。根据前文的公式计算第一个分类器的权重。

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第8张图片

第二次迭代:首先更新D_t,根据计算的结果我们可以观察到分类错误的点的权重增加了,而分类正确的点的权重降低了。然后进一步计算第二个子分类器的权重。

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第9张图片

第三次迭代:跟第二次迭代的步骤相似。

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第10张图片

最后将三个子分类器乘以相应的权重相加,即可得到最终的hypothesis。

【机器学习】Bootstrap--Bagging--Boosting--AdaBoost_第11张图片





你可能感兴趣的:(机器学习)