【问题标题】:xgboost issue with multi:softprob -- label size predict size not matchmulti:softprob 的 xgboost 问题——标签大小预测大小不匹配
【发布时间】:2020-10-05 00:37:44
【问题描述】:

我正在尝试构建一个模型,响应变量有三个选项:[0,1,2] 这是代码:

def model_jobs(X_train, X_val, y_train, y_val):
    param = {'eta': 0.3,
         'n_estimators': 600,
         'gamma': 2.0,
         'max_depth': 3,
         'min_child_weight': 1.0,
         'subsample': 0.8,
         'max_delta_step': 0.0,
         'colsample_bytree': 1.0,
         'lambda': 1.0,
         'alpha': 1.0,
         'num_class': 3,
         'eval_metric': "aucpr",
         'objective': "multi:softprob",
         'num_boost_round': 20,
         'early_stopping_rounds': 50, }
    model_fitting(X_train = X_train, y_train = y_train, X_val = X_val, y_val = y_val, tag="first", param=param)

def model_fitting(X_train, X_val, y_train, y_val, tag, param):
    dtrain = xgb.DMatrix(X_train, label=y_train)
    dval = xgb.DMatrix(X_val, label=y_val)
    watchlist = [(dtrain, "train"), (dval, "eval")]
    bst = xgb.train(
        dtrain=dtrain,
        evals=watchlist,
        params=param
    )

并返回此错误:

Check failed: preds.Size() == info.labels_.Size() (11122134 vs. 3707378) : label size predict size not match

我检查了所有尺寸,它们完全没问题。表格的实际大小是 3707378,通过简单的数学运算,我们看到 11122134 == 3707378 * 3 令我困惑的是,如果我将参数中的 num_class 从 3 更改为 4,我会收到此错误:

Check failed: preds.Size() == info.labels_.Size() (14829512 vs. 3707378) : label size predict size not match

和 14829512 == 3707378 * 4 我究竟做错了什么? num_class 和这个错误有什么关系?我的 xgboost 版本是 1.1.1

【问题讨论】:

    标签: python machine-learning xgboost


    【解决方案1】:

    问题是eval_metric。显然multi:softprobaucpr 不满意,我们需要将其更改为mlogloss。我不确定为什么会这样。

    param = {'eta': 0.3,
         'n_estimators': 600,
         'gamma': 2.0,
         'max_depth': 3,
         'min_child_weight': 1.0,
         'subsample': 0.8,
         'max_delta_step': 0.0,
         'colsample_bytree': 1.0,
         'lambda': 1.0,
         'alpha': 1.0,
         'num_class': 3,
         'eval_metric': "mlogloss",
         'objective': "multi:softprob",
         'num_boost_round': 20,
         'early_stopping_rounds': 50, }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2021-04-30
      • 2020-03-21
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      相关资源
      最近更新 更多