截距
在 2.0.0 版本中添加。
自 2.0.0 版本以来,XGBoost 支持在训练时根据目标自动估计模型截距(称为 base_score
)。通过将 base_score
设置为常数可以控制此行为。以下代码片段禁用了自动估计
import xgboost as xgb
reg = xgb.XGBRegressor()
reg.set_params(base_score=0.5)
此外,这里的 0.5 表示应用逆链接函数后的值。有关描述,请参阅文档末尾。
除了 base_score
之外,用户还可以通过数据字段 base_margin
提供全局偏差,它根据任务可以是向量或矩阵。对于多输出和多分类,base_margin
是一个大小为 (n_samples, n_targets)
或 (n_samples, n_classes)
的矩阵。
import xgboost as xgb
from sklearn.datasets import make_regression
X, y = make_regression()
reg = xgb.XGBRegressor()
reg.fit(X, y)
# Request for raw prediction
m = reg.predict(X, output_margin=True)
reg_1 = xgb.XGBRegressor()
# Feed the prediction into the next model
reg_1.fit(X, y, base_margin=m)
reg_1.predict(X, base_margin=m)
它指定了每个样本的偏差,可用于将 XGBoost 模型堆叠在其他模型之上,请参见从预测进行 boosting 的演示 以获取示例。指定 base_margin
时,它会自动覆盖 base_score
参数。如果您正在堆叠 XGBoost 模型,则用法应该相对简单,前一个模型提供原始预测,新模型使用该预测作为偏差。对于更自定义的输入,用户需要特别注意链接函数。设 \(F\) 为模型,\(g\) 为链接函数,由于当提供样本特定的 base_margin
时,base_score
会被覆盖,在此我们将省略它
当提供了基偏差 \(b\) 时,它会被添加到原始模型输出 \(F\)
最终模型的输出是
以 gamma 偏差目标 reg:gamma
为例,它具有对数链接函数,因此
因此,如果您正在馈送来自诸如 GLM 等模型的输出,并且带有相应的目标函数,请确保输出尚未通过逆链接(激活)进行转换。
对于 base_score
(截距),在估计后可以通过 save_config()
访问。与 base_margin
不同,返回的值表示应用逆链接后的值。以逻辑回归和 logit 链接函数为例,给定 base_score
为 0.5,将 \(g(intercept) = logit(0.5) = 0\) 添加到原始模型输出中
0.5 与 \(base\_score = g^{-1}(0) = 0.5\) 相同。如果您移除模型仅考虑截距,这会更直观,截距是在模型拟合之前估计的
对于一些目标函数(如 MAE),存在封闭解,而对于其他目标函数,则使用一步牛顿法进行估计。
偏移量
base_margin
是 GLM 中 offset
的一种形式。以 Poisson 目标函数为例,我们可能想对速率而不是计数进行建模
偏移量定义为应用于暴露变量的对数链接:\(\ln{exposure}\)。设 \(c\) 为计数,\(\gamma\) 为暴露,将响应 \(y\) 代入我们之前对基偏差的公式中
对于 Poisson 回归,将 \(g\) 替换为 \(\ln\)
我们得到
如您所见,我们可以使用 base_margin
进行带偏移量的建模,类似于 GLM