多输出

添加于版本 1.6。

从 1.6 版本开始,XGBoost 的 Python 包实验性支持多输出回归和多标签分类。多标签分类通常指具有多个非互斥类别标签的目标。例如,一部电影可以同时被归类为科幻片和喜剧片。关于不同多输出模型相关术语的详细解释,请参阅 scikit-learn 用户指南

注意

截至 XGBoost 3.0 版本,此功能尚处于实验阶段,功能有限。仅对 Python 包进行了测试。此外,不支持 glinear

每目标一模型训练

默认情况下,XGBoost 为每个目标构建一个模型,类似于 sklearn 元估计器,同时额外受益于数据复用以及 SHAP 等其他集成功能。关于回归的示例,请参阅 多输出回归示例演示。对于多标签分类,采用二元相关性策略。输入 y 的形状应为 (n_samples, n_classes),每列的值为 0 或 1,用于指定样本是否被标记为对应类别的正样本。给定一个有 3 个输出类别和 2 个标签的样本,相应的 y 应编码为 [1, 0, 1],其中第二个类别被标记为负样本,其余标记为正样本。目前 XGBoost 只支持密集矩阵作为标签。

from sklearn.datasets import make_multilabel_classification
import numpy as np

X, y = make_multilabel_classification(
    n_samples=32, n_classes=5, n_labels=3, random_state=0
)
clf = xgb.XGBClassifier(tree_method="hist")
clf.fit(X, y)
np.testing.assert_allclose(clf.predict(X), y)

该功能仍在开发中,对目标函数和评估指标的支持有限。

向量叶训练

添加于版本 2.0。

注意

这项工作仍在进行中,大部分功能缺失。

当使用树方法 hist 时,XGBoost 可以选择性地构建多输出树,其叶子大小等于目标数量。此行为可以通过训练参数 multi_strategy 控制,该参数可以取值 one_output_per_tree(默认值)用于构建每目标一模型,或者 multi_output_tree 用于构建多输出树。

clf = xgb.XGBClassifier(tree_method="hist", multi_strategy="multi_output_tree")

有关回归的示例,请参阅 多输出回归示例演示