You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XGBoost分类训练后,如何将数字标签还原为原分类名称?

问题:XGBoost多分类任务中数字标签转回原分类名称

我正在使用XGBoost分类器开展多分类任务,数据集目标类别为('Dropout', 'Enrolled', 'Graduate')。执行以下训练代码时出现报错:

from xgboost import XGBClassifier

xgb = XGBClassifier(
    n_estimators=200,
    max_depth=6,  
    learning_rate=0.1,  
    subsample=0.8,
    colsample_bytree=0.8,
    eval_metric='mlogloss'  
)

xgb.fit(X_train, y_train)

报错信息:

ValueError: Invalid classes inferred from unique values of `y`. Expected: [0 1 2], 
got ['Dropout' 'Enrolled' 'Graduate']

已通过LabelEncoder处理目标变量后完成模型训练,但生产环境需要将预测出的数字标签[0,1,2]转回原分类名称,请问该如何实现?


解决方案

1. 训练时保留LabelEncoder实例

训练阶段对目标变量做编码时,必须保留LabelEncoder的实例,不能仅使用一次性转换:

from sklearn.preprocessing import LabelEncoder
from xgboost import XGBClassifier

# 初始化编码器并拟合训练集目标变量
le = LabelEncoder()
y_train_encoded = le.fit_transform(y_train)
# 测试集目标变量仅做转换,不重新拟合
y_test_encoded = le.transform(y_test)

# 训练XGBoost模型
xgb = XGBClassifier(
    n_estimators=200,
    max_depth=6,  
    learning_rate=0.1,  
    subsample=0.8,
    colsample_bytree=0.8,
    eval_metric='mlogloss'  
)
xgb.fit(X_train, y_train_encoded)

2. 预测后还原原分类名称

模型预测得到数字标签后,直接调用LabelEncoder的inverse_transform方法即可完成还原:

# 预测得到数字标签
y_pred_encoded = xgb.predict(X_test)

# 将数字标签转回原分类名称
y_pred = le.inverse_transform(y_pred_encoded)

3. 验证类别映射关系(可选)

若需确认数字标签与原类别的对应关系,可查看LabelEncoder的classes_属性,它会按编码顺序存储原类别名称:

print(le.classes_)  # 输出结果:['Dropout' 'Enrolled' 'Graduate']

其中索引0对应Dropout,索引1对应Enrolled,索引2对应Graduate。


内容的提问来源于stack exchange,提问作者Md. Ismiel Hossen Abir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:12:14