Boosting
- 将多个弱模型结合形成一个强的模型
主要用于减少偏差 - 顺序学习n个若模型,在第i步:
训练一个若模型hih_ihi,估计它的误差ϵt\epsilon_tϵt
根据ϵt\epsilon_tϵt重采样数据,以关注错误预测的样例 - 著名样例:AdaBoost,gradient boosting
Gradient Boosting
- 假设在时间t训练了Ht(x)H_t(x)Ht(x),其中H1(x)=0H_1(x)=0H1(x)=0
- 在时间步t=1,2,…
根据残差{(xi,yi−Ht(xi))}i=1,...,m\{(x_i,y_i-H_t(x_i))\}_{i=1,...,m}{(xi,yi−Ht(xi))}i=1,...,m训练一个新模型hth_tht
Ht+1(x)=Ht(x)+ηht(x)H_{t+1}(x)=H_t(x)+\eta h_t(x)Ht+1(x)=Ht(x)+ηht(x)
学习率η\etaη通过收缩(shrinkage)正则化这个模型 - 若使用MES作为损失,残差就相当于−∂L/∂H-\partial L/\partial H−∂L/∂H
class GradientBoosting:def __init__(self,base_learner,n_learners,learning_rate):self.learners = [clone(base_learner)for _ in range(n_learners)]self.lr = learning_ratedef 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
Gradient Boosting Decision Trees(GBDT)
- 用决策树作为弱learner
通过一个**小的max_depth(限制最大深度)**正则化,随机采样特征 - 顺序建树运行很慢
流行的加速算法:XGBoosting,lightGBM