5

同じデータセットとパラメーターに対して、内部でもを使用しLibSVMているにもかかわらず、とscikit-learnのSVM実装の精度が異なります。scikit-learnLibSVM

私は何を見落としましたか?

LibSVMコマンドラインバージョン:

me@my-compyter:~/Libraries/libsvm-3.16$ ./svm-train -c 1 -g 0.07 heart_scale heart_scale.model
optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
me@my-compyter:~/Libraries/libsvm-3.16$ ./svm-predict heart_scale heart_scale.model heart_scale.result
Accuracy = 86.6667% (234/270) (classification)

Scikit-NuSVCバージョンを学ぶ:

In [1]: from sklearn.datasets import load_svmlight_file    
In [2]: X_train, y_train = load_svmlight_file('heart_scale')    
In [3]: from sklearn import svm    
In [4]: clf = svm.NuSVC(gamma=0.07,verbose=True)   
In [5]: clf.fit(X_train,y_train)
        [LibSVM]*
        optimization finished, #iter = 118
        C = 0.479830
        obj = 9.722436, rho = -0.224096
        nSV = 145, nBSV = 125
        Total nSV = 145
Out[5]: NuSVC(cache_size=200, coef0=0.0, degree=3, gamma=0.07, kernel='rbf',
        max_iter=-1, nu=0.5, probability=False, shrinking=True, tol=0.001,
        verbose=True)
In [6]: pred = clf.predict(X_train)    
In [7]: from sklearn.metrics import accuracy_score    
In [8]: accuracy_score(y_train, pred)
Out[8]: 0.8481481481481481

Scikit-SVCバージョンを学ぶ:

In [1]: from sklearn.datasets import load_svmlight_file    
In [2]: X_train, y_train = load_svmlight_file('heart_scale')    
In [3]: from sklearn import svm    
In [4]: clf = svm.SVC(gamma=0.07,C=1, verbose=True)   
In [5]: clf.fit(X_train,y_train)
        [LibSVM]*
        optimization finished, #iter = 153
        obj = -101.855059, rho = -0.426465
        nSV = 130, nBSV = 107
        Total nSV = 130
Out[5]: SVC(C=1, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.07,
        kernel='rbf', max_iter=-1, probability=False, shrinking=True, tol=0.001,
        verbose=True)
In [6]: pred = clf.predict(X_train)    
In [7]: from sklearn.metrics import accuracy_score    
In [8]: accuracy_score(y_train, pred)
Out[8]: 0.8666666666666667

更新

Update1: ​​scikit-learnの例をSVRからNuSVCに更新しました。ogriselの回答を参照してください。

Update2:の出力を追加verbose=True

Update3: scikit-learnSVCバージョンを追加しました

だから私の問題は解決したようです。NuSVCではなくSVCを使用するC=1と、libsvmと同じ結果が得られますが、NuSVCとSVC(C = 1)が同じ結果をもたらす理由を誰かが説明できますか(ogriselの回答を参照)。

4

1 に答える 1

5

SVRは回帰モデルであり、分類モデルではありません。クラスsvm-train -c 1として利用可能なNu-SVCモデルです。sklearn.svm.NuSVC

于 2013-03-06T18:11:40.103 に答える