验证集上的验证过程-非k倍交叉验证

时间:2019-05-23 08:05:09

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

我是python和机器学习的新手,我在理解验证步骤时遇到困难,也想对我不想使用k折交叉验证的方法提出建议,而只是使用验证集。我一直在阅读,似乎无法正确掌握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%上进行验证并在该步骤中调整模型参数,最后检查测试集的准确性。怎么办呢?

1 个答案:

答案 0 :(得分:1)

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

否,在交叉验证超参数不会被调整之后,您将必须手动执行此操作,或者使用网格或随机搜索进行操作。

由于您提到交叉验证会花费太多时间,并且您正在考虑使用验证数据集进行超参数调整,因此我建议您跳过这整个部分,并将数据投入到交叉验证部分Gradient Boosted Trees将自动解决,然后稍后调整参数并检查准确性。

更好的建议是将您的数据发送到TPOT。这是一个Python自动化机器学习库,可使用遗传编程优化机器学习管道。在运行大量迭代时,输出将是经过优化的超参数的最佳优化代码,大多数情况下是合奏方法,并且可以获得最佳精度。它还提到了其他算法的表现。比神经网络可能需要更长的时间才能完成,但有时值得。