Zum Inhalt springen

Support Vector Machine (SVM) – einfach erklärt!

Support Vector Machines (SVMs) sind mathematische Algorithmen, die im Bereich des Machine Learnings genutzt werden, um Objekte zu klassifizieren. Im Bereich der Text- oder Bildklassifizierung weisen sie Vorteile gegenüber Neural Networks auf, da sie schneller trainierbar sind und auch mit wenigen Trainingsdaten bereits gute Ergebnisse liefern.

Wie funktionieren Support Vector Machines?

Angenommen wir haben Daten mit zwei Klassen (blau, gelb) und zwei Features (x, y). Die SVM soll anhand der Ausprägung von x und y entscheiden, ob das Datenobjekt als blau oder gelb klassifiziert wird. Da wir nur zwei Dimensionen haben, können wir unsere Trainingsdaten in einem Koordinatensystem abbilden.

Das Bild zeigt ein Koordinatensystem mit zwei Klassen von Daten in blau und gelb.
Trainingsdaten für Support Vector Machine | Quelle: Autor

Die Support Vector Machine liefert als Ergebnis die sogenannte Hyperplane, welche am besten die beiden Gruppen voneinander trennt. Im zweidimensionalen Raum ist das eine einfache Linie. Anhand dieser Ebene wird entschieden, in welche Klasse ein Datenobjekt fällt. In unserem Beispiel werden alle Objekte links der Hyperplane als „gelb“ klassifiziert und alle rechts davon als „blau“.

Das Bild zeigt zwei Klassen in einem Diagramm, die mithilfe eines SVM klassifiziert wurden.
Beste Hyperplane | Quelle: Autor

Die Support Vector Machine versucht in verschiedenen Trainingsdurchläufen die Hyperplane so zu wählen, dass die Gap maximal wird. Diese misst den Abstand vom nächsten Element jeder Gruppe zu der Hyperplane. Wenn dieser maximal ist, bedeutet dies, dass die Ebene so gewählt wurde, dass die SVM beide Klassen so stark wie möglich voneinander trennt.

Wie verhält es sich mit Nicht-linearen Daten?

Leider können reale Anwendungen nicht immer durch eine einfache Linie so sauber getrennt werden, wie in unserem Beispiel. Indem wir den Datensatz nur etwas verändern, wird das Problem direkt deutlich komplexer.

Das Beispiel zeigt zwei Datenklassen, bei der eine Gruppe um den Ursprung verteilt ist und die andere Gruppe weiter weg liegt.
Nicht-Linearer Datensatz | Quelle: Autor

Obwohl wir die beiden Datengruppen mit dem Auge deutlich unterscheiden können, lassen sie sich nicht mit einer einfach linearen Hyperplane abgrenzen. Eine Möglichkeit um die Support Vector Machines trotzdem nutzen zu können ist, eine neue Dimension einzuführen und diese so zu erstellen, dass die Datenpunkte in einem höherdimensionalen Raum durch eine Hyperplane trennbar sind.

Da dies nicht nur teilweise sehr schwierig sein kann, sondern auch in den meisten Fällen rechnerisch sehr komplex wird und den Algorithmus unnötig aufbläht, werden wir auf diese Alternative in diesem Beitrag nicht näher eingehen.

Wie funktioniert der Kernel Trick für Support Vector Klassifizierung?

Statt solche nicht-linearen Datensätze mithilfe von neuen Dimensionen klassifizieren zu können, wird für Support Vector Machines stattdessen der sogenannte Kernel Trick genutzt. Unser Problem ist, dass SVMs Datenklassen nur mithilfe von linearen Hyperplanes voneinander trennen können. Deshalb müssen wir die nicht-linearen Daten so abändern, dass sie sich auch mit einem linearen Zusammenhang voneinander trennen lassen. Dazu müssen wir einen höherdimensionalen Raum finden, in dem die Daten linear trennbar sind.

Mathematisch gesehen entspricht dies einem Optimierungsproblem, wie wir es weiter oben bereits gesehen haben. Wir wollen die Hyperplane finden, die den maximalen Abstand zu dem nächsten Datenpunkt aus jeder Klasse hat. Wenn wir einen nicht-linearen Datensatz haben, taucht in dieser Optimierungsfunktion auch die sogenannte Mappingfunktion auf. Diese ordnet jedem Datenobjekt den Punkt im höher-dimensionalen Raum zu, in dem die Daten durch eine Hyperplane trennbar sind.

Das größte Problem ist dabei, eben dieses Mapping zu finden, das wir für die Berechnung des Optimierungsproblems benötigen. Theoretisch gibt es nämlich eine unendliche Menge an Funktionen, die dieses Problem für uns löst. Unserem Computer wollen wir jedoch nicht zumuten, alle diese Möglichkeiten durchrechnen zu müssen. Deshalb kommt uns ein mathematisches Theorem zur Hilfe, nämlich das sogenannte Mercer’s Theorem.

