Boosting
boosting介绍
-
Boosting是利用n个弱学习器串行生成并融合从而减少整体偏差的集成学习框架
-
Boosting算法的三个要素
- 函数模型: Boosting的函数模型是叠加型的,即
F ( x ) = ∑ i = 1 k f i ( x ; θ i ) F(x)=\sum_{i=1}^k f_i\left(x ; \theta_i\right) F(x)=i=1∑kfi(x;θi)
2. 目标函数: 选定某种损失函数作为优化目标E { F ( x ) } = E { ∑ i = 1 k f i ( x ; θ i ) } E\{F(x)\}=E\left\{\sum_{i=1}^k f_i\left(x ; \theta_i\right)\right\} E{F(x)}=E{i=1∑kfi(x;θi)}
3. 优化算法: 贪婪地逐步优化,即θ m ∗ = arg min θ m E { ∑ i = 1 m − 1 f i ( x ; θ i ∗ ) + f m ( x ; θ m ) } \theta_m^*=\arg \min {\theta_m} E\left\{\sum{i=1}^{m-1} f_i\left(x ; \theta_i^*\right)+f_m\left(x ; \theta_m\right)\right\} θm∗=argθmminE{i=1∑m−1fi(x;θi∗)+fm(x;θm)}
-
需要解决两个问题:
- 如何调整训练集,使得在训练集上训练的弱分类器得以进行;
- 如何将训练得到的各个弱分类器联合起来形成强分类器。
-
特点
- Boosting是一种框架算法,拥有系列算法,如AdaBoost,GradientBoosting,LogitBoost等算法。
- Boosting系列算法的主要区别在于其三要素选取的函数不同
- 可以提高任意给定学习算法准确度
- 训练过程为阶梯状,弱分类器按次序一一进行训练(实现上可以做到并行),弱分类器的训练集按照某种策略每次都进行一定的转化。最后以一定的方式将弱分类器组合成一个强分类器。
- Boosting中所有的弱分类器可以是不同类的分类器
Gradient Boosting代码
-
Gradient Boosting代码
pythonclass 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