xgboost数学推导
时间: 2023-10-01 14:05:10 浏览: 103
XGBoost,全名为eXtreme Gradient Boosting,是一种基于决策树的集成学习算法。它结合了Gradient Boosting算法和决策树算法的优点,在许多机器学习竞赛中取得了显著的成绩。
下面是XGBoost的数学推导:
XGBoost的目标函数为:
$$
Obj = \sum_{i=1}^{n}l(y_i, \hat{y_i}) + \sum_{k=1}^{K}\Omega(f_k)
$$
其中,$n$为样本数,$y_i$为第$i$个样本的真实值,$\hat{y_i}$为第$i$个样本的预测值,$l(y_i, \hat{y_i})$为损失函数,$K$为树的数量,$\Omega(f_k)$为正则化项。正则化项的目的是防止过拟合,它包括树的叶子节点数量和叶子节点分数的二阶范数。
XGBoost使用Gradient Boosting算法进行训练,Gradient Boosting算法的核心思想是迭代地训练一组弱学习器,将它们组合成一个强学习器。每一次迭代都会添加一个新的树模型,它的预测值是前面树模型的预测值和当前树模型的预测值的加权和。
因此,我们需要定义一个损失函数$L$,它是所有树模型预测值和真实值之间的差距的加权和,即:
$$
L = \sum_{i=1}^{n}l(y_i, \hat{y_i}) + \sum_{k=1}^{K}\Omega(f_k)
$$
其中,$\hat{y_i}$为所有树模型预测值的加权和。
为了最小化损失函数$L$,我们需要对每个树模型的预测值进行求解。我们可以使用梯度下降算法来优化损失函数,其中梯度是损失函数关于当前模型的导数。
对于第$k$个树模型,我们需要求解其预测值$f_k(x_i)$,它可以表示为:
$$
f_k(x_i)=f_{k-1}(x_i)+h_k(x_i)
$$
其中,$f_{k-1}(x_i)$为前$k-1$个树模型的预测值,$h_k(x_i)$为第$k$个树模型的预测值。
我们可以使用泰勒展开式来近似$h_k(x_i)$:
$$
h_k(x_i) = \sum_{j=1}^{J}w_{j,k} I(x_i\in R_{j,k})
$$
其中,$w_{j,k}$为第$j$个叶子节点的分数,$R_{j,k}$为第$j$个叶子节点的区域。
我们需要对每个叶子节点的分数进行求解,可以使用最小二乘法来求解。对于第$j$个叶子节点,我们需要求解其分数$w_{j,k}$,它可以表示为:
$$
w_{j,k}=-\frac{\sum_{x_i\in R_{j,k}}g_i}{\sum_{x_i\in R_{j,k}}h_i+\lambda}
$$
其中,$g_i$为损失函数关于预测值的一阶导数,$h_i$为损失函数关于预测值的二阶导数,$\lambda$为正则化参数。
最后,我们可以使用梯度下降算法来更新每个树模型的预测值。对于第$k$个树模型,我们需要将其预测值$f_k$更新为:
$$
f_k(x_i)=f_{k-1}(x_i)+\eta\sum_{j=1}^{J}w_{j,k} I(x_i\in R_{j,k})
$$
其中,$\eta$为学习率,它控制每个树模型的贡献大小。
阅读全文