3

在使用 SVM 时,我发现在原始数据集上执行三向拆分是一种很好的做法,例如 70/15/15 拆分。

此拆分对应于训练的 %70、测试的 %15 和所谓的“验证”的 %15。

我很清楚为什么这是一个好的做法,但我不确定实际执行此操作所需的具体细节。许多在线资源讨论了重要性,但我似乎无法找到该过程的明确(或至少是算法)描述。例如,sklearn 在这里讨论它,但在给出任何可靠的工具之前就停止了。

这是我的想法:

  • 使用训练集训练算法
  • 使用测试集查找错误率
  • ?? 调整参数
  • 使用验证集再次获取错误率

如果有人能指出一个好的资源的方向,我将不胜感激。

4

1 回答 1

3

验证集在所有监督学习算法中的作用是找到算法参数的最优值(如果有的话)。

将数据拆分为训练/验证/测试数据后,训练算法的最佳实践如下:

  1. 选择初始学习参数
  2. 使用训练集和参数训练算法
  3. 使用验证集(交叉验证测试)获得(验证)准确性
  4. 更改参数并继续 2 直到找到导致最佳验证准确性的参数
  5. 使用测试集获得(测试)准确性,该测试集代表您的训练算法对新的未见数据的实际预期准确性。

有一些执行交叉验证测试的高级方法。像 libsvm 这样的一些库包含它们:k-fold cross validation

在 k 折交叉验证中,您将训练数据随机分成 k 个相同大小的部分。您使用 k-1 部分进行训练并与剩余部分进行交叉验证。您使用不同的子集执行此 k 次,最后使用平均值。

维基百科是一个很好的来源:

于 2014-01-26T09:37:13.870 回答