Читать книгу Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow - Aurélien Géron - Страница 159
Polynomieller Kernel
ОглавлениеDas Hinzufügen polynomieller Merkmale lässt sich einfach umsetzen und funktioniert bei vielen Machine-Learning-Algorithmen sehr gut (nicht nur bei SVMs). Allerdings können Polynome niedrigen Grades nicht gut mit komplexen Datensätzen umgehen, höhergradige Polynome dagegen erzeugen eine riesige Anzahl Merkmale, wodurch das Modell zu langsam wird.
Glücklicherweise können wir bei SVMs eine beinahe magische mathematische Technik einsetzen, den Kerneltrick (ihn stellen wir gleich vor). Dieser ermöglicht es, das gleiche Ergebnis wie beim Hinzufügen vieler polynomieller Merkmale zu erhalten, ohne diese explizit hinzuzufügen – das funktioniert auch für Polynome sehr hohen Grades. Dadurch umgehen wir die kombinatorische Explosion der Merkmalsanzahl, da wir überhaupt keine Merkmale hinzufügen müssen. Die Klasse SVC verwendet diesen Trick. Probieren wir ihn auf dem Datensatz moons aus:
from sklearn.svm import SVC
poly_kernel_svm_clf = Pipeline([
("scaler", StandardScaler()),
("svm_clf", SVC(kernel="poly", degree=3, coef0=1, C=5))
])
poly_kernel_svm_clf.fit(X, y)
Dieser Code trainiert einen SVM-Klassifikator mit einem polynomiellen Kernel 3. Grades. Sie sehen ihn auf der linken Seite von Abbildung 5-7. Auf der rechten Seite wird ein weiterer SVM-Klassifikator mit einem 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. |