Читать книгу Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow - Aurélien Géron - Страница 158

Nichtlineare SVM-Klassifikation

Оглавление

Auch wenn lineare SVM-Klassifikatoren sehr effizient sind und in vielen Fällen überraschend gut funktionieren, sind viele Datensätze nicht einmal annähernd linear separierbar. Eine Möglichkeit zum Umgang mit nichtlinearen Datensätzen ist das Hinzufügen zusätzlicher Merkmale, wie etwa polynomielle Merkmale (wie in Kapitel 4); in manchen Fällen erhalten Sie dabei einen linear separierbaren Datensatz. Betrachten Sie das Diagramm auf der linken Seite von Abbildung 5-5: Es stellt einen einfachen Datensatz mit einem einzigen Merkmal x1 dar. Dieser Datensatz ist, wie Sie sehen, nichtlinear separierbar. Wenn Sie aber ein zweites Merkmal x2 = (x1)2 hinzufügen, ist der sich dabei ergebende zweidimensionale Datensatz ausgezeichnet linear separierbar.

Abbildung 5-5: Hinzufügen von Merkmalen, um einen linear separierbaren Datensatz zu erhalten

Dieser Ansatz lässt sich mit Scikit-Learn umsetzen, indem Sie eine Pipeline erstellen, die aus einem PolynomialFeatures-Transformer (wie in »Polynomielle Regression« besprochen) und anschließend einem StandardScaler sowie einem LinearSVC besteht. Probieren wir dies anhand des Datensatzes moons aus. Dabei handelt es sich um einen Spieldatensatz, bei dem die Datenpunkte als zwei ineinander verschränkte Halbkreise geformt sind (siehe Abbildung 5-6). Sie können diesen Datensatz mit der funktion make_moons() erzeugen:

from sklearn.datasets import make_moons

from sklearn.pipeline import Pipeline

from sklearn.preprocessing import PolynomialFeatures

X, y = make_moons(n_samples=100, noise=0.15)

polynomial_svm_clf = Pipeline([

("poly_features", PolynomialFeatures(degree=3)),

("scaler", StandardScaler()),

("svm_clf", LinearSVC(C=10, loss="hinge"))

])

polynomial_svm_clf.fit(X, y)

Abbildung 5-6: Linearer SVM-Klassifikator mit polynomiellen Merkmalen

Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow

Подняться наверх