python中列车和测试集的SVM精度低

时间:2016-07-26 21:35:56

标签: python matlab machine-learning scikit-learn octave

我正在为支持向量机(SVM)移植一些matlab / octave脚本到python,但是我使用sklearn方法在两个脚本之一中的准确性很差。

ex6_spam.py加载了一些数据训练垃圾邮件检测模型。

在matlab中,SVM code provided, svmTrain.m,(参见下面的代码片段)在训练和测试集中提供了约99%的准确率。

在python中,如果我只使用线性内核,sklearn.svm.SVM().fit()给我约56%,如果我预先计算线性内核的Gram矩阵,则约为44%。 (数据和代码 - ex6_spam.py - are here。)

奇怪的是,ex6.py中使用的完全相同的piece of code给了我正确的2D数据点分类。它的行为几乎与matlab / octave脚本相同。

我在ex6_spam.py做的不多 - 我加载了训练集:

mat = scipy.io.loadmat('spamTrain.mat')
X = mat["X"]
y = mat["y"]

我将其提供给sklearn.svm.SVM().fit()

C = 0.1
model = svmt.svmTrain(X, y, C, "linear") 
# this results in
#        clf = svm.SVC(C = C, kernel=kernelFunction, tol=tol, max_iter=max_passes, verbose=2)
#        return clf.fit(X, y)

我做了一个预测:

p = model.predict(X)

matlab / octave等价物是

load('spamTrain.mat');

C = 0.1;
model = svmTrain(X, y, C, @linearKernel); # see the link to svmTrain.m above

p = svmPredict(model, X);

然而,结果却截然不同。有什么想法吗?我没有机会在另一台计算机上运行它,但也许that's a possible reason

0 个答案:

没有答案