多输出
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")
有关回归的示例,请参见 多输出回归演示。