自版本1.6开始,XGBoost的Python包具有对多输出回归和多标签分类的实验性支持。多标签分类通常指具有多个非排他性类标签的目标。例如,电影可以同时被分类为科幻和喜剧。
使用单模型处理多目标训练
默认情况下,XGBoost为每个目标构建一个模型,类似于sklearn的元估计器(meta estimators),同时具有重用数据和其他集成功能(如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)
使用 Vector Leaf 进行训练
XGBoost可以选择使用hist tree
方法构建多输出树,其中叶子的大小等于目标的数量。这种行为可以通过multi_strategy
训练参数进行控制,该参数可以取值one_output_per_tree
(默认值),用于为每个目标构建一个模型,或者multi_output_tree
,用于构建多输出树。
clf = xgb.XGBClassifier(tree_method="hist", multi_strategy="multi_output_tree")