XGBoost产生非二进制预测

时间:2019-02-27 12:59:38

标签: machine-learning scikit-learn xgboost

在使用XGBoost训练模型后,我尝试测试模型,但是预测是某种浮点数,当我想获得性能指标时会导致错误。这是代码:

import xgboost as xgb
import sklearn.metrics as mt 

xg_reg = xgb.XGBRegressor(objective ='reg:linear', colsample_bytree = 0.3, learning_rate = 0.1,
            max_depth = 5, alpha = 10, n_estimators = 10)
xg_reg.fit(X_train,Y_train)
y_pred = xg_reg.predict(X_test)
mt.f1_score(Y_test, y_pred)

这是错误:

ValueError: Target is multiclass but average='binary'. Please choose another average setting.

当我使用其他增强模型(例如AdaBoost或CatBoost)时,这从未发生过。我应该考虑一个阈值,将+1分配给高于阈值的那些,将-1分配给低于阈值的那些吗?任何形式的建议,不胜感激。

1 个答案:

答案 0 :(得分:1)

正如您明确暗示的那样,假设您处于二进制分类设置中,问题是您不应该使用XGBRegressor,该符号用于回归问题而不是分类问题;来自docs(添加了常识):

  

xgboost.XGBRegressor

     

针对XGBoost 回归

的scikit-learn API的实现

您应该改用XGBClassifier

有关更多详细信息,请参见Accuracy Score ValueError: Can't Handle mix of binary and continuous target中的答案(注意,因为那里几乎所有其他答案,包括公认的且被高度推崇的答案,基本上都是错误的); scikit-learn实际上是一个相同的问题,但同样的论点也适用于您的情况。