Da documentation scikit-learn implementa SVC, NuSVC e LinearSVC, che sono classi in grado di eseguire la classificazione multi-classe su un set di dati. Dall'altra parte ho letto anche che scikit learn usa anche libsvm per supportare l'algoritmo di macchina vettoriale. Sono un po 'confuso su quale sia la differenza tra le versioni SVC e libsvm, ormai credo che la differenza sia che SVC è l'algoritmo della macchina vettoriale di supporto per il problema multiclasse e libsvm è per il problema della classe binaria. Qualcuno potrebbe aiutarmi a capire la differenza tra questo?Qual è la differenza tra SVC e SVM in scikit-learn?
risposta
Sono solo diverse implementazioni dello stesso algoritmo. Il modulo SVM (SVC, NuSVC, ecc.) È un wrapper attorno alla libreria libsvm e supporta diversi kernel mentre LinearSVC
si basa su liblinear e supporta solo un kernel lineare. Quindi:
SVC(kernel = 'linear')
è in teoria "equivalente" a:
LinearSVC()
Poiché le implementazioni sono diverse, in pratica, si ottengono risultati diversi, i più importanti è che LinearSVC supporta solo un kernel lineare, è più veloce e può scalare molto meglio.
In realtà non sono equivalenti in quanto SVC utilizza una strategia one-vs-one mentre LinearSVC utilizza una strategia one-vs-rest per multi-classe. Anche LinearSVC ha come valore predefinito la perdita di L2 nota come perdita di cerniera al quadrato. –
Andreas ha ragione sottolineando che non sono loro stessi. Quando ho detto "equivalente" intendevo "simile" o "corrisponde a", mi dispiace per il mio pessimo inglese. Diverse implementazioni significano diverse impostazioni predefinite e molti altri dettagli. – elyase
Per la classificazione multi-classe quale tipo di approccio mi raccomandi (uno contro uno o uno a riposo), pensi che io possa attaccare bene questo problema con SVC ?. – tumbleweed
Vedere anche la docstring: http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC SVC è solo un sottile involucro attorno a libsvm. –