libsvm:C ++与MATLAB:不同的准确度有什么关系?

时间:2013-09-18 19:27:07

标签: c++ matlab machine-learning svm libsvm

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

我有libsvm的C ++包装器和libsvm的MATLAB函数。

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

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

有什么可以解释这些差异?我正在尝试的C / Gamma值与剩余的SVM参数(默认值)相同。

1 个答案:

答案 0 :(得分:4)

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

  • 代码中的实现错误,遗憾的是最可能的错误
  • 使用包装器有一些bug和/或使用其他版本的libsvm然后你的matlab代码(libsvm是用纯C编写的,附带python,matlab和java包装器,所以你的C ++包装器是“非官方的”)或你的包装器假设一些其他默认值,这些默认值在C / Matlab / Python / Java实现中不是默认值
  • 你以某种随机的形式进行交叉验证(改组数据然后折叠,这是完全正确和合理的,但会在两次不同的运行中导致不同的结果)
  • 在您的代码中的一个(或两个)中加载来自.csv的数据时会执行一些舍入/转换,这会导致不一致(实际上不太可能发生,但仍然可能)