Support Vector Machine mit Python

Was sind Support Vector Machinen?

Support Vector Machinen (SVMs) sind ein Machine Learning Algorithmus, der Teil des Supervised Learning (überwachtes Lernen) ist. SVMs werden für Klassifikationsaufgaben eingesetzt. Dabei wird die Klassentrennung mithilfe einer Trennlinie (bei zwei Klassen) oder Ebene (bei mehreren Klassen) durchgeführt. Die Trennebene wird auch Maximum Margin Hyperplane genannt. Der Algorithmus versucht die Margin so zu legen, dass sie zu beiden Grenzen einen maximalen Abstand einnimmt. Die Support Vectoren (Stützvektoren) sind dabei die Punkte, der Klassen, die den minimalsten Abstand zur Margin haben und definieren die jeweiligen Klassengrenzen. Diese Eigenschaft sorgt dafür, dass SVMs sehr speichereffizient sind, da nur die Support Vektoren in den Hauptspeicher geladen werden müssen und die anderen Daten für die Berechnung nicht relevant sind.

Welche SVM-Methoden gibt es in Python?

Der SVM-Algorithmus ist in Python einfach einzusetzen. Die sci-kit-learn Library stellt alle nötigen Werkzeuge zur Verfügung. Dabei kann zwischen drei verschiedenen SVM-Klassifikationsmethoden gewählt werden: SVC, NuSVC und LinearSVC.

Unterschied von LinearSVC zu SVC?

LinearSVC zeigt eine gute Performance bei Daten mit einer linearen Beziehung. In der Praxis empfiehlt sich deshalb zuerst eine LinearSVC anzuwenden und bei mangelnden Resultaten auf die SVC-Methode umzusteigen. Ein großer Vorteil der LinearSVC ist auch die geringere Berechnungszeit für große Datenmengen. Die SVC-Methode ist für schnelle Ergebnisse aufgrund des quadratischen Aufwands nicht ideal. Für LinearSVC wurde die Library liblinear genutzt, während für SVC die libsvm Library verwendet wurde. Die beiden Methoden basieren demnach nicht auf der gleichen Berechnung. Allerdings entspricht die LinearSVC im Großen und Ganzen der SVC mit Kernel-Parameter = ‚Linear‘. Auch die Durchführung der Multi-Class SVM erfolgt nach verschiedenen Prinzipien. Bei der LinearSVC wird die One-vs-the-rest Methode eingesetzt. Bei der SVC das One-vs-One-Prinzip.

Unterschied NuSVC und SVC?

Die Methoden NuSVC und SVC sind sehr ähnlich zueinander. Ihre Berechnung erfolgt komplett gleich, da sie beide auf der libsvm Library basieren. Der Unterschied der Methoden besteht in der Benennung des Strafterms. Der Strafterm ist dazu da, die Höhe der Bestrafung von Fehlklassifikationen festzulegen. SVC nutzt dafür den Parameter C. Ein großes C führt zu einer höheren Bestrafung. Ein zu hohes C kann leicht in Overfitting münden. Ein kleines C führt zu einer geringeren Bestrafung. Bei einem zu kleinen C werden zum Beispiel Ausreißer oft fehlklassifiziert.

NuSVC nutzt anstatt dem Parameter ‚C‘ den Parameter ‚Nu‘. Der Unterschied von Nu zu C besteht in ihrem Wertebereich. ‚C‘ ist von 0 bis unendlich definiert. Dagegen ist ‚Nu‘ nur innerhalb des Intervalls von 0 bis 1 wählbar.

Durchführung einer SVM in Python?

Zuerst importieren wir die Library:

from sklearn import svm

Dann definieren wir die Daten:

x_train = bestehend aus n Samples mit m Features

y_train = bestehend aus den Klassen der Samples

x_test = bestehend aus n Samples mit m Features

Im nächsten Schritt wird der Classifier definiert:

classifier = svm.LinearSVC()

Dann nutzen wir die Trainingsdaten, um mit der fit() Methode von sci-kit-learn das Modell zu berechnen:

classifier.fit(X_train, y_train)

Mithilfe des Modells können wir jetzt Klassen für die Testdaten vorhersagen. Dafür nutzen wir die predict() Methoden von sci-kit-learn:

preds= classifier.predict(X_test)

Was ist der Kernel-Trick?

Sind die Daten nicht linear trennbar, wird der Kernel-Trick benötigt. Dafür werden Daten in einen höherdimensionalen Raum transformiert, in dem sie linear trennbar sind. In diesem Raum werden die Daten durch Berechnung der Hyperebene getrennt. Nach der Trennung der Daten werden sie wieder in den Ursprungsraum zurücktransformiert. Für die Transformation können verschiedene Kernel-Funktionen eingesetzt werden.

Welche Kernel-Funktionen bietet SVC an?

Die SVC-Methode hat den Parameter ‚Kernel‘, der verschiedene Kernel-Funktionen nutzen kann. Der default-Wert ist ‚rbf‘. Dies steht für Radiale Basis Funktion und wird auch Gauß-Kernel genannt. Ein Gauß-Kernel kann geschlossene Bereiche wie Kreise oder Cluster leichter trennen. Weitere zur Verfügung stehende Kernel-Funktionen sind ‘linear’, ‘poly’, ‘sigmoid’ und ‘precomputed’.