更新样本权重时,主要根据样例在当前基本分类器中的分类情况,如果$y_i=1$,$F_m(x)$越趋近于$1$的时候,$exp\left(-\alpha_m \, y_i \,F_m\,(x_i)\right)$越小,反而如果越接近$-1$时越大。这也正符合当前轮分得越差的样例在下一轮越受到重视的设计。
6. 对$m=1,2,...,M$($M$是基本分类器的个数),重复步骤2~5;
7. 构建基本分类器的线性组合$f(x)$及其最终分类器$F(x)$:
$$f(x)=\sum_{m=1}^{M}\alpha_m\, F_m(x)$$
$$F(x)=sign(f(x))=sign\left(\sum_{m=1}^{M}\alpha_m \,F_m(x)\right)$$
$sign(x)$为符号函数,满足以下性质:
$$ sign(x)=\left\{
\begin{aligned}
1&& x\geq 0\\
-1&& x<0\\
\end{aligned}
\right.
$$
你可能已经注意到,$F_m(x)$的系数计算及训练数据的权值分布直接定义了两个公式,并不能一眼看出其中的含义,那么为什么会想到这么定义呢?其实AdaBoost算法还有另外一种解释方法,即可以认为其是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。具体内容可参考李航的《统计机器学习》第$8$章 提升方法。
2. GBDTGBDT是Gradient Boosting Decision Tree的简称,很多时候又称为MART(Multiple Additive Regession Tree)。不同于经典的集成学习算法Adaboost利用前一轮学习器的误差来更新下一轮学习的样本权重,GBDT每次都拟合上一轮分类器产生的残差。举个例子便于理解,比如一个人的年龄是50岁,第一棵树拟合的结果是35岁,第一轮的残差为15岁;然后第二棵数拟合的结果是10岁,两棵树相加总的拟合结果是45岁,第二轮的残差为5岁;第三棵数拟合的结果为2岁,三棵树相加拟合的结果是47岁,第三轮的残差是3岁......只要如此不断地进行下去,拟合结果就可以达到50岁,拟合残差的过程就是训练数据的过程。
对于一个给定的数据集$\{x_i,y_i\}, i=1,2,...,m$,其中特征向量$x_i \in \mathbb{R}^n$,标签$y_i \in \mathbb{R}$,可以用$x_{ij}, j=1,2,...,d来表示x_i的第j个特征值$。对于一个典型的回归决策树问题,需要遍历所有特征$j$的全部阈值$t$,找到最优的$j$和$t$使下面的等式最小化:
$$S_j=\sum_{i \in L}(y_i-\mu_L)^2+\sum_{i \in R}(y_i-\mu_R)^2$$
其中$x_{ij} \leq t$的所有样本落入左子树$L$中,其中$x_{ij} > t$的所有样本落入右子树$R$中,$\mu_L(\mu_R)$表示左子树(右子树)所有样例标签值的均值。如果这就是一棵最简单的拥有一个根节点、两个叶子节点的二叉回归树,那么只需要根据最优阈值切分为左右子树,并且分别计算左右子树的值$\gamma_l,l=1,2$即可。如果将划分子树的过程继续进行$L-1$次即可得到一棵包含$L$个叶子节点的回归树。
上面公式使用最小二乘法计算拟合误差,所以通过上面方法得到的模型又称为最小二乘回归树。其实不管误差的计算方式如何,我们都可以拟合出相应的回归树,唯一的区别是梯度的计算不同而已。
GBDT使用线性组合的方式将拟合的树结合起来,作为最后的输出:
$$F_n(x)=\sum_{i=1}^{N}\alpha_if_i(x)$$
$f_i(x)$是单棵回归树函数,$\alpha_i$是第$i$棵回归树的权重,一般采用相等权重即可。
在这里我们需要弄清楚为什么拟合残差就能不断减少拟合误差。假设拟合误差$C$是拟合函数$F_n$的函数$C(F_n)$。那么:
$$\delta C \approx \frac{\partial{C(F_n)}}{\partial{F_n}}\delta F_n$$
如果取$\delta F_n=-\eta \frac{\partial{C}}{\partial{F_n}}$,就可以得到$\delta C<0$。其中$\eta$是学习率,为正实数。所以只要函数$F_n$拟合误差函数的负梯度就可以不断降低拟合误差的值。
设标签向量$y=[y_1,y_2,...,y_m]^T$,如果用最小二乘的方式表示拟合误差,则:$$C=\frac{1}{2}(F_n-y)^2$$
那么$\delta F_n=-\eta \frac{\partial{C}}{\partial{F_n}}=-\eta (F_n-y)$。$F_n-y$其实就是每一轮拟合后的残差,所以拟合残差就可以不断减少拟合误差。
3. XGBoostXGBoost,全称为eXtreme Gradient Boosting,是目前唯一能与LightGBM相媲美的提升树算法。XGBoost的出现解决了传统GBDT两个很明显的缺点:容易过拟合和对于大数据训练效率低。既然在一定程度上解决了过拟合问题,模型的训练精度也得到了很大的提升。在XGBoost刚分布的半年内,曾经一度包揽了Kaggle比赛的冠军,实力可见一斑。那么XGBoost是怎样解决过拟合问题从而提升模型精度的呢?
我们先从一般的机器学习问题入手,然后再逐步深入了解XGBoost的原理。定义机器学习问题的损失函数如下:
$$Obj(\Theta)=L(\Theta)+\Omega(\Theta)$$