首页 > 解决方案 > 验证集上的验证过程 - 不是 k 折交叉验证

问题描述

我是 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-learningscikit-learndata-sciencecross-validationsupervised-learning

解决方案


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

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

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

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


推荐阅读