Zum Hauptinhalt springen

6.5 Soft Margin SVM

Die bisherige SVM hat eine harte Voraussetzung: Die Daten müssen linear trennbar sein. Echte Daten sind verrauscht, haben Ausreißer und überlappende Klassen. Die Soft Margin SVM lockert die Nebenbedingungen, indem sie Verletzungen erlaubt, aber bestraft.

Wiederholung: Ergebnis der Hard Margin SVM​

📄 09_svm_nicht_trennbar.pdf, Folie 4 📄 09_svm_nicht_trennbar.pdf, Folie 5

Zusammenfassung von 6.2 und 6.3:

  • Die SVM ist ein konvexes Optimierungsproblem, jedes lokale Minimum ist eine Lösung.
  • Falls das Problem linear trennbar ist, ist die Existenz einer Lösung garantiert.
  • Durch das Kriterium der maximalen Trennbreite ist die SVM auch auf hochdimensionale Probleme anwendbar.
  • Zur Lösung des quadratischen Programms gibt es leistungsfähige allgemeine Pakete (z.B. quadprog in Matlab). Meist ist es aber besser, spezialisierte SVM-Pakete zu verwenden (die Folie nennt „svmlib“, gemeint ist vermutlich libsvm).
  • Die Lage der Trennebene wird nur durch die Supportvektoren bestimmt, alle anderen Punkte spielen keine Rolle.

„Aber: wir sind noch nicht am Ziel…“

Nicht linear trennbare Daten​

📄 09_svm_nicht_trennbar.pdf, Folie 6

Problem 1: Der zulässige Bereich ist leer. Wendet man die Hard Margin SVM auf nicht linear trennbare Daten an, gibt es kein (w,b)(\mathbf w, b), das alle Nebenbedingungen yi(⟨w⋅xi⟩+b)≥1y_i(\langle\mathbf w\cdot\mathbf x_i\rangle + b)\ge 1 erfüllt. Der zulässige Bereich ist die leere Menge, es kann keine Lösung gefunden werden. Ein einziger falsch beschrifteter Punkt reicht dafür.

Problem 2: Auch bei trennbaren Daten kann Härte schaden. Selbst wenn die Daten trennbar sind, kann es besser sein, einige Ausnahmen zuzulassen. Die Abbildung auf der Folie zeigt zwei Wolken, bei denen ein einzelner Ausreißer (ein schwarzer Punkt mitten zwischen den roten) die trennende Gerade stark verkippt. Ohne diesen Punkt gäbe es eine viel breitere Lücke. Das ist dieselbe Überlegung wie auf 📄 08_svm.pdf, Folie 7: Ein Klassifikator, der jeden Trainingspunkt korrekt trennt, ist nicht unbedingt der beste.

Ansatz

Man erlaubt den Datenpunkten, zur Not auch innerhalb des Margins oder sogar auf der falschen Seite der Trennebene zu liegen, solange der Abstand zur Trennebene nicht zu groß ist.

Schlupfvariablen​

📄 09_svm_nicht_trennbar.pdf, Folie 7

Jede Nebenbedingung erhält eine Schlupfvariable (slack variable) ξi\xi_i, die angibt, wie stark die Nebenbedingung verletzt wird:

yi=+1:⟨w⋅xi⟩+b≥1−ξiyi=−1:⟨w⋅xi⟩+b≤−1+ξimit ξi≥0.\begin{aligned} y_i = +1:&\quad \langle\mathbf w\cdot\mathbf x_i\rangle + b \ge 1 - \xi_i\\ y_i = -1:&\quad \langle\mathbf w\cdot\mathbf x_i\rangle + b \le -1 + \xi_i \end{aligned} \qquad\text{mit } \xi_i \ge 0.

Kurz: yi(⟨w⋅xi⟩+b)≥1−ξiy_i(\langle\mathbf w\cdot\mathbf x_i\rangle + b) \ge 1 - \xi_i, ξi≥0\xi_i\ge 0.

Geometrische Bedeutung: ξi\xi_i misst die Verletzung in Einheiten von 1/∥w∥1/\lVert\mathbf w\rVert. Der tatsächliche Abstand, um den ein Punkt „zu weit drin“ liegt, ist ξi/∥w∥\xi_i/\lVert\mathbf w\rVert (in der Abbildung die grün gestrichelten Linien vom Punkt zum Rand seines Margins).

Ergänzung, nicht auf den Folien: Je nach Wert von ξi\xi_i unterscheidet man drei Fälle.

ξi\xi_iyif(xi)y_if(\mathbf x_i)Lage des Punkts
ξi=0\xi_i = 0≥1\ge 1korrekt, außerhalb oder auf dem Margin
0<ξi<10 \lt \xi_i \lt 1zwischen 0 und 1im Margin, aber noch auf der richtigen Seite
ξi=1\xi_i = 1=0= 0genau auf der Trennebene
ξi>1\xi_i \gt 1<0\lt 0auf der falschen Seite, fehlklassifiziert

