在Matlab中解码Scikit-learn SVM和libsvm之间的差异

时间:2016-06-17 02:45:03

标签: python matlab svm libsvm

我正在将我的大部分神经影像编码从Matlab转移到Python,因此我正在使用Matlab中的libsvm转换为在Python中使用Scikit-learn SVM。为了确保我没有改变任何关于我的分析的实质性内容,我正在试验这两个实现,并试图看看我是否可以让它们产生相同的结果。

在Python中我正在使用:

clf = svm.SVC(kernel='linear',C=1,probability=True)

在Matlab(libsvm)我正在使用:

clf = libsvmtrain(svm_training_labels,svm_training_vectors,['-t 0 -b 1 -c 1'])

当我使用模拟数据使用这两种不同的方式运行SVM时,我得到了微妙的不同结果,即使我已经使用输入参数(线性分类器,C = 1,将SVM的所有参数固定为相同)使用概率估计),即使所有其他默认参数在这些函数中看起来都是相同的(公差= .001,默认情况下都使用缩小启发式)。有什么可能导致结果差异的想法吗?

编辑:

提及结果分歧的数量会很有帮助。

我运行的一个模拟设计非常困难 - 它为Matlab libsvm提供了40%的准确率,并且scikit-learn svm(二进制分类,机会= 50%)的准确率提高了44%。在这个模拟中,两个SVM在他们的预测中只同意了18%的时间(换句话说,他们不仅猜测低于机会,而且他们几乎总是相互猜测相比)。

其他模拟更容易,Matlab libsvm的准确率为68%,scikit-learn SVM的准确率为67%。在这个模拟中,两个SVM在97%的时间内在他们的预测中达成一致。因此即使他们经常弄错,他们也会做出同样错误的猜测。

0 个答案:

没有答案