Unter welchen Parametern sind SVC und LinearSVC in scikit-learn äquivalent?

8

Ich lese diesen Thread über den Unterschied zwischen SVC() und LinearSVC() in scikit-learn.

Jetzt habe ich einen Datensatz mit einem binären Klassifikationsproblem (für solch ein Problem könnte der Eins-zu-Eins / Eins-zu-Rest-Strategieunterschied zwischen beiden Funktionen ignoriert werden.)

Ich möchte versuchen, unter welchen Parametern würden diese 2 Funktionen mir das gleiche Ergebnis geben. Zuallererst sollten wir natürlich kernel='linear' für SVC() setzen Ich konnte jedoch nicht das gleiche Ergebnis von beiden Funktionen erhalten. Ich konnte die Antwort aus den Dokumenten nicht finden, kann mir jemand helfen, den entsprechenden Parametersatz zu finden, nach dem ich suche?

Aktualisiert: Ich habe den folgenden Code von einem Beispiel der scikit-learn-Website geändert und anscheinend sind sie nicht identisch:

%Vor%

Ergebnis: Ausgabe Abbildung aus dem vorherigen Code

    
Sidney 21.11.2015, 13:36
quelle

1 Antwort

14

Im mathematischen Sinne müssen Sie folgendes einstellen:

%Vor%

und

%Vor%

Ein weiteres Element, das nicht einfach repariert werden kann, ist die Erhöhung von intercept_scaling in LinearSVC , da in dieser Implementierung der Bias regularisiert wird (was in SVC nicht zutrifft und in SVM nicht der Fall sein sollte - also nicht SVM) ) - folglich werden sie niemals genau gleich sein (es sei denn, Bias = 0 für Ihr Problem), da sie zwei verschiedene Modelle annehmen

  • SVC: 1/2||w||^2 + C SUM xi_i
  • LinearSVC: 1/2||[w b]||^2 + C SUM xi_i

Persönlich halte ich LinearSVC für einen der Fehler von sklearn developersr - diese Klasse ist einfach keine lineare SVM .

Nach Erhöhung der Intercept-Skalierung (in 10.0 )

Wenn Sie es jedoch zu hoch skalieren, wird es auch fehlschlagen, da jetzt Toleranz und Anzahl der Iterationen entscheidend sind.

Zusammenfassend: LinearSVC ist keine lineare SVM, verwenden Sie sie nicht, wenn nicht.

    
lejlot 21.11.2015, 13:49
quelle