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

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) 
2

8 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) 

It's because the y_train must be encoded in a newer update XGBoost model before training it, i.e., you must use some categorical transformation like label encoders:

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

Then apply it to XGBoost model for training:

from xgboost import XGBClassifier classifier = XGBClassifier() classifier.fit(X = X_train,y = y_train) 

After training to find out its confusion matrix you must inverse transform the predicted y values, as shown:

from sklearn.metrics import confusion_matrix, accuracy_score y_pred = classifier.predict(X_test) y_pred = le.inverse_transform(y_pred) cm = confusion_matrix(y_test, y_pred) print(cm) accuracy_score(y_test, y_pred) 

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) 
1

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 

Downgrading to 1.5.0 worked for me

Also got this warning message during execution

UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release.

using the Label encoder in 1.6 returns this error for me:

MultiClassEvaluation: label must be in [0, num_class), num_class=6 but found 6 in label

If it helps, i just rolled back to version 1.2.1

1

Use python version 3.7 as used in colab

it happens because the version of ur xgboost , so :

try this :

y_train_xgb = y_train.map({"1": 0, "2": 1, "3": 2} 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like