xgboost 算法原理

1、xgboost是什么

全称:eXtreme Gradient Boosting
作者:陈天奇(华盛顿大学博士)
基础:GBDT
所属:boosting迭代型、树类算法。
适用范围:分类、回归
优点:速度快、效果好、能处理大规模数据、支持多种语言、支 持自定义损失函数等等。
缺点:发布时间短(2014),工业领域应用较少,待检验

2、基础知识,GBDT

xgboost是在GBDT的基础上对boosting算法进行的改进,内部决策树使用的是回归树,简单回顾GBDT如下:
这里写图片描述

回归树的分裂结点对于平方损失函数,拟合的就是残差;对于一般损失函数(梯度下降),拟合的就是残差的近似值,分裂结点划分时枚举所有特征的值,选取划分点。
最后预测的结果是每棵树的预测结果相加。

3、xgboost算法原理知识

3.1 定义树的复杂度

这里写图片描述

把树拆分成结构部分q和叶子权重部分w。
树的复杂度函数和样例:

### XGBoost算法工作原理详解 #### 一、概述 XGBoost是一种高效的梯度提升决策树(GBDT)实现方式,由华盛顿大学博士陈天奇开发。该算法通过一系列弱预测模型(通常是决策树),逐步迭代改进最终形成强预测模型。 #### 二、目标函数定义 为了衡量模型的好坏并指导后续的学习过程,XGBoost引入了一个特定形式的目标函数: \[ \text{Obj}(\theta)=\sum_{i=1}^{n}\ell(y_i,\hat{y}_i)+\sum_k\Omega(f_k) \] 其中\( y_i \)表示真实标签值,而 \( \hat{y}_i=\phi(x_i;\Theta)\approx y_i \)代表预测得分;第一项为训练误差部分,第二项是对每棵新加入的基分类器施加正则化的惩罚项[^3]。 #### 三、泰勒展开近似求解 考虑到直接最小化上述复杂表达式的难度较大,在实际操作过程中会利用泰勒公式对损失函数做二次逼近处理: \[ L(\tilde{\mathbf{x}}+\Delta\mathbf{x})\simeq f(\tilde{\mathbf{x}})+f'(\tilde{\mathbf{x}})^T\cdot\Delta\mathbf{x}+\frac{1}{2}\Delta\mathbf{x}^TH_f(\tilde{\mathbf{x}})\cdot\Delta\mathbf{x} \] 这里取到了Hessian矩阵即二阶导数的信息来提高精度,从而使得每次更新都能更加贴近全局最优方向[^4]。 #### 四、结构参数量化与优化策略 对于新增加进来的一颗子树而言,除了要确定具体的分裂节点外还需要评估整棵树所带来的增益情况。为此设定了如下公式用于计算某个潜在分割点处可能产生的收益变化量: \[ Gain=\frac{1}{2}\left[\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}\right]-\gamma \] 这里的GL,HL分别对应左分支样本集上的梯度平方和以及海森行列式之和;GR,HR同理适用于右支路;λ用来控制L2范数系数大小以防止过拟合现象发生;γ则是提前剪枝阈值参数设置。 最后采用贪心法遍历所有候选切分位置寻找局部最大Gain值得方案实施建模直至满足终止条件为止。 ```python import xgboost as xgb from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # 创建模拟数据集 X,y = make_classification(n_samples=100,n_features=20) # 划分训练测试集合 X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=.2) # 定义DMatrix对象作为输入源 dtrain=xgb.DMatrix(data=X_train,label=y_train) dtest=xgb.DMatrix(data=X_test,label=y_test) param={ 'max_depth':6, 'eta':.3, 'objective':'binary:logistic' } num_round=100 bst=xgb.train(param,dtrain,num_round) pred_prob=bst.predict(dtest) print(pred_prob[:5]) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值