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.
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”.
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.
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?
Es gibt verschiedene Kennzahlen, die man berechnen kann, um die Leistungsfähigkeit einer Support Vector Machine unabhängig bewerten zu können. In den meisten Fällen macht es auch Sinn mehrere der folgenden Kennzahlen zu ermitteln, um die Leistungsfähigkeit unabhängig bewerten zu können.
- Genauigkeit: Diese misst das Verhältnis der korrekt klassifizierten Datenpunkte mit der Gesamtzahl der Daten im Datensatz.
- Präzision: Die Präzision beschäftigt sich ausschließlich mit den Proben einer Klasse und misst das Verhältnis aus den korrekt vorhergesagten Proben dieser Klasse zu der Gesamtzahl der Vorhersagen, die dieser Klasse zugeordnet wurden.
- Recall: Der Recall unterscheidet sich etwas zu der Präzision, indem er nicht durch die Gesamtzahl der Vorhersagen einer Klasse teilt, sondern durch die Gesamtzahl der tatsächlichen Proben einer Klasse im Datensatz.
- F1-Score: Der F1-Score bildet das harmonische Mittel aus Precision und Recall, um diese beiden Kennzahlen gemeinsam auswerten zu können. Dabei werden beide Metriken gleich stark gewichtet.
- Konfusionsmatrix: Diese Matrix bildet man für binäre Klassifikationsprobleme, also welche, die lediglich zwei Klassen unterscheiden. Dabei werden in vier Feldern die möglichen Fehler und wahren Vorhersagen abgetragen, die vorkommen können.
- ROC-Kurve: Auf dieser Kurve wird die Sensitivität und die 1-Spezifität abgetragen, um bei verschiedenen Schwellenwerten die Performance des Modells bewerten zu können.
- Precision-Recall-Curve: Diese Kurve folgt demselben Muster wie die ROC-Kurve mit dem Unterschied, dass die Präzision und der Recall als Kennzahl veranschaulicht werden.
Abhängig von der Art der Klassifizierung sind manche dieser Kennzahlen wichtiger als andere. In der medizinischen Diagnostik beispielsweise kann die Nicht-Erkennung eines kranken Patienten deutlich folgenreicher sein als die fälschliche Diagnose bei einem gesunden Probanden. Deshalb sollte hier der Recall im Fokus stehen, da diese Kennzahl bewertet, wie gut das Modell alle erkrankten Personen in einem Datensatz erkennt.
Neben der Kennzahlauswahl ist auch die Methode wichtig, wie der Datensatz in Trainings- und Testset aufgeteilt werden. Bei einem einfachen Train-Test-Split kann es sein, dass die Kennzahlen, die auf dem Testdatensatz berechnet wurden, nicht aussagekräftig genug sind. Deshalb bietet es sich an, beispielsweise die Cross-Validation zu nutzen, um die Kennzahlen auf verschiedenen Testsets zu berechnen und dadurch eine belastbare Aussage treffen zu können.
Was sind die Vor- und Nachteile von SVMs?
Vorteile | Nachteile |
Einfaches Training des Modells | Finden der richtigen Kernelfunktion und Parameter kann rechenintensiv sein |
Support Vector Machines skalieren gut für höher-dimensionale Daten | Support Vector Machines können Noise nicht gut filtern |
Gute Alternative zu Neural Networks | Benötigt mehr Datensätze als Anzahl an Features um zu funktionieren |
kann für linear und nicht-linear trennbare Daten genutzt werden | Keine Wahrscheinlichkeitsinterpretation des Ergebnisses (entscheidet ausschließlich die Seite der Hyperplane) |
Welche Arten von Support Vector Machines gibt es?
Abhängig von der Problematik und dem Datensatz auf dem SVMs trainiert werden, unterscheidet man im Allgemeinen drei verschiedene Arten von Support Vector Machines:
- Lineare SVMs: Wenn die Datenklassen durch eine gerade Linie oder eine Hyperebene in einem hochdimensionalen Raum voneinander getrennt werden können, spricht man einer linearen SVM. Der Vorteil an diesen Modellen ist die vergleichsweise einfache und schnelle Berechnung, die auch bei großen Datensätze eine unkomplizierte Klassifizierung ermöglicht. Jedoch sind die Strukturen und Beziehungen in solchen Datensätzen nicht immer linear, sondern deutlich komplexer und lassen sich nicht mit einem linearen Zusammenhang erklären.
- Nichtlineare SVMs: Für solche Fälle kommen nichtlineare SVMs zum Einsatz, die die Daten mit deutlich komplexeren Ebenen trennen, die nicht linear sind. Dafür verwenden sie sogenannte Kernel-Funktionen, die die Form der Hyperebene in einem hochdimensionalen Raum vorgeben. Häufig genutzte Kernel-Funktionen sind beispielsweise Polynom-, Radialbasis- (RBF) oder die Sigmoidfunktion.
- Support-Vektor-Regression (SVR): Support Vector Machines können auch genutzt werden, wenn kontinuierliche Vorhersagen getroffen werden sollen und keine Klassifizierung. Dafür wird die sogenannte Support Vector Regression genutzt. Die Vorgehensweise bleibt erstmal ähnlich, indem eine Hyperebene gesucht wird, die dann jedoch versucht den Abstand zwischen vorhergesagten Ausgaben und den tatsächlichen Ausgaben zu minimieren. Somit lassen sich sowohl lineare als auch nicht lineare Beziehungen zwischen den Inputs und den Outputs verarbeiten und erlernen. Auch hierbei kommen wieder die sogenannten Kernel-Funktionen zum Einsatz.
Je nach Art der Anwendung kommt eine dieser Support Vector Machines zum Einsatz. Dabei spielt auch der Aufbau des Datensatzes eine entscheidende Rolle.
Wie kann man die Support Vector Machine in Python umsetzen?
Um eine Support Vector Machine in Python zu implementieren, kann die Bibliothek scikit-learn genutzt werden, mit deren Hilfe sich vorgefertigte Modelle einfach importieren und damit schnell nutzen lassen. In diesem Beispiel zeigen wir den Aufbau einer Support Vector Machine mit dem Iris-Datensatz in wenigen Schritten.
Als erstes müssen die erforderlichen Bibliotheken und Funktionen importiert werden:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
Anschließend kann der Datensatz geladen werden. Dafür können entweder eigene Daten, beispielsweise aus einem Excel File geladen werden, oder es können vorgefertigte Datensätze aus scikit-learn genutzt werden. Für dieses Beispiel nutzen wir den öffentlich zugänglichen Iris-Datensatz, der Informationen und Abmessungen über verschiedene Blumen enthält und als Zielvariable eine Klassifizierung in die Unterarten vornimmt.
iris = datasets.load_iris()
X = iris.data
y = iris.target
Den Datensatz teilen wir in Trainings- und Testdatensatz auf, um später die Kennzahlen des Modells auf unabhängigen Daten berechnen zu können. Üblich ist hierbei eine 70/30 oder 80/20 Aufteilung in Training und Test:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
Jetzt kann bereits das Modell instanziiert werden und mit den Hyperparametern individualisiert werden. Der wichtigste Parameter ist hierbei der Kernel, welcher die Art der Entscheidungsgrenze bestimmt. Als Default-Wert wird der Gauss’sche Kernel genutzt, der auch für nichtlineare Klassifizierungen genutzt werden kann. Mit dem Parameter C
wird die Regularisierung des Modells bestimmt.
svm = SVC(kernel='linear', C=1)
Nun kann das Modell mit den Trainingsdaten trainiert werden:
svm.fit(X_train, y_train)
Nach dem Training werden die Testdaten klassifiziert, damit anschließend die Leistung des Modells bewertet werden kann:
y_pred = svm.predict(X_test)
Anhand dieser Vorhersagen können nun Kennzahlen für das Testset berechnet werden.
acc = accuracy_score(y_test, y_pred)
print("Accuracy:", acc)
In diesem Abschnitt wurde ein leichtes Beispiel vorgestellt, wie eine SVM in Python umgesetzt werden kann. Dieses kannst Du als Ausgangspunkt für Deine eigenen Berechnung nutzen und auf Deine Daten individualisieren.
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.
Was sind N-grams?
Die Macht des NLP: Erforschen Sie n-Grams in der Textanalyse, Sprachmodellierung und verstehen Sie deren Bedeutung im NLP.
Was ist das No-Free-Lunch Theorem (NFLT)?
Entschlüsselung des No-Free-Lunch-Theorems: Implikationen und Anwendungen in ML und Optimierung.
Was ist Automated Data Labeling?
Erschließen Sie die Effizienz des maschinellen Lernens mit Automated Data Labeling. Entdecken Sie die Vorteile, Techniken und Tools.
Was ist die Synthetische Datengenerierung?
Verbessern Sie Ihr Datenmanagement mit synthetische Datengenerierung. Gewinnen Sie neue Erkenntnisse und schließen Sie Datenlücken.
Was ist Multi-Task Learning?
Steigern Sie die Effizienz von ML mit Multi-Task-Learning. Erforschen Sie die Auswirkungen auf verschiedene Bereiche & Anwendungen.
Was ist Federated Learning?
Entdecken Sie das Federated Learning. Zusammenarbeit, Sicherheit und Innovation unter Wahrung der Privatsphäre.
Andere Beiträge zum Thema Support Vector Machines
Niklas Lang
Seit 2020 bin ich als Machine Learning Engineer und Softwareentwickler tätig und beschäftige mich leidenschaftlich mit der Welt der Daten, Algorithmen und Softwareentwicklung. Neben meiner Arbeit in der Praxis unterrichte ich an mehreren deutschen Hochschulen, darunter die IU International University of Applied Sciences und die Duale Hochschule Baden-Württemberg, in den Bereichen Data Science, Mathematik und Business Analytics.
Mein Ziel ist es, komplexe Themen wie Statistik und maschinelles Lernen so aufzubereiten, dass sie nicht nur verständlich, sondern auch spannend und greifbar werden. Dabei kombiniere ich praktische Erfahrungen aus der Industrie mit fundierten theoretischen Grundlagen, um meine Studierenden bestmöglich auf die Herausforderungen der Datenwelt vorzubereiten.