Invalid classes inferred from unique values of `y`. Expected: [0 1 2 3 4 5], got [1 2 3 4 5 6]

Viewed 9212

I've trained dataset using XGB Classifier, but I got this error in local. It worked on Colab and also my friends don't have any problem with same code. I don't know what that error means...

Invalid classes inferred from unique values of y. Expected: [0 1 2 3 4 5], got [1 2 3 4 5 6]

this is my code, but I guess it's not the reason.

start_time = time.time()
xgb = XGBClassifier(n_estimators = 400, learning_rate = 0.1, max_depth = 3)
xgb.fit(X_train.values, y_train)
print('Fit time : ', time.time() - start_time)
5 Answers

That happens because the class column has to start from 0 (as required since version 1.3.2). An easy way to solve that is using LabelEncoder from sklearn.preprocssing library.

Solution (works for version 1.6):

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y_train = le.fit_transform(y_train)

And then you try/run your code again:

start_time = time.time()
xgb = XGBClassifier(n_estimators = 400, learning_rate = 0.1, max_depth = 3)
xgb.fit(X_train.values, y_train)
print('Fit time : ', time.time() - start_time)

The erros comes with the new version of xgboost, Uninstall current Xgboost and install xgboost 0.90

pip uninstall xgboost 

pip install xgboost==0.90

Try to adding stratify to the train_test_split code:

X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=test_size, stratify = labels)

Use python version 3.7 as used in colab

If it helps, i just rolled back to version 1.2.1

Related