Я работаю над задачей классификации, используя модель классификатора XGBoost. Мой набор данных содержит категориальные переменные, мои целевые классы («Отсев», «Зачислен», «Выпускник»).
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']
После этого я использую методы кодирования меток; он работает нормально. Но мне нужно ['Отчисление' 'Зачислено' 'Выпускник'] это категоричное указание в производственном разделе. Как я могу изменить это [0 1 2] на ['Отсев' 'Зачислен' 'Выпускник'] после поезда XGBClassifier.
Вы можете восстановить истинные метки из закодированного вывода, проверьте, например, здесь
LabelEncoder
может не только transorm
преобразовать исходную цель в числовые значения, но также inverse_transform
числовые значения в исходные целевые значения.
Итак, ваш код должен выглядеть так:
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit_transform(y_train)
# fit
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)
# prediction
pred = xgb.predict(X_test)
original_pred = le.inverse_transform(pred)
Официальная документация здесь.
Классы должны быть целыми числами, а не строками.