5.3 Boosting【stanford-cs329p】


Boosting

  • Boosting将多个弱学习器结合成强的一个

    • 主要是降低偏差
  • 顺序学习N个弱学习器,在第i步

    • 训练一个弱学习器 h_i,评估损失
    • 根据当前误差重新采样数据使得下一个模型H去关注预测不正确的样本
  • 比较著名的算法有AdaBoost,gradient Boosting

Gradient Boosting

  • 假设在t时刻训练了模型$H_t(x)$,初始 $H_1(x)=0$
  • 在t=1时刻
    • 训练一个新的模型 $h_t$ 在残差上:${(x_i,y_i)-H_t(x_i)}_{i=1,…,m}$
    • $H_{t+1}(x)=H_t(x)+\eta f_t(x)$
      • 学习率 $\eta$ 作为收缩的正则项,假设等于1就是完全拟合了,可能就过拟合了
  • 残差等于 $-\part L/\part H$ 如果使用MSE作为损失的话
    • 其他的Boosting算法可以视作差不多的梯度下降的方法

Gradient Boosting Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class GradientBoosting:
def __init__(self, base_learner, n_learners, learning_rate):
self.learners = [clone(base_learner) for _ in range(n_learners)]
self.lr = learning_rate

def fit(self, X, y):
residual = y.copy()
for learner in self.learners:
learner.fit(X, residual)
residual -= self.lr * learner.predict(X)

def predict(self, X):
preds = [learner,predict(X) for learner in self.learners]
return np.array(preds).sum(axis=0) * self.lr

Summary

  • Boosting就是把弱学习器结合成一个强学习器来降低偏差
  • 梯度下降Boosting学习残差