2

我是图像分类的新手,目前正在研究通过multisvm函数对四组图像进行分类的SVM(支持向量机)方法,我的算法每次训练和测试数据都是随机选择的,每次性能都不同。有人建议进行交叉验证,我不明白为什么我们需要交叉验证,这样做的主要目的是什么?. 我的实际数据集包括训练矩阵大小28×40000和测试矩阵大小17×40000。如何通过此数据集进行交叉验证对我有帮助。提前致谢 。

4

3 回答 3

2

交叉验证用于选择您的模型。可以根据您的验证错误估计样本外错误。因此,您希望选择验证错误最少的模型。在这里,模型指的是您想要使用的功能,更重要的是,您的 SVM 中的gamma和。C交叉验证后,您将使用选定的gammaC平均验证误差最小的来训练整个训练数据。

您可能还需要估计特征和参数的性能,以避免高偏差和高方差。可以从样本内错误和验证错误中观察您的模型是否存在欠拟合或过拟合。

理想情况下,10-fold通常用于交叉验证。

于 2013-12-12T22:41:17.010 回答
1

我对 multiSVM 不熟悉,但您可能想查看 libSVM,它是一个流行的免费 SVM 库,支持多种不同的编程语言。

在这里,他们简要描述了交叉验证。这是一种通过将训练数据分解为子组来避免过度拟合模型的方法。通过这种方式,您可以找到最适合两个子组的模型(由一组参数定义)。

例如,在下图中,他们绘制了用于定义模型的参数化 gamma 和 C 值的验证准确度等值线。从这个等高线图中,您可以看出启发式最优值(来自测试的值)是那些给出更接近 84 而不是 81 的准确度的值。

有关交叉验证的更多详细信息, 请参阅此链接。在此处输入图像描述

于 2013-12-12T22:03:37.060 回答
1

您总是需要交叉验证您的实验,以确保采用正确的科学方法。例如,如果您不进行交叉验证,那么您读取的结果(例如准确性)可能会因您的测试集而存在很大偏差。在极端情况下,您的训练步骤可能非常弱(就拟合数据而言),而您的测试步骤可能非常好。这适用于所有机器学习和优化实验,而不仅仅是 SVM。为了避免此类问题,只需将您的初始数据集分成两部分(例如),然后在第一组中训练并在第二组中进行测试,然后反向重复该过程,在第二组中进行训练并在第一组中进行测试。这将保证您可以看到对数据的任何偏差。正如有人建议的那样,您可以通过更进一步的划分来执行此操作:10 倍交叉验证,

于 2013-12-14T17:26:27.333 回答