0

我有两个带有 5 个标签的多类数据集,一个用于训练,另一个用于交叉验证。这些数据集存储为 .csv 文件,因此它们在本实验中充当对照。

我有一个用于 libsvm 的 C++ 包装器,以及用于 libsvm 的 MATLAB 函数。

对于 C++ 和 MATLAB:使用带有 RBF 内核的 C 类型 SVM,我迭代了 2 个 C 和 Gamma 值列表。对于每个参数组合,我在训练数据集上进行训练,然后预测交叉验证数据集。我将预测的准确性存储在与产生准确性的 C 和 Gamma 值相关的 2D 地图中。

我已经多次重新创建不同的训练和交叉验证数据集。每次,C++ 和 MATLAB 的精度都不一样;有时很多!大多数情况下,MATLAB 会产生更高的准确度,但有时 C++ 实现会更好。

什么可以解释这些差异?我正在尝试的 C/Gamma 值是相同的,其余的 SVM 参数(默认)也是如此。

4

1 回答 1

4

应该没有显着差异,因为 C 和 Matlab 代码都使用相同 svm.c的文件。那么可能是什么原因呢?

  • 您的代码中的实现错误,不幸的是,这是最可能的错误
  • 使用的包装器有一些错误和/或使用其他版本的 libsvm 然后你的 matlab 代码(libsvm 是用纯 C 编写的,带有 python、Matlab 和 java 包装器,所以你的 C++ 包装器是“非官方的”)或者你的包装器假设一些额外的默认值,在 C/Matlab/Python/Java 实现中不是默认值
  • 您以某种随机的形式执行交叉验证(打乱数据然后折叠,这是完全正确和合理的,但会在两次不同的运行中导致不同的结果)
  • 在您的一个(或两个)代码中从 .csv 加载数据期间执行了一些舍入/转换,这会导致不一致(实际上不太可能发生,但仍有可能)
于 2013-09-19T19:38:20.673 回答