2017-07-29 51 views
0

私はsklearn.svm.LinearSVCsklearn.svm.SVC(kernel='linear')を見つけました。彼らは私と非常によく似ていますが、私はロイターに対して非常に異なる結果を得ています。LinearSVCとSVC(kernel = "linear")の違いは何ですか?

sklearn.svm.LinearSVC: 81.05% in 28.87s train/ 9.71s test 
sklearn.svm.SVC  : 33.55% in 6536.53s train/2418.62s test 

どちらも線形カーネルです。両方の機能が、それ以外の場合は違う方法

LinearSVC(C=1.0, tol=0.0001, max_iter=1000, penalty='l2', loss='squared_hinge', dual=True, multi_class='ovr', fit_intercept=True, intercept_scaling=1) 
SVC  (C=1.0, tol=0.001, max_iter=-1, shrinking=True, probability=False, cache_size=200, decision_function_shape=None) 

:LinearSVCの許容範囲は、SVCの1よりも高いのですか?kernel='linearを設定しても、tol=0.0001,max_iter=1000 and decision_function_shape = 'ovr' the SVC takes much longer than LinearSVC`です。どうして?

私はsklearn 0.18を使用していますが、どちらもOneVsRestClassifierに記載されています。これが同じ場合は、multi_class='ovr'/decision_function_shape='ovr'とわかりません。

+0

0.18.2にアップグレードして、結果がまだ異なるかどうかを確認できますか? – sera

+0

私はバージョンがそうでないと信じています。 'sklearn'のドキュメントには、これらの分類子を適合させる例が含まれています。結果は、モデルが使用する手法によって異なります。 –

+0

既に議論があります。 https://stackoverflow.com/questions/33843981/under-what-parameters-are-svc-and-linearsvc-in-scikit-learn-equivalent および https://stackoverflow.com/questions/35076586/linearsvc-vs-svckernel-linear-conflicting-arguments – phev8

答えて

4

真に、LinearSVCおよびSVC(kernel='linear')は異なる結果をもたらす。 e。それらが異なるアプローチを使用するので、メトリクススコアと決定境界。下記のおもちゃの例では、それを証明している:

from sklearn.datasets import load_iris 
from sklearn.svm import LinearSVC, SVC 

X, y = load_iris(return_X_y=True) 

clf_1 = LinearSVC().fit(X, y) # possible to state loss='hinge' 
clf_2 = SVC(kernel='linear').fit(X, y) 

score_1 = clf_1.score(X, y) 
score_2 = clf_2.score(X, y) 

print('LinearSVC score %s' % score_1) 
print('SVC score %s' % score_2) 

-------------------------- 
>>> 0.96666666666666667 
>>> 0.98666666666666669 

その差の重要な原則は、以下の通りである:SVCは通常のヒンジの損失を最小限に抑えながら、デフォルトのスケーリング、LinearSVCことで

  • は二乗ヒンジ損失を最小化します。 LinearSVClossパラメータの「ヒンジ」文字列を手動で定義することは可能です。
  • LinearSVCは、としても知られているマルチクラス削減を使用しますが、SVCは、One-vs-Oneマルチクラス削減を使用します。また、hereと記載されています。また、マルチクラス分類問題の場合、SVCN * (N - 1)/2モデルに適合します。ここで、Nはクラスの量です。対照的に、LinearSVCは、Nモデルに簡単に適合します。分類問題がバイナリである場合、両方のシナリオで1つのモデルのみが適合する。 multi_classdecision_function_shapeのパラメータには何も共通点がありません。 2番目は、便利な形の決定関数の結果を(n_features, n_samples)に変換するアグリゲータです。 multi_classは、解決策を確立するためのアルゴリズム的アプローチです。
  • LinearSVCの基礎となる見積もりは、liblinearであり、実際には傍受をペナルティします。 SVCは、libsvm推定を使用していません。 liblinear推定子は線形(特殊)のケースに最適化されており、したがって、libsvmより大きいデータ量でより速く収束します。そのため、LinearSVCは問題を解決する時間が短くなります。

実際には、LinearSVCは、コメントセクションに記載されているように、インターセプトスケーリング後には実際に線形ではありません。

関連する問題