XGBoost 产生非二进制预测
XGBoost produces non-binary predictions
用 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 分配给低于阈值的那些?任何形式的建议表示赞赏。
假设您处于二进制分类设置中,正如您明确暗示的那样,问题是您应该不使用XGBRegressor
,这是针对回归 问题而不是分类问题;来自 docs(添加了重点):
class xgboost.XGBRegressor
Implementation of the scikit-learn API for XGBoost regression
您应该改用 XGBClassifier
。
有关更多详细信息,请参阅 Accuracy Score ValueError: Can't Handle mix of binary and continuous target 中自己的答案(注意,因为实际上那里的所有其他答案,包括已接受和高度赞成的答案,基本上都是错误的);这是关于 scikit-learn 的一个几乎相同的问题,但同样的论点也适用于您的案例。
用 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 分配给低于阈值的那些?任何形式的建议表示赞赏。
假设您处于二进制分类设置中,正如您明确暗示的那样,问题是您应该不使用XGBRegressor
,这是针对回归 问题而不是分类问题;来自 docs(添加了重点):
class
xgboost.XGBRegressor
Implementation of the scikit-learn API for XGBoost regression
您应该改用 XGBClassifier
。
有关更多详细信息,请参阅 Accuracy Score ValueError: Can't Handle mix of binary and continuous target 中自己的答案(注意,因为实际上那里的所有其他答案,包括已接受和高度赞成的答案,基本上都是错误的);这是关于 scikit-learn 的一个几乎相同的问题,但同样的论点也适用于您的案例。