前言
写完了Adaboost,也是大体了解了集成学习的原理以及分类,还不是很了解的同学可以点进去看看。然后还有GBDT,接下来就写一下集成学习中很重要的一个算法Xgboost。
先写在前面,如果对Adaboost和GBDT这两个算法还不是很熟悉的小伙伴,可以先去阅读一下这两个算法相关的文章。因为我之前讲过这两个算法,所以在本文就不讲了,直接开始我们的Xgboost算法相关讲解。
一、Xgboost的基本原理
梯度提升(Gradient boosting),是指boosting算法每一步的弱分类器都是依据损失函数的梯度方向来生成的。和GBDT依靠残差生成弱分类器和权重的方式不同,XGBoost算法是采用分步前向加性模型,只不过在每次迭代中生成弱学习器后不再需要计算一个系数,XGBoost 是由 k 个基模型组成的一个加法运算式:
其中f(x)为弱预测器,y是预测结果。所以损失函数可以通过下列公式得到:
其中是第i个特征值的真实值,n是样本数量。接下来也就不废话了,就直接开始数学公式吧,我也会尽我所能去讲解明白这其中的原理,大家可以反复多看几遍。
模型的预测精度由偏差和方差共同决定,损失函数代表了模型的偏差,想要方差小则需要更简单的模型, 所以目标函数最终由损失函数L与抑制模型复杂度的正则项Ω组成, 所以目标函数如下:
其中Ω是正则化,公式也如下所示:
公式定义前面T代表的是叶子节点数,前面的是超参数,这个正则项的意思是生成尽可能简单的弱分类器,进而减少方差。后面的w是作用在叶子节点上的权重,用来抑制弱分类器的过拟合现象。关于正则化就先介绍到这里,后面进行目标函数的优化时再进行讲解。首先我们需要的时对损失函数进行优化 boosting模型是前向加法, 以第t步模型为例, 模型对第i个样本的预测为: