多重输出

Added in version 1.6.

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

备注

截至 XGBoost 2.0,该功能是实验性的,并且功能有限。仅测试了 Python 包。

针对每个目标训练一个模型

默认情况下,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)

该功能仍在开发中,目标和指标的支持有限。

使用向量叶进行训练

Added in version 2.0.

备注

这仍然是正在进行中的工作,大多数功能尚未实现。

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

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

有关回归的工作示例,请参见 多输出回归的演示