XGBoost和LightGBM

这两个模型都属于集成学习中的树模型,每个机器学习模型都有它特定的应用场景,不同的数据集适合用到的模型是不一样的。

结构化数据、非结构化数据

  1. 结构化数据:规整,维度固定;一般我们的表格数据都属于结构化数据。
  2. 非结构化数据:非规整,维度不固定;比如说一些文本、图像、音频、视频等

结构化数据的特点

  1. 类别字段较多
  2. 聚合特征较多

对于结构化数据集,如果我们遇到的数据集有很多类别类型的特征,而且特征与特征之间是相互独立的,非常适合使用树模型。

XGBoost

提出时间较早的高阶树模型,精度较好。比随机森林较晚,比LightGBM、Catboost较早。

缺点:训练时间较长,对类别特征支持不友好。

接口:scikit-learn接口和原声接口。

XGBoost是基于GBDT(Gradient Boosting Decision Tree)的一种算法模型有关Gradient Boosting的介绍可以参考机器学习算法整理(四)

XGBoost首先是树模型,Xgboost就是由很多CART树集成。一般有分类树和回归树,分类树是使用数据集的特征(维度)以及信息熵或者基尼系数来进行节点分裂。对于回归树则无法使用信息熵和基尼系数来判定树的节点分裂,包括预测误差(常用的有均方误差、对数误差等)。而且节点不再是类别,是数值(预测值),那么怎么确定呢?有的是节点内样本均值,有的是最优化算出来的比如XGBoost。

CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点是基于第j个特征值进行分裂的,设该特征值小于s的样本划分为左子树,大于s的样本划分为右子树。

而CART回归树实质上就是在该特征维度对样本空间进行划分,而这种空间划分的优化是一种NP难问题,因此,在决策树模型中是使用启发式方法解决。典型CART回归树产生的目标函数为:

因此,当我们为了求解最优的切分特征j和最优的切分点s,就转化为求解这么一个目标函数:

所以我们只要遍历所有特征的的所有切分点,就能找到最优的切分特征和切分点。最终得到一棵回归树。

我们之前在Gradient Boosting的介绍中说,每次训练出一个模型m后会产生一个错误e,这个错误就是残差。GBDT是计算负梯度,用负梯度近似残差。回归任务下,GBDT 在每一轮的迭代时对每个样本都会有一个预测值,此时的损失函数为均方差损失函数

此时的负梯度

所以,当损失函数选用均方损失函数是时,每一次拟合的值就是(真实值 - 当前模型预测的值),即残差。此时的变量是,即“当前预测模型的值”,也就是对它求负梯度。残差在数理统计中是指实际观察值与估计值(拟合值)之间的差。“残差”蕴含了有关模型基本假设的重要信息。如果回归模型正确的话, 我们可以将残差看作误差的观测值。GBDT需要将多棵树的得分累加得到最终的预测得分,且每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差。

XGBoost与gbdt比较大的不同就是目标函数的定义。XGBoost的目标函数如下图所示:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章