我正在写一个使用SVM做分类上的一些图像(特别是应用这些 )。 我的matlab实现的作品真的很好。 使用SIFT袋的词的做法,我能够得到接近100%的准确度与线性内核。
我需要实现这个在C ++的速度/便携性的原因,所以我同时使用尝试LIBSVM和DLIB 。 我尝试过多种类型的SVM(c_svm,nu_svm,one_class)和多个内核(线性,多项式,RBF)。 我已经能够达到的最好的是50%左右的精度 - 甚至对我训练在同一个样本。 我已经证实了我的特点发电机工作,因为当我出口我的C ++ - 生成的功能,Matlab和火车上的那些,我能够再得到近乎完美的效果。
有什么神奇的Matlab的SVM实现? 是否有任何常见的陷阱,或者说,我可能会考虑这可以解释我看到的行为领域? 我知道这是一个有点模糊,但部分问题是,我不知道哪里去了。 请让我在评论中知道是否有其他的信息,我可以提供将是有益的。
没有什么神奇的Matlab的版本库,其他的,它在Matlab中运行,这使得它更难于搬起石头砸自己的脚。
检查表:
- 你正常化您的数据,使所有值处于0和1(或-1之间和1)之间,线性或使用平均值和标准偏差?
- 你的参数搜索的C(或C在RBF内核的情况下,和γ)一个很好的价值? 这样做交叉验证或在抱出一套?
- 你肯定your're处理NaN,并且将所有其他浮点乱七八糟吗? Matlab是在你隐藏了这个非常好,C ++没有这么多。
- 难道说你没有正确地加载数据,阅读“%S”变成了双重或东西是将噪声添加到输入数据?
- 难道说LIBSVM / DLIB预计以行优先顺序和your're数据列的主要(或周围的其他方式)发送它? 同样Matlab的使这几乎是不可能的,C ++没有这么多。
- 32-64位污秽库的一个版本,可执行文件与其他编译?
其他一些事情:
- 难道说在Matlab你不知何故泄漏类(Y)到预处理? 没有一个做到这一点的目的,但我已经看到了这一点。 如果你把几乎所有的F(Y)的一个功能,您每次得到几乎100%。
- 有时,它帮助确认一切是印刷用C训练都++和Matlab前提交数字是相同的。
我很高兴与使用RBF核LIBSVM。 carlosdc以正确的顺序指出,最常见的错误:-)。 对于LIBSVM - 你使用随libsvm的python的工具? 如果不是我建议这样做。 写你的特征向量到一个文件中(从MATLAB和/或C ++),并与easy.py. RBF核做metatraining 你得到的参数和生成的模型预测。 如果这个预测是确定继续与C ++。 从训练你也可以得到一个缩放功能,文件(最小/最大转化为-1.0 / 1.0的所有功能)。 比较这些到你的C ++实现,以及。
一些LIBSVM问题:一个坏习惯是重视缩放0(零)(如果我没记错的话)在缩放文件中省略。 在grid.py是参数“nr_local_worker”,这是限定线程的mumber。 你可能希望增加它。