【问题标题】:Is it required to shuffle the training data for SVM multi-classification? [closed]是否需要对 SVM 多分类的训练数据进行混洗? [关闭]
【发布时间】:2014-01-10 22:39:59
【问题描述】:
实际上我正在使用 OpenCV 的 svm python 接口,我正在尝试将数据分为 4 类。当标签和训练数据有序时,我的意思是,例如数据分为 4 组,依次为标签 1、标签 2、标签 3 和标签 4,正确率很低,大约只有 50% 正确。但是当我对训练数据进行洗牌时,结果是合理的,大约 90% 正确。所以我的问题是:训练数据的顺序会影响最终的结果,还是需要在训练前打乱数据?
【问题讨论】:
标签:
machine-learning
svm
libsvm
【解决方案1】:
不,它不会改变 SVM 训练,尽管您的代码中使用的一些参数调整方法可能取决于顺序。例如 - 如果您使用没有随机化的交叉验证,那么有序集合要困难得多(每个连续折叠甚至可以有某些类的 0 个样本!)。
简而言之:
- SVM 训练不依赖于数据排序
- 一些用作“附加方法”的基于库的工具可以依赖它
【解决方案2】:
我的答案是否定的。基于this page:
与人工神经网络的反向传播学习算法不同,给定的 SVM 将始终确定性地收敛到给定数据集的相同解,而不管初始条件如何。对于包含少于大约 5000 个点的训练集,梯度下降为这个优化问题提供了一个有效的解决方案 [Campbell and Cristianini, 1999]。
首先,确保特征向量在洗牌后与其正确的标签相对应。还要确保在这两种情况下每个标签都有足够的特征向量。
其次,您可以尝试反复运行您的训练,以观察 SVM 是否发生变化。使用完全相同的数据集,具有相同的顺序并且没有改组。理论上它不会改变,因为凸优化问题应该具有唯一的最大值。
第三,如果您的训练收敛非常非常缓慢,您可能已经达到最大迭代次数。那么提前终止可能会导致结果出现一些明显的随机性。
最后但同样重要的是,虽然在数学上原始解在 SVM 中是唯一的,但对偶解可能不是唯一的。这主要取决于绑定变量C的选择。This article分析了原始解和对偶解之间可能存在的唯一性。