SVM ist ein nichtparametrischer, linearer Algorithmus für binäre Klassifizierungen und Regressionsanalysen, wobei er hauptsächlich als Klassifikator verwendet wird. Auch Mehrklassenklassifikationen sind damit möglich.
SVM wird beispielsweise gerne für die Gesichtserkennung eingesetzt, wie auch für die Kategorisierung von Texten oder Bildern. Auch in der Bioinformatik wird er oft verwendet, hier untere anderen für die Klassifizierung von Krebsarten oder Proteinen.
Das Ziel einer Klassifizierung mit SVM ist es, im Feature-Raum eine Entscheidungsgrenze zu ziehen, die die Objekte nach Klassenzugehörigkeit trennt. Dabei sollen Klassen, die trennbar sind, komplett getrennt werden, und sich überlappende Klassen so getrennt werden, dass der Fehler minimal gehalten wird. Je nach Dimensionalität der Daten kann diese Grenze eine Gerade, Ebene oder Hyperebene sein, die die Klassen linear trennt.
Da es unendlich viele mögliche Entscheidungsgrenzen gibt, die die Klassen im Raum trennen können, wird zur Eingrenzung eine weitere Bedingung eingeführt, die besagt, dass die beste Grenze diejenige ist, die die beiden Klassen mit dem größten leeren Bereich beidseitig dieser trennen kann. Dieser Bereich wird „Margin“ („Rand“) genannt. Dieser definiert sich über den kürzesten Abstand der Ebene zu denen ihr am nächsten gelegenen Datenpunkten (= Länge der Lotgeraden).
Die gefundene Grenze ist somit nur von denen ihr am nächsten gelegenen Vektoren abhängig, die ihre Lage beschreiben, weswegen das trainierte Modell nur diese Stützvektoren abspeichert.
Um neue Beobachtungen zu klassifizieren, kann anhand der Gleichung für die Grenze bestimmt werden, auf welcher Seite der Ebene sich das Objekt befindet.
Da Daten in der Realität meistens nicht sauber trennbar sind, und sich die Klassen überlappen, wird in der Praxis ein sogenannter „Soft Margin“ verwendet. Dafür wird die Randbedingung für die Maximierung der Margin aufgeweicht. Dies bedeutet, dass falsche Klassifizierungen einzelner Beobachtungen nun erlaubt sind, aber dennoch bestraft werden. Mit dieser Methode können auch Ausreißer das Modell nicht mehr verzerren. Das Bias des Modells wird erhöht und die Varianz gesenkt.
Zusätzlich werden neue Variablen eingeführt (Schlupfvariablen/Slack Variables), die die Flexibilität der Margin erhöhen. Dies sind Variablen, die für die Lösung eines Problems eingeführt werden, deren Wert aber irrelevant ist. Sie sollen helfen, eine Überanpassung des Modells zu vermeiden und die Zahl der Stützvektoren niedrig zu halten.
Kernel-Trick: Können die Daten im Feature-Raum nicht linear getrennt werden, werden der Vektorraum und die sich darin befindlichen Vektoren der Trainingsdaten in einen höherdimensionalen Raum überführt, bis sie durch eine Hyperebene linear getrennt werden können.
Der SVM Algorithmus wird im Allgemeinen nicht overfitten und er kann gut mit Ausreißern umgehen.
Der Lernalgorithmus erwartet numerische Eingabevariablen, was bedeutet, dass kategorische Variablen am besten in binäre Dummy-Variablen umgewandelt werden, zum Beispiel mit dem OneHotEncoder von Scikit-Learn oder mit pandas.get_dummies.
Zudem ist eine Skalierung der Daten sinnvoll, damit die größerwertigen Variablen im Datensatz nicht dominieren.
Bei der Implementierung in Scikit-Learn ist der Hyperparameter C von Bedeutung, der die Flexibilität der Margin über alle Dimensionen bestimmt. Wenn C = 0 ist, sind keine Fehler erlaubt, je größer C, desto weicher die Margin und desto mehr Fehler sind erlaubt. Dies bedeutet eine Erhöhung des Bias bei gleichzeitiger Senkung der Varianz.
Die Form der Entscheidungsgrenze kann mit Hilfe der verschiedenen Kernels bestimmt werden. Hier finden sich Beispiele für alle Anwendungsmöglichkeiten von SVM in Scikit-Learn.