Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow. Aurélien Géron
polynomiellen Kernel 10. Grades gezeigt. Natürlich müssen Sie den Grad der Polynome senken, falls Ihr Modell zum Overfitting neigt. Dementsprechend müssen Sie den Grad der Polynome erhöhen, wenn Underfitting vorliegt. Der Hyperparameter coef0 steuert, wie stark das Modell von den höhergradigen im Gegensatz zu den niedriggradigen Polynomialtermen beeinflusst wird.
Abbildung 5-7: SVM-Klassifikatoren mit polynomiellem Kernel
|
Ein häufiger Ansatz zum Finden der richtigen Werte der Hyperparameter ist eine Gittersuche (siehe Kapitel 2). Es ist meist schneller, zunächst eine sehr grobe Gittersuche durchzuführen und anschließend die besten gefundenen Werte mit einer zweiten Gittersuche zu verfeinern. Ein gutes Gefühl dafür, was jeder der Hyperparameter bewirkt, hilft Ihnen außerdem dabei, den richtigen Teil des Hyperparameterraums zu durchkämmen. |
Ähnlichkeitsbasierte Merkmale
Eine weitere Technik zum Umgang mit nichtlinearen Aufgaben besteht darin, mit einer Ähnlichkeitsfunktion berechnete Merkmale hinzuzufügen. Diese Funktion misst, wie ähnlich ein Datenpunkt zu einem bestimmten Orientierungspunkt, der Landmarke, ist. Betrachten wir beispielsweise den zuvor besprochenen eindimensionalen Datensatz und fügen wir zwei Landmarken bei x1 = –2 und x1 = 1 hinzu (siehe das linke Diagramm in Abbildung 5-8). Anschließend definieren wir die Ähnlichkeitsfunktion als gaußsche radiale Basisfunktion (RBF) mit γ = 0,3 (siehe Formel 5-1).
Formel 5-1: Gaußsche RBF
øγ(x, ℓ) = exp(–γ||x – ℓ||2)
Dies ist eine glockenförmige Funktion, die zwischen 0 (sehr weit von der Landmarke entfernt) und 1 (genau bei der Landmarke) liegt. Damit können wir die neuen Merkmale berechnen. Betrachten wir beispielsweise den Datenpunkt x1 = –1: Er liegt im Abstand 1 zur ersten und im Abstand 2 zur zweiten Landmarke. Daher sind seine neuen Merkmale x2 = exp (–0,3 × 12) ≈ 0,74 und x3 = exp (–0,3 × 22) ≈ 0,30. Das Diagramm auf der rechten Seite von Abbildung 5-8 zeigt den transformierten Datensatz (ohne die ursprünglichen Merkmale). Wie Sie sehen, ist er nun linear separierbar.
Abbildung 5-8: Ähnlichkeit von Merkmalen, berechnet mit der gaußschen RBF
Sie fragen sich vielleicht, wie die Landmarken ausgesucht werden. Die einfachste Möglichkeit ist, lediglich bei jedem einzelnen Datenpunkt eine Landmarke zu erzeugen. Dadurch entstehen sehr viele Dimensionen, und die Chance erhöht sich, dass der transformierte Trainingsdatensatz linear separierbar ist. Der Nachteil dieser Methode ist, dass ein Datensatz mit m Datenpunkten und n Merkmalen in einen Trainingsdatensatz mit m Datenpunkten und m Merkmalen umgewandelt wird (vorausgesetzt, Sie verwerfen die ursprünglichen Merkmale). Wenn Ihr Trainingsdatensatz sehr groß ist, erhalten Sie eine dementsprechend große Anzahl Merkmale.
Der gaußsche RBF-Kernel
Wie die polynomiellen Merkmale können auch die ähnlichkeitsbasierten Merkmale bei jedem Machine-Learning-Algorithmus nützlich sein, es kann aber sehr rechenintensiv sein, alle zusätzlichen Merkmale zu berechnen, besonders wenn der Trainingsdatensatz sehr umfangreich ist. Auch hier kommt uns der magische Kerneltrick der SVMs zu Hilfe: Er ermöglicht es, ein zu vielen ähnlichkeitsbasierten Merkmalen äquivalentes Ergebnis zu erhalten. Probieren wir den gaußschen RBF-Kernel mit der Klasse SVC aus:
rbf_kernel_svm_clf = Pipeline([
("scaler", StandardScaler()),
("svm_clf", SVC(kernel="rbf", gamma=5, C=0.001))
])
rbf_kernel_svm_clf.fit(X, y)
Dieses Modell ist links unten in Abbildung 5-9 dargestellt. Die übrigen Diagramme zeigen mit anderen Einstellungen der Hyperparameter gamma (γ) und C berechnete Modelle. Durch das Erhöhen von gamma werden die glockenförmigen Kurven schmaler (rechte Diagramme in Abbildung 5-9). Dadurch wird der Einfluss jedes Datenpunkts geringer: Die Entscheidungsgrenze wird unregelmäßiger und schlängelt sich um einzelne Datenpunkte herum. Ein kleiner Wert für gamma dagegen verbreitert die Glockenkurve, sodass die Datenpunkte einen großen Einflussbereich haben und die Entscheidungsgrenze weicher wird. Damit verhält sich γ wie ein Regularisierungsparameter: Wenn Ihr Modell zum Overfitting neigt, sollten Sie diesen Wert verringern, wenn es zum Underfitting neigt, sollten Sie ihn erhöhen (ähnlich zum Hyperparameter C).
Abbildung 5-9: SVM-Klassifikatoren mit RBF-Kernels
Es gibt noch weitere Kernels, aber diese kommen sehr viel seltener zum Einsatz. Beispielsweise sind manche dieser Kernels auf bestimmte Datenstrukturen spezialisiert. String Kernels finden sich bisweilen bei der Klassifikation von Textdokumenten oder DNA-Sequenzen (z.B. der String-Subsequence-Kernel oder Kernels, die auf der Levenshtein-Distanz aufbauen).
|
Wie sollen Sie sich bei so vielen möglichen Kernels für einen entscheiden? Als Faustregel gilt: Sie sollten immer zuerst den linearen Kernel ausprobieren (LinearSVC, dieser ist viel schneller als SVC(kernel="linear")), besonders bei sehr umfangreichen Trainingsdaten oder sehr vielen Merkmalen. Wenn der Trainingsdatensatz nicht zu groß ist, sollten Sie es auch mit dem gaußschen RBF-Kernel versuchen; er funktioniert in den meisten Fällen. Wenn Sie dann noch Zeit und Rechenkapazität übrig haben, können Sie mit einigen anderen Kernels, Kreuzvalidierung und Gittersuche experimentieren, insbesondere wenn es für Ihre Datenstruktur spezialisierte Kernels gibt. |
Komplexität der Berechnung
Die Klasse LinearSVC verwendet die Bibliothek liblinear, die einen optimierten Algorithmus (https://homl.info/13) für lineare SVMs enthält.1 Sie unterstützt den Kerneltrick nicht, skaliert aber annähernd linear mit der Größe des Trainingsdatensatzes und der Anzahl Merkmale: Seine zeitliche Komplexität ist in etwa O(m × n).
Der Algorithmus benötigt länger, wenn eine sehr hohe Präzision erforderlich ist. Dies lässt sich über den Toleranz-Hyperparameter ε (tol in Scikit-Learn) einstellen. Für die meisten Klassifikationsaufgaben genügt die voreingestellte Toleranz.
Die Klasse SVC dagegen verwendet die Bibliothek libsvm, deren