Folgerung: Jeder fehlklassifizierte Trainingspunkt hat ξi>1\xi_i \gt 1. Daher ist ∑iξi\sum_i\xi_i eine obere Schranke für die Anzahl der Trainingsfehler.

📄 09_svm_nicht_trennbar.pdf, Folie 8

Tradeoff: Mit Schlupfvariablen kann man den Margin beliebig breit machen, man muss nur genügend Punkte „hineinlassen“. Die zweite Abbildung zeigt genau das: ein breiter Streifen mit vielen Verletzungen. Je größer die Trennbreite, desto mehr Fehler. Das erfordert einen sinnvollen Kompromiss.

Zielfunktion bei nicht linear trennbaren Daten​

📄 09_svm_nicht_trennbar.pdf, Folie 9

Die Gesamtgröße der Schlupfvariablen charakterisiert man, ähnlich wie beim Perzeptron, durch einfaches Aufaddieren:

∑i=1ℓξi.\sum_{i=1}^{\ell}\xi_i.

Da alle ξi≥0\xi_i\ge 0 sind, können sie sich nicht gegenseitig aufheben. (Ohne die Nebenbedingung ξi≥0\xi_i\ge 0 könnte man negative ξi\xi_i bei „sehr guten“ Punkten benutzen, um Verletzungen anderswo zu kompensieren.)

Ziel: ∑iξi\sum_i\xi_i möglichst klein und gleichzeitig die Trennbreite möglichst groß. Beides kombiniert man in einer Zielfunktion, die immer noch quadratisch und konvex ist:

f(w,ξ)=12⟨w⋅w⟩+C∑iξi.f(\mathbf w,\boldsymbol\xi) = \tfrac12\langle\mathbf w\cdot\mathbf w\rangle + C\sum_{i}\xi_i.
Regularisierungsparameter CC

Der Regularisierungsparameter (regularization parameter) C>0C \gt 0 kontrolliert den relativen Einfluss beider Größen:

  • Großes CC: Verletzungen sind teuer. Die SVM versucht, möglichst alle Punkte korrekt mit Margin zu trennen, nimmt dafür einen schmalen Margin in Kauf. Gefahr: Overfitting, starke Reaktion auf Ausreißer. Für C→∞C\to\infty erhält man die Hard Margin SVM.
  • Kleines CC: Verletzungen sind billig. Breiter Margin, viele Punkte im Margin, glattere Entscheidung. Gefahr: Underfitting.

Laut Folie ist bei stark verrauschten und schlecht trennbaren Klassifikationsproblemen ein kleineres CC tendenziell besser.

Warum ist das konvex? 12⟨w⋅w⟩\tfrac12\langle\mathbf w\cdot\mathbf w\rangle ist konvex, C∑iξiC\sum_i\xi_i ist linear in ξ\boldsymbol\xi (also konvex), Summe konvexer Funktionen ist konvex (6.3). Die Nebenbedingungen sind linear in (w,b,ξ)(\mathbf w, b, \boldsymbol\xi).

Ergänzung: Der Name „Regularisierungsparameter“ passt eigentlich besser zu 1/C1/C: Der Term 12∥w∥2\tfrac12\lVert\mathbf w\rVert^2 ist ein Regularisierer wie bei der Ridge-Regression, und CC gewichtet den Datenterm dagegen. Großes CC heißt also wenig Regularisierung. In der Praxis wählt man CC per Kreuzvalidierung (Kapitel 5), typischerweise auf einem logarithmischen Gitter wie 10−3,…,10310^{-3},\dots,10^{3}.

Die Soft Margin SVM​

📄 09_svm_nicht_trennbar.pdf, Folie 10
SVM-Optimierung (1-Norm Soft Margin)
  • minimiere
f(w,ξ)=12⟨w⋅w⟩+C∑i=1ℓξi,w∈Rd, ξ∈Rℓf(\mathbf w,\boldsymbol\xi) = \tfrac12\langle\mathbf w\cdot\mathbf w\rangle + C\sum_{i=1}^{\ell}\xi_i,\qquad \mathbf w\in\mathbb R^d,\ \boldsymbol\xi\in\mathbb R^\ell
  • unter den 2ℓ2\ell Nebenbedingungen, i=1,…,ℓi = 1,\dots,\ell:
yi(⟨w⋅xi⟩+b)≥1−ξi,ξi≥0.y_i(\langle\mathbf w\cdot\mathbf x_i\rangle + b) \ge 1 - \xi_i, \qquad \xi_i \ge 0.

Bemerkungen:

  • „1-Norm“, weil die Schlupfvariablen linear, also über ihre 1-Norm ∑i∣ξi∣=∑iξi\sum_i\lvert\xi_i\rvert = \sum_i\xi_i, eingehen. Ergänzung: Es gibt auch die 2-Norm-Variante mit C∑iξi2C\sum_i\xi_i^2.
  • Es gibt jetzt d+1+ℓd + 1 + \ell Optimierungsvariablen (w\mathbf w, bb, ξ\boldsymbol\xi) und 2ℓ2\ell Nebenbedingungen.
  • Der zulässige Bereich ist nie leer: Für jedes (w,b)(\mathbf w, b) kann man ξi\xi_i einfach groß genug wählen. Damit ist das Problem für beliebige Daten lösbar.

