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
相关产品推荐
相关产品推荐

