Читать книгу Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow - Aurélien Géron - Страница 164
SVM-Regression
ОглавлениеWie bereits erwähnt, ist der SVM-Algorithmus recht flexibel: Er ermöglicht nicht nur die lineare und nichtlineare Klassifikation, sondern auch die lineare und nichtlineare Regression. Um SVMs zur Regression statt zur Klassifikation zu verwenden, wird ein umgekehrtes Ziel verfolgt: Anstatt die breitestmögliche Straße zwischen zwei Kategorien zu fitten und Verletzungen dieser Grenze zu minimieren, versucht die SVM-Regression, so viele Datenpunkte wie möglich auf der Straße zu platzieren und Grenzverletzungen (diesmal Datenpunkte abseits der Straße) zu minimieren. Die Breite der Straße wird über den Hyperparameter ε gesteuert. Abbildung 5-10 zeigt zwei lineare SVM-Regressionsmodelle, die mit zufälligen linearen Daten trainiert wurden, das eine mit breitem Margin (ε = 1,5) und das andere mit schmalem Margin (ε = 0,5).
Das Hinzufügen von weiteren Trainingsdatenpunkten innerhalb des Margins beeinflusst die Vorhersagen des Modells nicht; man bezeichnet dieses Modell daher als ε-insensitiv.
Abbildung 5-10: SVM-Regression
Sie können die lineare SVM-Regression mit der Scikit-Learn-Klasse LinearSVR durchführen. Der folgende Code erstellt das auf der linken Seite von Abbildung 5-10 dargestellte Modell (die Trainingsdaten müssen dazu skaliert und zentriert sein):
from sklearn.svm import LinearSVR
svm_reg = LinearSVR(epsilon=1.5)
svm_reg.fit(X, y)
Zum Bearbeiten nichtlinearer Regressionsaufgaben können Sie ein Kernel-SVM-Modell verwenden. Beispielsweise zeigt Abbildung 5-11 eine SVM-Regression mit einem polynomiellen Kernel 2. Grades auf einem zufälligen quadratischen Trainingsdatensatz. Im linken Diagramm gibt es wenig Regularisierung (ein großer Wert für C) und im rechten Diagramm sehr viel mehr Regularisierung (ein kleiner Wert für C).
Abbildung 5-11: SVM-Regression mit einem polynomiellen Kernel 2. Grades
Der folgende Code erstellt das auf der linken Seite von Abbildung 5-11 dargestellte Modell. Dazu wird die Scikit-Learn-Klasse SVR verwendet (die den Kerneltrick unterstützt).
from sklearn.svm import SVR
svm_poly_reg = SVR(kernel="poly", degree=2, C=100, epsilon=0.1)
svm_poly_reg.fit(X, y)
Die Klasse SVR ist das Pendant zur Klasse SVC für Regressionsaufgaben, und die Klasse LinearSVR ist das Pendant zur Klasse LinearSVC. Die Klasse LinearSVR skaliert linear mit der Größe des Trainingsdatensatzes (wie die Klasse LinearSVC), die Klasse SVR wird dagegen mit einem wachsenden Trainingsdatensatz sehr langsam (wie die Klasse SVC).
SVMs lassen sich auch zum Erkennen von Ausreißern einsetzen; Details dazu finden Sie in der Dokumentation zu Scikit-Learn. |