Support Vector Machines (SVMs) sind leistungsstarke Klassifikatoren, die darauf abzielen, eine Entscheidungsgrenze (Trennebene) im Datensatz zu finden, die den Abstand (Margin) zwischen den Datenpunkten der verschiedenen Klassen maximiert.

Grundidee

  • Entscheidungsgrenzen: Klassifikatoren teilen den Eingaberaum in Bereiche, die verschiedenen Klassen zugeordnet werden. Die Grenzen zwischen diesen Bereichen sind die Entscheidungsgrenzen.
  • Robustheit durch große Abstände: Entscheidungsgrenzen sind robuster, wenn der Abstand zwischen ihnen und den Datenpunkten groß ist. Dadurch wird die Klassifikation weniger anfällig für Streuung der Daten.
  • Large Margin Classifier: SVMs platzieren die Trennebene so, dass der Abstand zu den Datenpunkten maximiert wird. Diese Trennebene dient als Entscheidungsgrenze.

Stützvektoren

  • Relevanz der Punkte nahe der Entscheidungsgrenze: Nur die Punkte nahe der Entscheidungsgrenze beeinflussen die Lage der Trennebene.
  • Identifizierung während des Trainings: Die relevanten Punkte werden während des Trainings der SVM ermittelt.
  • Stützvektoren: Die Ortsvektoren dieser relevanten Punkte bilden die Stützvektoren, auf deren Basis die Trennebene berechnet wird.

Der Parameter C

  • Konfiguration der SVM: Über den Parameter C kann die SVM konfiguriert werden. Er erlaubt eine bestimmte Anzahl an Fehlern während des Trainings.
  • Abwägung zwischen Trennlinie und breiter Entscheidungsgrenze: C beeinflusst die Abwägung zwischen einer sauberen Trennlinie und einer breiten Entscheidungsgrenze.
  • Auswirkung des Parameters C:
    • Hoher Wert für C: Vermeidung von Fehlklassifikationen, aber schmalere Entscheidungsgrenze.
    • Kleiner oder mittlerer Wert für C: Einige Fehlklassifikationen werden erlaubt, dafür breitere und robustere Entscheidungsgrenze.
  • Tuning-Parameter: C ist ein Tuning-Parameter, der an den Datensatz angepasst werden muss. Typische Werte liegen zwischen 0,01 und 1000.

Kernel

  • Lineare Entscheidungsgrenze: Standardmäßig verwenden SVMs eine lineare Entscheidungsgrenze.

  • Nicht linear trennbare Datensätze: Für nicht linear trennbare Datensätze liefert die lineare Entscheidungsgrenze nur mittelmäßige Ergebnisse.

  • Transformation in höherdimensionalen Raum: Kernel transformieren die Daten in einen höherdimensionalen Raum, bevor die Entscheidungsgrenze gesetzt wird.

  • Lineare Trennbarkeit im Zielraum: Idealerweise sind die Daten im transformierten Raum linear trennbar.

  • Skalierung von Datenpunkten

from sklearn.preprocessing import StandardScaler
 
scaler = StandardScaler()
scaler.fit(X_train)
 
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
  • Modell trainieren
from sklearn.svm import SVC
 
model = SVC(kernel = "linear", C = 0.05) 
model.fit(X_train, y_train)
 
print(model.score(X_test, y_test))
  • Kleines C:
    • Ausreißer werden weniger stark gewichtet.
    • Die Trennebene passt sich eher dem allgemeinen Datentrend an.
  • Großes C:
    • Jeder Punkt wird gleich gewichtet.
    • Die Trennebene passt sich sehr stark an die Punkte an.

Polynomialer Kernel

  • Transformation durch Polynom: Der polynomiale Kernel transformiert die Daten mit einem Polynom.
  • Beispiel: Punkte auf einer Linie werden durch ein Polynom in einen zweidimensionalen Raum transformiert, wo sie linear trennbar sind.
  • Überanpassung: Hohe Polynomgrade können zu Überanpassung führen.

Warning

Überanpassung vermeiden: Ein zu hoher Polynomgrad im polynomialen Kernel kann dazu führen, dass das Modell überanpasst und somit auf den Trainingsdaten gut funktioniert, aber bei neuen Daten schlecht generalisiert.

from sklearn.svm import SVC
 
# degree = Grad des Polynoms
# coef0 darf nicht 0 sein
model = SVC(kernel = "poly", degree = 2, coef0 = 1)
model.fit(X_train, y_train)
 
print(model.score(X_test, y_test))

Radial Basis Function Kernel (RBF)

  • Häufigster Kernel: Der Gaußsche RBF-Kernel ist der am häufigsten verwendete Kernel.
  • Alternative Entscheidungsgrenzen: Der RBF-Kernel erzeugt andere Arten von Entscheidungsgrenzen als die meisten anderen Lernmodelle.
  • Idee: Eine Funktion wird gesucht, die Punkte einer Klasse tendenziell auf Hochpunkte abbildet, Punkte der anderen Klasse auf Tiefpunkte.
  • Breite Entscheidungsgrenzen: Durch die “Auseinanderspreizung” der Datenpunkte durch den Kernel entstehen tendenziell breite Entscheidungsgrenzen.
  • Gauß’sche radiale Basisfunktion: Häufig verwendete Funktion zur Erzeugung von “Hügeln”, die zu einer Funktion mit dem gewünschten Verlauf aufsummiert werden.

Parameter (Gamma)

Um in der RBF-Formel den Bruch im Exponenten zu vermeiden, wird anstatt des oft der Parameter verwendet.

  • Je größer , desto spitzer werden die RBF-Hügel.
  • Je kleiner , desto flacher ist der Anstieg.

Note

Gauß-Kernel: Der Gaußsche RBF-Kernel ist besonders gut geeignet, um auch komplexere und nicht-lineare Entscheidungsgrenzen zu modellieren, da er die Daten in einen höherdimensionalen Raum abbildet.

from sklearn.svm import SVC
 
model = SVC(kernel = "rbf", gamma = 10) # Gamma-Wert angeben. kein Wert, dann werden ein passender Wert aus den Daten berechnet.
model.fit(X_train, y_train.ravel())
 
print(model.score(X_test, y_test))