在 LibsSVM 中正确使用交叉验证

机器算法验证 机器学习 分类 交叉验证 Python libsvm
2022-03-31 12:08:21

我正在使用 对来自两个不同组的数据点进行分类LibSVM

我执行以下操作:

  1. LibSVM. 在输入文件中,我输入了我拥有的所有数据。
  2. 缩放它(使用svm-scale)。
  3. 用于选择grid.py参数libSVMgammac
  4. 用于svm-train训练。我使用整个数据集。我还使用-v 1010 倍交叉验证选项 ( svm-train flag)。

我的问题是

一个。交叉验证的-v 10选项可以代替测试步骤吗?

湾。上述步骤给出的结果非常高(96%),所以我想知道我是否做错了什么?

C。在训练 + 交叉验证之前使用grid.pyfor 参数选择会损坏结果(就像我在测试我已经训练过的数据一样)?

1个回答

好像你把几件事混在一起了。首先,当使用某些调整参数时,交叉验证用于准确了解泛化误差。

您可以使用该标志svm-train在 k 折交叉验证模式下使用。-v k在这种模式下,svm-train不输出模型——只是泛化性能的交叉验证估计。

grid.py基本上是svm-train交叉验证模式下的包装器。它允许您通过交叉验证轻松评估给定选项集中的最佳参数元组。它本质上是对执行交叉验证的指定参数元组的循环。

一个。交叉验证的 -v 10 选项可以代替测试步骤吗?

不是完全。交叉验证确实用于估计模型的泛化性能,但是在执行交叉验证时,从不使用整个训练集来构建单个模型。典型的步骤是 (i) 使用交叉验证找到最佳调整参数,(ii) 在完整训练集上使用这些最佳参数训练模型,以及 (iii) 在测试集上测试该模型。

湾。上述步骤给出的结果非常高(96%),所以我想知道我是否做错了什么?

别担心,开心就好。这种分类精度对于广泛的问题是非常可行的。

C。在训练 + 交叉验证之前使用 grid.py 进行参数选择会损坏结果(就好像我在测试我已经训练过的数据一样)?

grid.py为您进行交叉验证。运行后再次执行交叉验证是没有意义的grid.py