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,yiHt(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 HL/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_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

Gradient Boosting Decision Trees(GBDT)

  • 用决策树作为弱learner
    通过一个**小的max_depth(限制最大深度)**正则化,随机采样特征
  • 顺序建树运行很慢
    流行的加速算法:XGBoosting,lightGBM
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