【问题标题】:Kfold, cross_val_score: on the basis of what data the output is shown (sklearn wrapper)?Kfold,cross_val_score:根据什么数据显示输出(sklearn wrapper)?
【发布时间】:2019-09-25 14:18:34
【问题描述】:

我看不懂

的输出
kfold_results = cross_val_score(xg_cl, X_train, y_train, cv=kfold, scoring='roc_auc')

xgb.cv 的输出很清楚——有训练和测试分数:

[0] train-auc:0.927637+0.00405497   test-auc:0.788526+0.0152854
[1] train-auc:0.978419+0.0018253    test-auc:0.851634+0.0201297
[2] train-auc:0.985103+0.00191355   test-auc:0.86195+0.0164157
[3] train-auc:0.988391+0.000999448  test-auc:0.870363+0.0161025
[4] train-auc:0.991542+0.000756701  test-auc:0.881663+0.013579

但是 Sk-learn 包装器中的 cross_val_score 的结果是模棱两可的:它是每次折叠后的分数列表,但是: - test_data 还是 train_data 的结果?

【问题讨论】:

    标签: python cross-validation xgboost k-fold


    【解决方案1】:

    Kfold 将被传递的foldsChanged in version 0.20: cv default value if None will change from 3-fold to 5-fold in v0.22.sklearn 中的数据拆分。所以它所做的是将数据集分成 5 个子集(版本 0.22 的默认值),使用 4 作为训练,使用 1 作为验证。因此输出是一个包含 5 个项目的数组,每次迭代 1 个。这就是它的样子:

    【讨论】:

    • Celius Stingher,非常感谢您的回答和图片。不过,请您具体说明,它是否在所有 5 种情况下输出测试数据、训练数据或测试+训练数据的预测准确性?
    • 如果答案是有帮助的,请务必投票并接受它,以便让面临同样问题的其他人更清楚地看到它!
    • 我想,每一折都会将数据分成训练集和测试集……我理解你的意思吗,1-4 折只计算训练测试的准确性?第 5 次 - 在测试集上?
    • 它在测试集上进行验证(这将是第一次迭代中的第 5 个)。
    • 据我了解,如果我们将数据拆分 3 次,每个 kfold:1/3 - 测试集,2/3 - 训练集。它在训练集上训练模型并在测试集上进行验证。它重复n倍次。因此,对于 3 折中的每一折,我们在测试集上有 3 个输出 - 1 个验证结果。请您告诉我,交叉验证的 xgboost 包装器的日志输出是什么意思?例如:[0] train-auc:0.927637+0.00405497 test-auc:0.788526+0.0152854(可以是数百次迭代)。我知道它显示了每一轮提升。但是这个输出与多少倍有关?谢谢。
    猜你喜欢
    • 2019-10-11
    • 2020-08-27
    • 2021-10-21
    • 2017-12-20
    • 2017-11-10
    • 2020-09-08
    • 2018-03-06
    • 1970-01-01
    相关资源
    最近更新 更多