In einfachen Worten sagt es nämlich aus, dass wir zur Lösung unseres Optimierungsproblem gar nicht das genaue Mapping kennen müssen. Es reicht aus, wenn wir wissen, wie wir die Vektoren der Datenpunkte miteinander verrechnen können. Für diese Operation gibt es die sogenannten Kernel-Funktionen (bspw. Gauss-Kernel oder Spektrum-Kernel). Jede Funktion, die das Mercer Theorem erfüllt, ist eine Kernel-Funktion und kann statt einem expliziten Mapping genutzt werden. Das vereinfacht uns die Optimierung von nicht-linear trennbaren Daten ungemein.

Wie kann die Performance von SVM bewertet werden?

Die Leistung einer Support Vector Machine (SVM) kann anhand verschiedener Bewertungsmaßstäbe beurteilt werden, darunter:

  • Genauigkeit: Der Anteil der korrekt klassifizierten Proben an der Gesamtzahl der Proben im Datensatz.
  • Präzision: Der Anteil wahrer positiver Proben (korrekt vorhergesagte positive Proben) an der Gesamtzahl der vorhergesagten positiven Proben.
  • Recall: Der Anteil der richtig positiven Proben (richtig vorhergesagte positive Proben) an der Gesamtzahl der tatsächlich positiven Proben.
  • F1-Score: Das harmonische Mittel aus Precision und Recall, wobei beide Metriken gleich gewichtet werden.
  • Konfusionsmatrix: Eine Matrix, die die Anzahl der wahren Positiven, wahren Negativen, falsch Positiven und falsch Negativen für ein binäres Klassifikationsproblem anzeigt.
  • ROC-Kurve: Eine grafische Darstellung der wahr-positiven Rate (Sensitivität) gegenüber der falsch-positiven Rate (1-Spezifität) bei verschiedenen Klassifizierungsschwellenwerten.
  • Precision-Recall-Curve: Eine grafische Darstellung der Präzision im Vergleich zum Rückruf bei verschiedenen Klassifikationsschwellenwerten.

Die Wahl der Bewertungsmetrik hängt von der jeweiligen Problemstellung und den Kosten der verschiedenen Fehlertypen ab. Bei einem medizinischen Diagnoseproblem beispielsweise können falsch-negative Ergebnisse (Fehlen einer Krankheit) kostspieliger sein als falsch-positive (Diagnose einer Krankheit, obwohl sie nicht vorhanden ist), so dass die Rückrufrate eine relevantere Kennzahl sein kann.

Es ist auch wichtig, Kreuzvalidierungstechniken wie die k-fache Kreuzvalidierung anzuwenden, um sicherzustellen, dass die Leistung des Modells nicht zu sehr an die Trainingsdaten angepasst wird. Dabei werden die Daten in k Foldings unterteilt, das Modell auf k-1 Foldings trainiert und auf dem verbleibenden Fold getestet. Der Prozess wird k-mal wiederholt, und die Leistungskennzahlen werden über die k Iterationen gemittelt.

Was sind die Vor- und Nachteile von SVMs?

VorteileNachteile
Einfaches Training des ModellsFinden der richtigen Kernelfunktion und Parameter kann rechenintensiv sein
Support Vector Machines skalieren gut für höher-dimensionale DatenSupport Vector Machines können Noise nicht gut filtern
Gute Alternative zu Neural NetworksBenötigt mehr Datensätze als Anzahl an Features um zu funktionieren
kann für linear und nicht-linear trennbare Daten genutzt werdenKeine Wahrscheinlichkeitsinterpretation des Ergebnisses (entscheidet ausschließlich die Seite der Hyperplane)
Abwägungen bei SVMs

Welche Arten von Support Vector Machines gibt es?

