Xgboost从基础到实战
XGBoost:eXtreme Gradient Boosting
* 应用机器学习领域的一个强有力的工具
* Gradient Booting Machines(GBM)的优化表现,快速有效
—深盟分布式机器学习开源平台(Distributed machine learning Community,DMLC)的分支
—DMLC也开源流行的深度学习库mxnet
* GBM:
Machine:机器学习模型-对数据的产生规律建模
Boosting Machines:弱学习器组合成强学习器/模型
Gradient Booting Machines:根据梯度下降方式组合弱学习器
Machines:
Machines:机器学习模型,建模数据产生规律--最小化目标函数
目标函数通常包括两个部分:
* 损失函数:与任务相关(选择和训练数据匹配的最好模型)
** 回归:残差平方
** 分类:0-1损失、logistic损失、合叶损失(SVM)
*正则项:与模型复杂度有关(选择最简单的模型)
L0、L1、L2正则项
L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。L1在特征选择时候非常有用,而L2就只是一种规则化而已。
Boosting Machines
* Boosting:价格弱学习器组合成强学习器
* 弱学习器;比随机猜测性能好的学习器
* 常用弱学习器:决策树/分类回归树
决策树:每个叶子节点对应一个决策
分类回归树:每个叶子节点有个预测分数(score),比决策树更加的灵活
* Adaptive Boosting(AdaBoost):第一个Boosting算法,最初应用于人脸识别,现在这个工具基本上用于机器学习
弱分类器:只有一个分裂的决策树
对于当前分类器不能处理的样本,增加其权重
不断的加入新的弱学习器,知道达到终止条件(强学习器:弱学习器的加权线性组合,权重与其正确率有关)
Gradient Boosting Machine(GBM)
* Friedman将AdaBoost推广到一般Gradient Booting框架,得到Gradient Booting Machines(GBM):将Booting视作一个数值优化问题,采用类似梯度下降的方式优化求解
也被称为stage-wise additive model:每次增加一个弱分类器到已有模型,已在模型中的弱学习器不在变化
这种推广使得我们可以使用可微的损失函数,从而支持的任务从两类分类扩展到回归和多类分类问题。
XGBoost的特别之处:
* 正则化:以“正则化提升(regularized booting )”著称
-标准GBM的实现没有显式的正则化步骤
-正则化对减少过拟合有帮助
* 并行处理,相比GBM有了速度的飞跃
-借助OpenMP,自动将单机CPU的多核进行并行计算
-支持GPU加速
-支持分布式
* 高度的灵活性:允许用户自定义优化目标和评级标准
-只需要损失函数的一阶导数和二阶导数
* 剪枝
-当新增分裂带来负增益时,GBM会停止分裂
-XGBoost一直分裂到指定的最大深度(max_depth),然后回头来剪枝
* 内置交叉验证
-XGBoost允许子在每一轮Boosting迭代中使用交叉验证->可以方便的获得Boosting迭代次数
-GBM使用网格搜索,只能检测有限个值
* 在线学习;XGBoost和GBM都支持
XGBoost的优势
执行速度:确实比其他Gradient boosting实现快
模型性能:在结构化数据集上,在分类/回归/排序预测建模上表现突出
如何使用?
处理流程:
训练数据读取-->数据导入(设置训练参数(超参数))-->模型训练-->模型评估(如果效果不好要转换到第二步骤)
注意:训练数据要进行特征变换一.xgboost的优点
1.正则化
xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
2.并行处理
xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去
Python机器学习之XGBoost从入门到实战(基本理论说明)
最新推荐文章于 2024-07-05 16:14:48 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)