在2020年还在整理XGB的算法,其实已经有点过期了。。不过,主要是为了学习算法嘛。如今的大数据竞赛,XGB基本上已经全面被LGB模型取代了,这里主要是学习一下Boost算法。以前已经在其余博文中介绍了Adaboost算法和Gradient-boost算法,这篇文章讲解一下XGBoost。算法
Adaboost和XGBoost无关,可是Gradient-boost与XGBoost有必定关系。
一文搞懂:Adaboost及手推算法案例
一文读懂:GBDT梯度提高微信
XGB就是Extreme Gradient Boosting极限梯度提高模型。XGB简单的说是一组分类和回归树(CART)的组合。跟GBDT和Adaboost都有殊途同归之处。
【CART=classification adn regression trees】网络
这里对于一个决策树,如何分裂,如何选择最优的分割点,其实就是一个搜索的过程。搜索怎么分裂,才能让目标函数最小。目标函数以下:
\(Obj = Loss + \Omega\)
\(Obj\)就是咱们要最小化的优化函数,\(Loss\)就是这个CART模型的预测结果和真实值得损失。\(\Omega\)就是这个CART模型的复杂度,相似神经网络中的正则项。
【上面的公式就是一个抽象的概念。咱们要知道的是:CART树模型即要求预测尽量准确,又要求树模型不能过于复杂。】app
对于回归问题,咱们能够用均方差来做为Loss:
\(Loss=\sum_i{(y_i-\hat{y_i})^2}\)机器学习
对于分类问题,用交叉熵是很是常见的,这里用二值交叉熵做为例子:
\(Loss = \sum_i{(y_ilog(\hat{y_i})+(1-y_i)log(\hat{y_i}))}\)函数
总之,这个Loss就是衡量模型预测准确度的损失。学习
下面看一下如何计算这个模型复杂度\(\Omega\)吧。
\(\Omega = \gamma T+\frac{1}{2} \lambda \sum^T_j{w_j}^2\)大数据
\(T\)表示叶子节点的数量,\(w_j\)表示每一个叶子节点上的权重(与叶子节点的样本数量成正比)。优化
【这里有点麻烦的在于,\(w_j\)是与每一个叶子节点的样本数量成正比,可是并不是是样本数量。这个\(w_j\)的求取,要依靠与对整个目标函数求导数,而后找到每一个叶子节点的权重值\(w_j\)。】spa
其实说了这么多,感受XGB和GDBT好像区别不大啊?下面整理一下网上有的说法,再加上本身的理解。有错误请指出评论,谢谢!
GDBT中,只是让新的弱分类器来拟合负梯度,那拟合多少棵树才算好呢?不知道。XGB的优化函数中,有一个\(\Omega\)复杂度。这个复杂度不是某一课CART的复杂度,而是XGB中全部CART的总复杂度。可想而知,每多一颗CART,这个复杂度就会增长他的惩罚力度,当损失降低小于复杂度上升的时候,XGB就中止了。
GBDT中新的CART拟合的是负梯度,也就是一阶导数。而在XGB会考虑二阶导数的信息。
这里简单推导一下XGB如何用上二阶导数的信息的:
以前咱们获得了XGB的优化函数:
\(Obj = Loss + \Omega\)
而后咱们把Loss和Omega写的更具体一点:
\(Obj = \sum_i^n{Loss(y_i,\hat{y}_i^t)}+\sum_j^t{\Omega(cart_j)}\)
咱们如今要求取第t个CART模型的优化函数,因此目前咱们只是知道前面t-1的模型。因此咱们获得:
\(\hat{y}_i^t = \hat{y}_i^{t-1}+f_t(x_i)\)
t个CART模型的预测,等于前面t-1个CART模型的预测加上第t个模型的预测。
因此能够获得:
\(\sum_i^n{Loss(y_i,\hat{y}_i^t)}=\sum_i^n{Loss(y_i,\hat{y}_i^{t-1}+f_t(x_i))}\)
这里考虑一下特勒展开:
\(f(x+\Delta x)\approx f(x)+f'(x)\Delta x + \frac{1}{2} f''(x)\Delta x^2\)
如何把泰勒公式带入呢?
\({Loss(y_i,\hat{y}_i^t)}\)中的\(y_i\)其实就是常数,不是变量
因此其实这个是能够当作\(Loss(\hat{y}_i^t)\),也就是:
\(Loss(\hat{y}_i^{t-1}+f_t(x_i))\)
带入泰勒公式,把\(f_t(x_i)\)当作\(\Delta x\):
\(Loss(\hat{y}_i^{t-1}+f_t(x_i))=Loss(\hat{y}_i^{t-1})+Loss'(\hat{y}_i^{t-1})f_t(x_i)+\frac{1}{2}Loss''(\hat{y}_i^{t-1})(f_t(x_i))^2\)
把泰勒展开的东西带回到最开始的优化函数中,删除掉常数项\(Loss(\hat{y}_i^{t-1})\)(这个与第t个CART模型无关呀)以及前面t-1个模型的复杂度,能够获得第t个CART的优化函数:
\(Obj^t \approx \sum_i^n{[g_i f_t(x_i)+\frac{1}{2}h_i(f_t(x_i))^2}]+{\Omega(cart_t)}\)
【因此XGB用到了二阶导数的信息,而GBDT只用了一阶的梯度】
XGB借鉴了随机森林的作法,不只仅支持样本抽样,还支持特征抽样(列抽样),不只能够下降过拟合,还能够减小计算。
XGB能够自适应的处理样本中的缺失值。如何处理的这里就再也不讲述。
喜欢的话请关注咱们的微信公众号~【你好世界炼丹师】。
微信搜索公众号:你好世界炼丹师。期待您的关注。