XGB-17:模型截距

在 XGBoost 中,模型截距(也称为基本分数)是一个值,表示在考虑任何特征之前模型的起始预测。它本质上是处理回归任务时训练数据的平均目标值,或者是分类任务的赔率对数。

在 XGBoost 中,每个叶子节点都会输出一个分数,而模型的最终预测是将所有叶子节点的分数相加得到的。这些分数在树的训练过程中被学习得到,但当没有任何输入特征时,模型需要一个基准值,这就是截距的作用。

从2.0.0版本开始,XGBoost支持在训练时根据目标值自动估计模型截距(名为base_score)。该行为可以通过将base_score设置为常数来控制。以下代码段禁用了自动估计:

python 复制代码
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)的矩阵。

python 复制代码
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模型堆叠在其他模型之上,有关从预测中提升的示例,请参见Demo。当指定了base_margin时,它会自动覆盖base_score参数。如果正在堆叠XGBoost模型,那么使用应该是相对直接的,前面的模型提供原始预测,而新模型使用预测作为偏置。对于更自定义的输入,用户需要额外注意链接函数。设F为模型,g为链接函数,由于当样本特定的base_margin可用时base_score会被覆盖:

g ( E y i ) = F ( x i ) g(Ey_i) = F(x_i) g(Eyi)=F(xi)

当提供基线偏置(base margin)b时,它会加到模型的原始输出F上。

g ( E y i ) = F ( x i ) + b i g(Ey_i) = F(x_i) + b_i g(Eyi)=F(xi)+bi

并且最终模型的输出是:

g − 1 ( F ( x i ) + b i ) g^{-1}(F(x_i) + b_i) g−1(F(xi)+bi)

以使用伽马偏差目标函数reg:gamma为例,该函数具有对数链接函数,因此:

ln ⁡ ( E y i ) = F ( x i ) + b i E y i = exp ⁡ ( F ( x i ) + b i ) \begin{split}\ln{(Ey_i)} = F(x_i) + b_i \\ Ey_i = \exp{(F(x_i) + b_i)}\end{split} ln(Eyi)=F(xi)+biEyi=exp(F(xi)+bi)

因此,如果正在输入来自具有相应目标函数的模型(如GLM)的输出,请确保这些输出尚未通过逆链接函数(激活函数)进行转换。

在估计之后,可以通过save_config()访问base_score(截距)。与base_margin不同,返回的值代表应用逆链接函数后的值。以逻辑回归和逻辑链接函数为例,给定base_score为0.5,

g ( i n t e r c e p t ) = l o g i t ( 0.5 ) = 0 g(intercept) = logit(0.5) = 0 g(intercept)=logit(0.5)=0会被加到模型的原始输出上:

E y i = g − 1 ( F ( x i ) + g ( i n t e r c e p t ) ) Ey_i = g^{-1}{(F(x_i) + g(intercept))} Eyi=g−1(F(xi)+g(intercept))

而0.5等同于 b a s e _ s c o r e = g − 1 ( 0 ) = 0.5 base\_score = g^{-1}(0) = 0.5 base_score=g−1(0)=0.5 。如果忽略模型并只考虑截距,这将更加直观,截距是在模型拟合之前估计的:

E y = g − 1 ( g ( i n t e r c e p t ) ) E y = i n t e r c e p t \begin{split}Ey = g^{-1}{(g(intercept))} \\ Ey = intercept\end{split} Ey=g−1(g(intercept))Ey=intercept

对于一些目标函数,如平均绝对误差(MAE),存在接近的解,而对于其他目标函数,则是使用一步牛顿方法进行估计。

参考

相关推荐
清水白石00817 分钟前
从打印对象到高质量调试:彻底理解 Python 中 `__repr__` 和 `__str__` 的区别
开发语言·python
Sammyyyyy29 分钟前
Google I/O 2026 Antigravity 更新解析与 SDK 实战指南
python·ai编程·servbay
keykey6.1 小时前
迁移学习实战:用预训练模型做图像分类
开发语言·人工智能·深度学习·机器学习
嫂子的姐夫1 小时前
047-MD5:飞卢网
爬虫·python·js逆向·逆向
数智工坊1 小时前
周志华《Machine Learning》学习笔记--第十四章--概率图模型
笔记·学习·机器学习
DXM05211 小时前
第8期| 传统机器学习遥感解译:SVM & 随机森林分类全流程实操
人工智能·python·随机森林·机器学习·支持向量机·arcgis·自然语言处理
装不满的克莱因瓶1 小时前
深入PyTorch模型的训练与可视化 —— 掌握迁移学习等模型训练效果提升的办法
人工智能·pytorch·python·深度学习·神经网络·ai·迁移学习
无心水1 小时前
【OpenClaw:赚钱】案例19、内容产量5倍、广告收入翻4倍:播客转多平台内容矩阵全自动化实战(OpenAI Whisper + Claude)
java·人工智能·python·ai编程·openclaw·养龙虾·java.time
逗逗班学Python1 小时前
基于 Faster-Whisper 的本地语音转字幕与会议纪要系统:从音频转写到 SRT 字幕与 Markdown 纪要完整项目实战
python·语音识别·faster-whisper·字幕生成·会议纪要
The moon forgets1 小时前
ABot-M0:基于动作流形学习的机器人操作VLA基础模型深度解析
人工智能·pytorch·python·学习·具身智能·vla·点云分割