本文共 2351 字,大约阅读时间需要 7 分钟。
XGBoost算法是由GBDT算法演变而来的,两者在优化过程中有显著的不同。GBDT算法在求解最优化问题时采用了一阶导技术,而XGBoost则更进一步,使用了损失函数的一阶导和二阶导。此外,XGBoost还支持自定义损失函数,但前提是损失函数需要具备可导性。
XGBoost算法的核心原理是基于决策树的思想,在现有决策树的基础上不断添加新的树,提升模型的精确率和效果。具体来说,XGBoost通过加树的方式逐步优化模型,实现模型性能的提升。
损失函数:通常以方差损失函数 ( l(y_i, \hat{y}_i) = (y_i - \hat{y}_i)^2 ) 为例,损失函数的选择会影响模型的训练目标。
最优化目标:目标函数 ( F(x) = \argmin E(x,y)(L(y, F(x))) ),其中 ( L(y, F(x)) ) 是损失函数。
集成算法表示:最终的预测结果表示为 ( \hat{y}i = \sum{k=1}^K f_k(x_i) ),其中 ( f_k ) 属于某一族基模型。
初始预测值: ( \hat{y}_0^ = 0 )。
逐步更新预测值:
样本计算:在样本中计算真实值 ( y_i ) 和预测值 ( \hat{y}_i^ )。
目标函数:目标函数为 ( \text{Obj}_t = \sum l(y_i, \hat{y}_i^{t-1} + f_t(x_i)) + U(f_t) + c ),其中 ( c ) 为常数。
泰勒展开:利用泰勒展开,( f(x + h) \approx f(x) + h f'(x) + \frac{h^2}{2} f''(x) ),其中 ( h ) 为步长。
定义一阶导和二阶导:
目标函数变换:目标函数变换为 ( \text{Obj}_t \approx \sum (g_i f_t(x_i) + \frac{1}{2} h_i (f_t(x_i))^2) + U(f_t) )。
样本遍历转换:将样本遍历转换为叶子节点遍历,得到最终目标函数:[\text{Obj}_t = \sum \left( G_j w_j + \frac{1}{2} (H_j + \lambda) w_j^2 \right) + qT]其中,( G_j ) 和 ( H_j ) 分别为叶子节点上的一阶导和二阶导。
求解优化:
数据集:信用卡欺诈数据集,包含 25 个特征和 284807 条记录,因变量为交易是否欺诈(0 表示正常,1 表示欺诈)。
数据处理:
模型训练:
模型评估:
不平衡数据建模对比:
通过实验结果发现,使用 SMOTE 简单重采样能显著提升模型性能,虽然仅提升 0.01 的 AUC 值,但仍然对模型性能有积极作用。
转载地址:http://xrvb.baihongyu.com/