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

Entscheidungsgrenzen

Оглавление

Verwenden wir den Iris-Datensatz, um die logistische Regression zu veranschaulichen. Es handelt sich hierbei um einen bekannten Datensatz, der die Länge und Breite der Kelchblätter (engl. sepal) und Kronblätter (petal) von 150 Iris-Blüten aus drei Unterarten enthält: Iris setosa, Iris versicolor und Iris virginica (siehe Abbildung 4-22).

Abbildung 4-22: Blüten dreier Arten von Iris-Pflanzen14

Versuchen wir, einen Klassifikator zu erstellen, mit dem sich anhand der Breite der Kronblätter die Spezies Iris virginica erkennen lässt. Laden wir zunächst die Daten:

>>> from sklearn import datasets

>>> iris = datasets.load_iris()

>>> list(iris.keys())

['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename']

>>> X = iris["data"][:, 3:] # Breite der Kronblätter

>>> y = (iris["target"] == 2).astype(np.int) # 1 bei Iris virginica, sonst 0

Nun trainieren wir ein logistisches Regressionsmodell:

from sklearn.linear_model import LogisticRegression

log_reg = LogisticRegression()

log_reg.fit(X, y)

Betrachten wir die geschätzten Wahrscheinlichkeiten bei Blüten mit Breiten der Kronblätter von 0 bis 3 cm (siehe Abbildung 4-23):15

X_new = np.linspace(0, 3, 1000).reshape(-1, 1)

y_proba = log_reg.predict_proba(X_new)

plt.plot(X_new, y_proba[:, 1], "g-", label="Iris virginica")

plt.plot(X_new, y_proba[:, 0], "b--", label="Nicht Iris virginica")

# + weiterer Matplotlib-Code, um das Bild ansprechender zu gestalten

Abbildung 4-23: Geschätzte Wahrscheinlichkeiten und Entscheidungsgrenze

Die Breite der Kronblätter der Iris-virginica-Blüten (als Dreiecke dargestellt) liegt zwischen 1,4 und 2,5 cm, während die anderen Iris-Blüten (die Quadrate) schmalere Kronblätter zwischen 0,1 und 1,8 cm haben. Diese Bereiche überlappen einander ein wenig. Oberhalb von 2 cm ist sich der Klassifikator sicher, dass die Blüte eine Iris virginica ist (für diese Kategorie wird eine hohe Wahrscheinlichkeit ausgegeben), unterhalb von 1 cm ist er sich sicher, dass es keine Iris virginica ist (hohe Wahrscheinlichkeit für die Kategorie »Nicht Iris virginica«). Im Übergangsbereich zwischen diesen Extremen ist sich der Klassifikator nicht sicher. Wenn Sie aber die Kategorie vorhersagen (mit der Methode predict() anstatt mit predict_proba()), wird die jeweils wahrscheinlichere Kategorie ausgegeben. Es gibt also eine Entscheidungsgrenze bei etwa 1,6 cm, bei der beide Wahrscheinlichkeiten mit 50% gleich groß sind: Wenn die Kronblätter breiter als 1,6 cm sind, sagt der Klassifikator eine Iris virginica vorher, andernfalls, dass es keine ist (selbst wenn er sich nicht besonders sicher ist):

>>> log_reg.predict([[1.7], [1.5]])

array([1, 0])

Abbildung 4-24 zeigt den gleichen Datensatz, aber diesmal mit zwei Merkmalen: der Länge und Breite der Kronblätter. Ein Klassifikator mit logistischer Regression kann nach dem Trainieren anhand dieser zwei Merkmale die Wahrscheinlichkeit abschätzen, dass eine neue Blüte eine Iris virginica ist. Die gestrichelte Linie markiert die Punkte, an denen das Modell eine Wahrscheinlichkeit von 50% schätzt: Dies ist die Entscheidungsgrenze des Modells. Beachten Sie, dass diese Grenze eine Gerade ist.16 Jede der parallelen Linien steht für die Punkte, an denen das Modell eine bestimmte Wahrscheinlichkeit liefert, von 15% (unten links) bis 90% (oben rechts). Sämtliche Blüten jenseits der Linie oben rechts sind laut dem Modell mit mehr als 90%iger Wahrscheinlichkeit Iris virginica.

Abbildung 4-24: Lineare Entscheidungsgrenze

Wie andere lineare Modelle lässt sich auch die logistische Regression mit 1- oder 2-Straftermen regularisieren. Scitkit-Learn fügt standardmäßig einen 2-Strafterm hinzu.

Der Hyperparameter zum Steuern der Regularisierung eines Logistic Regression-Modells in Scikit-Learn ist nicht alpha (wie bei anderen linearen Modellen), sondern dessen Kehrwert C. Je höher der Wert von C, desto weniger stark ist das Modell regularisiert.
Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow

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