【问题标题】:Validation procedure on validation set - NOT k-fold cross validation验证集上的验证过程 - 不是 k 折交叉验证
【发布时间】:2019-10-09 18:14:31
【问题描述】:

我是 python 和机器学习的新手,我很难理解验证步骤,我也想就当我不想使用 k-folds 交叉验证时该怎么做提出建议,而只是使用验证集。我一直在阅读,似乎无法正确掌握 k 折交叉验证:

  1. 我是否将 INITIAL 数据拆分为 k 个折叠,然后在 k-1 上训练并在左侧 1 处进行测试,继续向后旋转 - 所以每个折叠都用于测试等。

  2. 或者我是否将 INITIAL 数据拆分为 Train 和 TEST 数据 - 然后将 Train 数据拆分为 k 折并进行交叉验证,最后在未见过的 TEST 数据上测试准确性?

  3. 在 k 折交叉验证期间如何选择最佳参数? 返回分数列表后的 cross_val_score 是否在准确性最佳的验证步骤中应用最佳参数? (代码如下)

model = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(model, X, y, cv=5)

或者这一步应该手动完成(由我)?通过使用gridsearchcv等?

  1. 在我的情况下,我有一个包含 400.000 个样本(可以说是行)和大约 70 个特征(列)的初始数据集 在我的数据集上执行 k 折交叉验证需要很长时间(据我了解,这主要是用于较小的数据集),相反,我希望有 3 组数据:训练(90%)验证(5%)和测试(5%)——在这 5% 上进行验证并在该步骤中调整我的模型参数,然后最后检查测试集的准确性。怎么做?

【问题讨论】:

    标签: machine-learning scikit-learn data-science cross-validation supervised-learning


    【解决方案1】:

    如果您同时拥有训练(已标记)和测试(未标记)数据,则交叉验证会使用此训练数据本身,在每一次折叠中,您的数据都会被拆分为不同的训练和测试数据,更像是您编写的第二点。

    不,交叉验证后超参数不会被调整,您必须手动或使用网格或随机搜索来调整。

    由于您提到交叉验证花费了太多时间并且您正在考虑使用验证数据集进行超参数调整,我建议您跳过这整个部分并将您的数据扔到梯度提升树,您的交叉验证部分将自动求解,然后调整参数并检查准确性。

    更好的建议是将您的数据发送到 TPOT。它是一个 Python 自动化机器学习库,可使用基因编程优化机器学习管道。在运行一定数量的迭代时,输出将是经过调整的超参数的最佳优化代码,主要是一种集成方法,具有您可以获得的最佳精度。它还提到了其他算法的表现。完成比神经网络更长的时间可能需要很长时间,但有时值得。

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 2020-08-29
      • 1970-01-01
      • 2018-08-29
      • 2017-06-09
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      相关资源
      最近更新 更多