为啥我们需要在 multiSVM 方法中进行交叉验证来进行图像分类?

Posted

技术标签:

【中文标题】为啥我们需要在 multiSVM 方法中进行交叉验证来进行图像分类?【英文标题】:why we need cross validation in multiSVM method for image classification?为什么我们需要在 multiSVM 方法中进行交叉验证来进行图像分类? 【发布时间】:2013-12-31 12:47:26 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

有关交叉验证的更多详细信息,请参阅this link。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

将 SVM 称为“相对免疫”过拟合似乎具有误导性。根据数据和训练方法,您当然可以过拟合。线性 SVM 比非线性 SVM 更不容易过拟合,但在任何一种情况下都有风险。【参考方案3】:

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

【讨论】:

以上是关于为啥我们需要在 multiSVM 方法中进行交叉验证来进行图像分类?的主要内容,如果未能解决你的问题,请参考以下文章

为啥标准化朴素贝叶斯后验概率

为啥.out文件要转化成.bin文件

使用sklearn进行交叉验证

为啥交叉构建约定将 scala 版本附加到 artifactId?

为啥这个交叉连接在 Linq 中这么慢?

机器学习中的贝叶斯方法---先验概率似然函数后验概率的理解及如何使用贝叶斯进行模型预测