Boosting算法,可以理解为是“三个臭皮匠,顶个诸葛亮”的方式,它不是追求对于一个模型的完美,而是去训练一群较弱的模型,然后让这些模型逐步提升精度,最后对于这些训练过后的模型,采用投票等方式,来预测新的数据。Boosting算法要理解成一种通用的算法,而不是一个特定的模型。
这里给大家介绍Boosting算法中的主要的两种算法,分别是AdaBoosting和Gradient Boosting。
1.AdaBoosting
AdaBoost是准对于分类问题而设计的。首先我们要定义一群弱的模型。对于一个弱分类器,其输出数据,也就是n个样本,d个维度,标签,也就是n个标签,k代表k个类别(多分类问题)。样本权重。对于每一个样本都有一个权重。则错误率定义为:
其中
接下来就是对于AdaBoost进行迭代训练,对于每一次迭代,AdaBoost都需要确认误分类的数据,然后增加它们的权重,所以下一个迭代器就会更加注重这些点,然后试图将误分类的点分类正确。(这里可以看出,AdaBoost对于弱分类器的训练,是基于上一个分类器的结果,进行样本权重的调整来进行训练的)。
定义完弱分类器后,接下来就是看如何将这些分类器进行组合。这里使用SAMME算法进行演示,该算法是专门用来处理多分类问题的。
伪代码如下图所示:
AdaBoost训练了一些具有带有调整样本权重的模型,并基于误差为各个分类器生成“置信”系数Alpha。 上图中可以看出,越低的错误率对应的Alpha值也越高,也就意味着在投票中的重要性更高。
2.Gradient Boosting
Gradient Boosting对问题的处理方式有所不同。Gradient Boosting不着重于调整数据的权重,而是着眼于预测与真实值之间的差异。
我们定义一个模型,Gradient Boosting是要去最小化。而损失函数
定义是关于的函数,所以有
Gradient Boosting需要损失函数能够求导,并且适用于回归和分类。 这里使用简单的最小二乘作为损失函数(用于回归)。对于分类算法具有相同的想法。伪代码如下图所示。
后期我会补上代码和结果图。
reference:https://towardsdatascience.com/boosting-algorithms-explained-d38f56ef3f30