2015-01-12 26 views
16

documentation scikit-learn, bir veri kümesinde çok sınıflı sınıflandırma yapabilen sınıflar olan SVC, NuSVC ve LinearSVC uygular. Diğer yandan, aynı scikit öğrenmeyi de destek vektör makinesi algoritması için libsvm'i kullanır. Ben SVC ve libsvm sürümleri arasındaki farkın ne olduğu konusunda biraz kafam karıştı, şu anki fark şudur: SVC, multiclass problemine destek vektör makinesi algoritmasıdır ve libsvm ikili sınıf problemi içindir. Buradaki farkın anlaşılmasında bana yardımcı olan var mı?SVC ve SVM arasındaki scikit-learn arasındaki fark nedir?

+1

Ayrıca belgelere bakın: http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC SVC libsvm etrafında sadece ince bir sarıcı olduğunu. –

cevap

15

Sadece aynı algoritmanın farklı uygulamalarıdır. SVM modülü (SVC, NuSVC, vb), libsvm kitaplığının etrafında bir sarıcıdır ve farklı çekirdekleri destekler, LinearSVC ise liblinear'u temel alır ve yalnızca bir doğrusal çekirdeği destekler. Yani:

SVC(kernel = 'linear') 

teoride için "eşdeğer" dir: Eğer farklı sonuçlar elde edeceksiniz uygulamalar pratikte farklı olduğu için

LinearSVC() 

, en önemli olanları LinearSVC sadece doğrusal bir çekirdek desteklediğini olmak daha hızlıdır ve çok daha iyi ölçeklenebilir.

+6

Aslında, SVC bir tek-bir strateji kullanıyorken, LinearSVC çok-sınıf için bir tek-vs stratejisini kullanırken aslında eşdeğer değiller. Ayrıca LinearSVC, L2 kayıplı çarpı kare menteşe kaybıdır. –

+1

Andreas, onların aynı olmadıklarına işaret ediyor. "Eşdeğer" dediğimde, kötü İngilizce'm için üzgünüm, "benzer" veya "karşılık gelir". Farklı uygulamalar, farklı varsayılanlar ve diğer birçok ayrıntı anlamına gelir. – elyase

+0

Çok sınıflı sınıflandırma için sizden ne tavsiye ediyorsunuz (bire bir ya da bire karşı vs), bu soruna SVC ile güzelce saldırabilir miyim? – tumbleweed