目录

机器学习-Boosting

机器学习-Boosting

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_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