【问题标题】:libsvm : C++ vs. MATLAB : What's With The Different Accuracies?libsvm:C++ 与 MATLAB:不同的精度有何不同?
【发布时间】:2013-09-23 17:02:13
【问题描述】:

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

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

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

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

造成这些差异的原因是什么?我尝试的 C/Gamma 值相同,其余 SVM 参数也相同(默认)。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 2017-11-22
      • 2019-09-13
      • 2015-08-14
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      相关资源
      最近更新 更多