我想了解如何在xgboost示例脚本中计算logloss函数的梯度和粗糙度.
我已经简化功能采取numpy的阵列,以及产生y_hat和y_true其在脚本中使用的值的样品.
这是一个简化的例子:
import numpy as np
def loglikelihoodloss(y_hat, y_true):
prob = 1.0 / (1.0 + np.exp(-y_hat))
grad = prob - y_true
hess = prob * (1.0 - prob)
return grad, hess
y_hat = np.array([1.80087972, -1.82414818, -1.82414818, 1.80087972, -2.08465433,
-1.82414818, -1.82414818, 1.80087972, -1.82414818, -1.82414818])
y_true = np.array([1., 0., 0., 1., 0., 0., 0., 1., 0., 0.])
loglikelihoodloss(y_hat, y_true)
Run Code Online (Sandbox Code Playgroud)
方程式如何相等?
我试图了解 XGBoost 中的多类分类是如何工作的。我已经阅读了 Chen 和 Guestrin 的论文(2016,https://arxiv.org/abs/1603.02754),但细节我仍然不清楚:
假设我想为 3 类别分类任务生成一个概率分类器。如果我理解正确的话,XGBoost 将回归树拟合为“弱学习器”或增强模型的组件。因此,如果将新的预测向量传递给 XGB 模型,回归树会生成一个实际值作为“预测”,其(加权)组合是增强模型预测。
从这个问题和论文中的文档,我了解到softmax激活函数应用于增强模型预测(真实值?),并且树结构(例如分裂点)是通过优化交叉熵损失来确定的将 softmax 应用于模型输出后的函数。
我不清楚的是三类概率到底是如何获得的。如果模型输出只是一个实值(各个回归树输出的加权组合),那么 softmax 函数的应用如何返回 3 个概率?
我在 Python 和 R 中使用 XGBoost 库,但这可能没有什么区别。