Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how can I fix this WARNING in Xgboost?

Tags:

python

xgboost

I have an imbalanced dataset with 53987 rows, 32columns and 8 classes. I'm trying to perform multiclass classification. This is my code and the corresponding output:

from sklearn.metrics import classification_report, accuracy_score
import xgboost
xgb_model = xgboost.XGBClassifier(num_class=7, learning_rate=0.1, num_iterations=1000, max_depth=10, feature_fraction=0.7, 
                              scale_pos_weight=1.5, boosting='gbdt', metric='multiclass')
hr_pred = xgb_model.fit(x_train, y_train).predict(x_test)
print(classification_report(y_test, hr_pred))


[10:03:13] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: 
Parameters: { boosting, feature_fraction, metric, num_iterations, scale_pos_weight } might not be used.

This may not be accurate due to some parameters are only used in language bindings but
passed down to XGBoost core.  Or some parameters are not used but slip through this verification. Please open an issue if you find above cases.

[10:03:13] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.
          precision    recall  f1-score   support

     1.0       0.84      0.92      0.88      8783
     2.0       0.78      0.80      0.79      4588
     3.0       0.73      0.59      0.65      2109
     4.0       1.00      0.33      0.50         3
     5.0       0.42      0.06      0.11       205
     6.0       0.60      0.12      0.20       197
     7.0       0.79      0.44      0.57       143
     8.0       0.74      0.30      0.42       169

accuracy                           0.81     16197
macro avg       0.74      0.45      0.52     16197
weighted avg       0.80      0.81      0.80     16197

and

max_depth_list = [3,5,7,9,10,15,20,25,30]

for max_depth in max_depth_list:
    xgb_model = xgboost.XGBClassifier(max_depth=max_depth, seed=777)
    xgb_pred = xgb_model.fit(x_train, y_train).predict(x_test)
    xgb_f1_score_micro = f1_score(y_test, xgb_pred, average='micro')

    xgb_df = pd.DataFrame({'tree depth':max_depth_list,             
                            'accuracy':xgb_f1_score_micro})
    xgb_df

WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.

How can I fix these warnings?

like image 591
mineral Avatar asked Feb 08 '21 07:02

mineral


People also ask

How do I ignore a warning in Python?

Use the filterwarnings() Function to Suppress Warnings in Python. The warnings module handles warnings in Python. We can show warnings raised by the user with the warn() function. We can use the filterwarnings() function to perform actions on specific warnings.

How do I import XGBoost into Python?

As usual, you start by importing the library xgboost and other important libraries that you will be using for building the model. Note you can install python libraries like xgboost on your system using pip install xgboost on cmd. Separate the target variable and rest of the variables using . iloc to subset the data.


Video Answer


1 Answers

If you don't want to change any behavior, just set the eval_metric='mlogloss' as the following.

xgb_model = xgboost.XGBClassifier(num_class=7,
                                  learning_rate=0.1,
                                  num_iterations=1000,
                                  max_depth=10,
                                  feature_fraction=0.7, 
                                  scale_pos_weight=1.5,
                                  boosting='gbdt',
                                  metric='multiclass',
                                  eval_metric='mlogloss')

From the warning log, you will know what eval_metric algorithm to set to remove the warning. Mostly either mlogloss or logloss.

like image 159
Wei Chen Avatar answered Nov 15 '22 00:11

Wei Chen