Zahlenbeispiel​

Ergänzung, nicht auf den Folien.

Wir nehmen die Trennebene aus 6.2, Beispiel 1: w=(12,12)\mathbf w = (\tfrac12,\tfrac12), b=−1b = -1, also f(x)=12(x1+x2)−1f(\mathbf x) = \tfrac12(x_1 + x_2) - 1. Für eine feste Ebene ist die kleinste zulässige Schlupfvariable ξi=max⁡(0,1−yif(xi))\xi_i = \max(0, 1 - y_if(\mathbf x_i)) (warum, siehe 6.6).

Punktyiy_if(xi)f(\mathbf x_i)yif(xi)y_if(\mathbf x_i)ξi\xi_iLage
(0,0)(0,0)−1-1−1-11100auf dem Margin (Supportvektor)
(4,4)(4,4)+1+1333300weit außerhalb
(1,5; 1,5)(1{,}5;\ 1{,}5)+1+10,50{,}50,50{,}50,50{,}5im Margin, richtige Seite
(1; 1)(1;\ 1)−1-1000011genau auf der Trennebene
(1,5; 1,5)(1{,}5;\ 1{,}5)−1-10,50{,}5−0,5-0{,}51,51{,}5falsche Seite, fehlklassifiziert

Mit ∥w∥2=12\lVert\mathbf w\rVert^2 = \tfrac12 und ∑iξi=3\sum_i\xi_i = 3 ergibt sich für C=1C = 1 der Zielfunktionswert 12⋅12+1⋅3=3,25\tfrac12\cdot\tfrac12 + 1\cdot 3 = 3{,}25. Ob eine andere Ebene besser ist, hängt von CC ab: Bei großem CC lohnt es, w\mathbf w zu vergrößern (schmalerer Margin), um die ξi\xi_i zu verkleinern.

Supportvektoren bei Soft Margin​

Ergänzung, nicht auf den Folien (siehe aber 📄 09_svm_nicht_trennbar.pdf, Folie 13, Fälle 2 und 3).

Bei der Soft Margin SVM sind alle Punkte mit yif(xi)≤1y_if(\mathbf x_i) \le 1 Supportvektoren: die auf dem Margin und alle, die den Margin verletzen. Im dualen Problem (vgl. 6.4) ändert sich nur eine Nebenbedingung: Aus αi≥0\alpha_i\ge 0 wird die Box-Bedingung 0≤αi≤C0\le\alpha_i\le C. Die KKT-Bedingungen ergeben dann:

αi\alpha_iBedeutung
αi=0\alpha_i = 0yif(xi)≥1y_if(\mathbf x_i) \ge 1: kein Supportvektor
0<αi<C0 \lt \alpha_i \lt Cyif(xi)=1y_if(\mathbf x_i) = 1, ξi=0\xi_i = 0: Supportvektor genau auf dem Margin
αi=C\alpha_i = Cyif(xi)≤1y_if(\mathbf x_i) \le 1, ξi≥0\xi_i \ge 0: Supportvektor im Margin oder fehlklassifiziert

Der Einfluss jedes einzelnen Punkts auf w=∑iαiyixi\mathbf w = \sum_i\alpha_iy_i\mathbf x_i ist also auf CC begrenzt. Das erklärt, warum kleines CC robust gegen Ausreißer macht: Ein Ausreißer kann die Ebene nicht beliebig stark verziehen.

Kurz in scikit-learn​

Ergänzung: Der Effekt von CC lässt sich direkt ausprobieren. Kleines CC führt typischerweise zu mehr Supportvektoren (breiter Margin, viele Punkte darin):

from sklearn.svm import SVC

for C in [0.01, 1, 100]:
clf = SVC(kernel="linear", C=C).fit(X_train, y_train)
print(C, len(clf.support_), clf.score(X_test, y_test))

Typische Fallstricke​

  • CC ist kein Margin-Parameter, sondern ein Strafgewicht. Großes CC bedeutet kleinen Margin, nicht großen.
  • „Soft Margin heißt, die Daten werden nichtlinear getrennt.“ Nein. Die Trennebene bleibt linear, sie darf nur Fehler machen. Nichtlinearität kommt erst mit Kernen (Kapitel 7).
  • ξi>0\xi_i \gt 0 heißt nicht fehlklassifiziert. Für 0<ξi≤10\lt\xi_i\le 1 liegt der Punkt noch auf der richtigen Seite (bzw. auf der Ebene).
  • Skalierung der Merkmale: Da CC gegen ∥w∥2\lVert\mathbf w\rVert^2 abwägt und Abstände eingehen, hängt das Ergebnis von der Skalierung der Merkmale ab. Ergänzung: In der Praxis vorher standardisieren.