【问题标题】:Sklearn SVM vs Matlab SVMSklearn SVM 与 Matlab SVM
【发布时间】:2017-04-21 00:32:11
【问题描述】:

问题:我需要训练一个分类器(在 matlab 中)来分类多个级别的信号噪声。

于是我用fitcecoc在matlab中训练了一个多类SVM,得到了92%的准确率。

然后我在 python 中使用 sklearn.svm.svc 训练了一个多类 SVM,但似乎无论我摆弄参数,我都无法达到超过 69% 的准确率。

30% 的数据被保留并用于验证训练。混淆矩阵如下所示。

Matlab confusion matrix

Python confusion matrix

因此,如果有人对 svm.svc 多类培训有一些经验或建议,并且可以在我的代码中看到问题,或者有任何建议,我们将不胜感激。

Python 代码:

import numpy as np
from sklearn import svm
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
#from sklearn import preprocessing

#### SET fitting parameters here
C = 100
gamma = 1e-8

#### SET WEIGHTS HERE
C0_Weight = 1*C
C1_weight = 1*C
C2_weight = 1*C
C3_weight = 1*C
C4_weight = 1*C
#####


X = np.genfromtxt('data/features.csv', delimiter=',')
Y = np.genfromtxt('data/targets.csv', delimiter=',')

print 'feature data is of size: ' + str(X.shape)
print 'target data is of size: ' + str(Y.shape)

# SPLIT X AND Y INTO TRAINING AND TEST SET
test_size = 0.3
X_train, x_test, Y_train, y_test = train_test_split(X, Y,         
... test_size=test_size, random_state=0)

svc = svm.SVC(C=C,kernel='rbf', gamma=gamma, class_weight = {0:C0_Weight, 
... 1:C1_weight, 2:C2_weight, 3:C3_weight, 4:C4_weight},cache_size = 1000)

svc.fit(X_train, Y_train)
scores = cross_val_score(svc, X_train, Y_train, cv=10)
print scores
print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))

Out = svc.predict(x_test)

np.savetxt("data/testPredictions.csv", Out, delimiter=",")
np.savetxt("data/testTargets.csv", y_test, delimiter=",")

# calculate accuracy in test data
Hits = 0
HitsOverlap = 0
for idx, val in enumerate(Out):
    Hits += int(y_test[idx]==Out[idx])
    HitsOverlap += int(y_test[idx]==Out[idx]) + int(y_test[idx]==
    ... (Out[idx]-1)) + int(y_test[idx]==(Out[idx]+1))

print "Accuracy in testset: ", Hits*100/(11595*test_size)
print "Accuracy in testset w. overlap: ", HitsOverlap*100/(11595*test_size)

对于那些好奇我是如何获得参数的,他们是用 GridSearchCV 找到的(并将准确度从 40% 提高到 69)

非常感谢任何帮助或建议。

【问题讨论】:

    标签: python matlab scikit-learn svm


    【解决方案1】:

    在拉了我很多头发之后,在这里找到了答案:http://neerajkumar.org/writings/svm/

    当使用 StandardScaler() 缩放输入时,svm.svc 现在产生优于 matlab 的结果!!

    【讨论】:

      猜你喜欢
      • 2018-08-11
      • 2020-05-14
      • 2015-04-25
      • 2016-08-07
      • 2021-03-17
      • 2016-05-11
      • 2016-09-03
      • 2018-09-25
      • 2015-07-04
      相关资源
      最近更新 更多