Ensemble
Ensemble

Bagging
Bagging: 通过多次采样,然后平均结果,可以减小variance。


测试的时候把不同function的结果做平均(回归)或者voting(分类)。
做bagging的目的是为了减低模型的variance,所以一般是在模型比较复杂,很容易ovetfit时使用

nn其实没有那么容易overfit,decision tree其实容易overfit。
可以看到决策树考虑的东西很多。

可以用random forest来增强。
这里提到一些小技巧:

- bagging可以随机放回的抽取每个树的训练样本,也可以限制一些特征让每个树的形态不一样。
- validation可以像图中一样tricky,可以不用设置显性的validation set。
random forest可以让结果更平滑,不是简单的增强,比如depth=5本来就拟合不好,那么random forest也拟合不好。但是可以让图片平滑,不像minecraft那样的方块世界。

Boosting
和bagging不同,bagging是用在很强的model上,boosting是用在很弱的model上。
当你有一些弱的model,但是不fit时,就可以用boosting。
boosting是有顺序的,先有f1,再有f2,f3,f4…
可以通过改变数据的weight从而创造新的different的training data。

Adaboost的思想: 通过改变数据的weight,让新的model关注之前model没有关注的地方。

改变weight形成新的data,使得新model的weight下老的model acc为0.5(随机)。(相当于答对加权重,答错减权重)
实际上怎么做reweight这个事情呢?

再数学随便算一下,得到参数d1,使得新的model的weight下老的model acc为0.5。

Adaboost algorithm流程:


一个简单的例子:

接下来讲一下理论上的证明,为什么每次iteration后,ensemble结果会更好。



err的upperbound推出来其实就是。
所以接下来等价证明weight的summation会越来越小就好了。


有时候在train data上已经无误了,但是增加iteration仍然可以减小test error。一部分原因是因为margin,可以看图,5次时分布在0周围多一些,当次数提升时,sign函数传入的绝对值更大,效果更好。
为什么adaboost可以让margin变大呢?

和logistic regression一样,即使没有error rate了,继续按照梯度做可以让margin变大。
结果展示:

- Gradient Boosting

这里是function g对L做gradient descent。
广义上,一个函数所有点值就是这个function的参数。


这里找计算一次计算量较大,所以我们选择硬找一个最好的值,让loss掉的越多。
巧合的是,算出来就是原来方法的结果:
这里与之前的设定达成了统一。
Stacking