Es gibt hauptsächlich drei Arten von Support Vector Machines (SVMs):

  • Lineare SVMs: Lineare SVMs werden für Klassifizierungsaufgaben verwendet, bei denen die Daten durch eine gerade Linie oder eine Hyperebene in einem hochdimensionalen Raum getrennt werden können. Lineare SVMs sind rechnerisch effizient und können große Datensätze verarbeiten, eignen sich aber möglicherweise nicht für Datensätze mit komplexen oder nichtlinearen Beziehungen zwischen den Eingaben und Ausgaben.
  • Nichtlineare SVMs: Nichtlineare SVMs werden für Klassifizierungsaufgaben verwendet, bei denen die Daten nicht durch eine gerade Linie oder eine Hyperebene in einem hochdimensionalen Raum getrennt werden können. Nichtlineare SVMs verwenden Kernel-Funktionen, um die Daten in einen höher-dimensionalen Raum zu transformieren, in dem sie durch eine Hyperebene getrennt werden können. Beispiele für Kernel-Funktionen sind Polynom-, Radialbasisfunktion (RBF) und Sigmoidfunktionen.
  • Support-Vektor-Regression (SVR): SVR wird für Regressionsaufgaben verwendet, bei denen das Ziel darin besteht, eine kontinuierliche Ausgangsvariable und nicht eine diskrete Klassenbezeichnung vorherzusagen. SVR funktioniert, indem eine Hyperebene gefunden wird, die den Abstand zwischen den vorhergesagten Ausgaben und den tatsächlichen Ausgaben minimiert. SVR kann sowohl lineare als auch nichtlineare Beziehungen zwischen den Eingaben und Ausgaben verarbeiten und kann mit verschiedenen Kernel-Funktionen verwendet werden.

Jede Art von SVM hat ihre eigenen Stärken und Schwächen, und die Wahl der SVM hängt von der Art des Problems und den Merkmalen der Daten ab. Lineare SVMs sind nützlich, wenn die Daten durch eine gerade Linie trennbar sind und wenn die Berechnungskomplexität ein Problem darstellt. Nichtlineare SVMs sind nützlich, wenn die Daten nicht durch eine gerade Linie trennbar sind und wenn die Beziehungen zwischen den Eingaben und Ausgaben komplex oder nichtlinear sind. SVR ist nützlich, wenn das Ziel darin besteht, eine kontinuierliche Ausgangsvariable vorherzusagen, und wenn die Beziehungen zwischen den Eingaben und Ausgaben nicht eindeutig sind.

Wie kann man die Support Vector Machine in Python umsetzen?

Um SVM in Python zu implementieren, kannst Du die Bibliothek scikit-learn verwenden, die eine einfach zu verwendende und gut dokumentierte SVM-Implementierung bietet. Im Folgenden findest Du eine Schritt-für-Schritt-Anleitung zur Implementierung in Python:

Importiere die erforderlichen Bibliotheken:

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

Lade den Datensatz, den Du verwenden möchtest. Scikit-learn bietet mehrere integrierte Datensätze, die für Experimente verwenden werden können. Zum Beispiel den Iris-Datensatz, der eine Unterscheidung von verschieden Blütenformen beinhaltet:

iris = datasets.load_iris()
X = iris.data
y = iris.target

Teile den Datensatz in eine Trainings- und eine Testmenge auf. Es ist üblich, eine 70/30- oder 80/20-Aufteilung für Training und Test zu verwenden:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)


Instanziiere ein SVM-Objekt mit den gewünschten Hyperparametern. Der wichtigste Hyperparameter ist der Kernel, der die Art der Entscheidungsgrenze bestimmt, die die SVM lernen soll. Die anderen Hyperparameter steuern die Stärke der Regularisierung und andere Aspekte des Modells:

svm = SVC(kernel='linear', C=1)


Trainiere die SVM mit den Trainingsdaten:

svm.fit(X_train, y_train)


Vorhersage der Labels der Testdaten:

y_pred = svm.predict(X_test)


Bewerte die Leistung der SVM anhand einer Leistungskennzahl wie der Genauigkeit:

acc = accuracy_score(y_test, y_pred)
print("Accuracy:", acc)


Beachte, dass dies ein sehr einfaches Beispiel ist und dass es viele fortgeschrittenere Techniken zur Abstimmung von Hyperparametern und zur Optimierung der Leistung einer SVM gibt. Dieses Beispiel sollte jedoch einen guten Ausgangspunkt für die Implementierung von SVM in Python bieten.

Das solltest Du mitnehmen

  • Support Vector Machines sind Machine Learning Algorithmen zur Klassifizierung von Datenobjekten.
  • SVMs versuchen die beste sogenannte Hyperplane zu finden, welche die Datengruppen am deutlichsten voneinander trennt.
  • Wenn die Daten nicht mit einem linearen Element, bspw. einer Geraden oder einer Ebene, trennbar sind, können wir den sogenannten Kernel-Trick nutzen.
  • SVMs sind gute Alternativen zu neuronalen Netzen bei der Klassifizierung von Objekten.

Andere Beiträge zum Thema Support Vector Machines

Das Logo zeigt einen weißen Hintergrund den Namen "Data Basecamp" mit blauer Schrift. Im rechten unteren Eck wird eine Bergsilhouette in Blau gezeigt.

Verpass keine neuen Beiträge!

Wir versenden keinen Spam! Lies die Details gerne in unserer Datenschutzrichtlinie nach.

Cookie Consent mit Real Cookie Banner