XGBoost 产生非二进制预测

Posted

技术标签:

【中文标题】XGBoost 产生非二进制预测【英文标题】:XGBoost produces non-binary predictions 【发布时间】:2019-07-21 05:04:47 【问题描述】:

在使用 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 分配给低于阈值的那些?任何形式的建议表示赞赏。

【问题讨论】:

回答没有帮助? @desertnaut,是的,很有帮助!我应该用分类器替换回归模型 【参考方案1】:

假设您处于二进制分类设置中,正如您明确暗示的那样,问题是您应该使用XGBRegressor,这是针对回归问题和不适用于分类;来自docs(添加了重点):

班级xgboost.XGBRegressor

为 XGBoost regression

实现 scikit-learn API

您应该改用XGBClassifier

有关更多详细信息,请参阅Accuracy Score ValueError: Can't Handle mix of binary and continuous target 中的自己的答案(注意,因为实际上所有其他答案,包括接受和高度赞成的答案,基本上都是错误的);这与 scikit-learn 几乎相同的问题,但同样的论点也适用于您的案例。

【讨论】:

以上是关于XGBoost 产生非二进制预测的主要内容,如果未能解决你的问题,请参考以下文章

Xgboost 处理不平衡的分类数据

XGBoost 用于多标签分类?

libsvm / e1071:获取二进制类的非二进制预测值?

XGBoost vs Deep Learning

XGBoost:softprob 和 softmax 产生不一致的结果

使用 LSTM 进行多元二进制序列预测