我是Python和机器学习的新手,我很难理解验证步骤,也想知道当我不想使用k-folds交叉验证时该怎么做,而只是使用验证集。我一直在阅读,似乎无法正确掌握 k 折交叉验证:
我是否将初始数据分成 k 个折叠,然后在 k-1 上进行训练并在左侧 1 上进行测试,继续向后旋转 - 所以每个折叠都用于测试等。
或者我是否将 INITIAL 数据拆分为 Train 和 TEST 数据 - 然后将 Train 数据拆分为 k 份并进行交叉验证,最后测试未见过的 TEST 数据的准确性?
在 k 次交叉验证过程中如何选择最佳参数? 返回分数列表后,cross_val_score 是否在验证步骤中应用最佳参数,其中准确性最佳? (代码如下)
model = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(model, X, y, cv=5)
或者这一步应该手动完成(由我)?通过使用 gridsearchcv 等?
- 就我而言,我有一个包含 400.000 个样本(可以说是行)和大约 70 个特征(列)的初始数据集,对我的数据集执行 k 折交叉验证需要很长时间(据我了解,这主要是用于较小的数据集),相反,我想要 3 组数据:训练 (90%) 验证 (5%) 和测试 (5%) - 对这 5% 进行验证并在该步骤中调整我的模型参数,然后最后检查测试集的准确性。如何去做呢?
最佳答案
如果您同时拥有训练(标记一个)和测试(未标记)数据,则交叉验证会使用此训练数据本身,在每次折叠时,您的数据都会分为不同的训练和测试数据,更像是您编写的第二点。
不会,交叉验证后超参数将不会被调整,您必须手动或使用网格或随机搜索来进行调整。
由于您提到交叉验证花费了太多时间并且您正在考虑使用验证数据集进行超参数调整,我建议您跳过这整个部分并将数据扔到梯度提升树,您的交叉验证部分将自动求解,然后调整参数并检查准确性。
更好的建议是将您的数据扔到 TPOT。它是一个 Python 自动化机器学习库,可使用遗传编程优化机器学习管道。在运行一定次数的迭代时,输出将是经过调整超参数的最佳优化代码,主要是一种集成方法,具有可以获得的最佳精度。它还提到了其他算法的表现。它可能需要很长时间才能完成,甚至比神经网络还要长,但有时是值得的。
关于machine-learning - 验证集上的验证程序 - 不是 k 折交叉验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56270679/