XGBoost算法的数学原理概述 | 更文挑战

491 阅读2分钟

“这是我参与更文挑战的第29天,活动详情查看: 更文挑战

XGBoost算法在某种程度上可以说是GBDT算法的改良版,两者在本质上都是利用了Boosting算法中拟合残差的思想。

作为对GBDT算法的高效实现,XGBoost算法在以下两方面进行了优化。

算法本身的优化

XGBoost算法的损失函数,除了本身的损失,还加上了正则化部分,可以防止过拟合,泛化能力更强。XGBoost算法的损失函数是对误差部分做二阶泰勒展开,相较于GBDT算法的损失函数只对误差部分做负梯度(一阶泰勒)展开,更加准确。

算法运行效率的优化

对每个弱学习器,如决策树建立的过程做并行选择,找到合适的子节点分裂特征和特征值,从而提升运行效率。

XGBoost算法的简单代码实现

XGBoost算法既能做分类分析,又能做回归分析,对应的模型分别为XGBoost分类模型(XGBClassifier)和XGBoost回归模型(XGBRegressor)。

通过如下代码可以引入XGBoost分类模型。

from xgboost import XGBClassifier

在Jupyter Notebook中引入该模型后,可以通过如下代码获取官方说明文档内容。

XGBClassifier?

XGBoost分类模型的简单演示代码如下。

from xgboost import XGBClassifier
import numpy as np
X = np.array([[1,2],[3,4],[5,6],[7,8],[9,10]])
y = [0,0,0,1,1]
model = XGBClassifier()
model.fit(X,y)
print(model.predict([[5,5]]))

第3行代码中的X是特征变量,共有2个特征,因为XGBoost分类模型的特征变量只支持array数组类型或DataFrame二维表格类型的数据,所以这里使用NumPy库的array()函数将list列表类型的数据转换为array数组类型的数据;第4行代码中的y是目标变量,共有2个类别——0和1;第5行代码引入模型;第6行代码用fit()函数训练模型;第7行代码用predict()函数进行预测,预测结果如下。

[0]

通过如下代码可以引入XGBoost回归模型。

from xgboost import XGBRegressor

在Jupyter Notebook中引入该模型后,可以通过如下代码获取官方说明文档内容。

XGBRegressor?

XGBoost回归模型的简单演示代码如下。

from xgboost import XGBRegressor
X = [[1,2],[3,4],[5,6],[7,8],[9,10]]
y=[1,2,3,4,5]
model = XGBRegressor()
model.fit(X,y)
print(model.predict([[5,5]]))

第2行代码中的X是特征变量,共有2个特征;第3行代码中的y是目标变量,为连续变量;第4行代码引入模型;第5行代码用fit()函数训练模型;第6行代码用predict()函数进行预测,预测结果如下。

[2.9981294]