Machine Learning – kurz & gut. Oliver Zeigermann
Чтение книги онлайн.
Читать онлайн книгу Machine Learning – kurz & gut - Oliver Zeigermann страница 7
Wir entscheiden uns, nur zwei Features, Sepal width und Sepal length, darzustellen und die vorhergesagten Labels als Farbe in die Darstellung hineinzucodieren. Es ist wichtig, zu verstehen, dass wir es uns hier künstlich schwerer machen als nötig, denn mit allen vier Features haben wir es ja zu sehr guten Ergebnissen gebracht. Es geht uns eher darum, den Nearest-Neighbors-Algorithmus besser darzustellen und die Phänomene des Over- und Underfittings zu illustrieren.
Unsere Grafik mit den beiden Features siehst du in Abbildung 2-1.
Abbildung 2-1: Verteilung der Trainingsdaten für Sepal-Features
Unsere beiden Features spannen ein zweidimensionales Koordinatensystem auf. Die Punkte darin sind die einzelnen Trainingsbeispiele. Sie sind an den Stellen des Koordinatensystems angebracht, die zu ihren Features passen. Jede Farbe drückt eine Irisart aus. Diese ist quasi unsere dritte Dimension.
In derselben Grafik zeigen wir in Abbildung 2-2 nun zusätzlich an, welche Vorhersage bei welcher Koordinate gemacht wird. Dabei nutzen wir die gleichen Farben wie für die Trainingsdaten, allerdings etwas heller als Hintergrund.
Noch einmal zur Wiederholung – die Vorhersage funktioniert sehr einfach: Bei jedem Punkt wird geschaut, welche Farbe der nächstliegende Trainingspunkt hat. Es ergeben sich dabei Grenzen zwischen den einzelnen Farben der Vorhersagen, diese nennt man auch Decision Boundaries.
Abbildung 2-2: Decision Boundaries für Sepal-Features
Overfitting
Gerade im Zentrum der Grafik sind die Grenzen zwischen den Decision Boundaries zerklüftet und unruhig, wenig glatt und genau auf unsere Trainingsdaten angepasst. Während es für unsere Trainingsdaten gut aussieht, passen diese Grenzen nicht wirklich gut für die Testdaten, das heißt, wenn wir nur die beiden Sepal-Features nutzen, haben wir es hier mit Overfitting zu tun. Overfitting bedeutet, dass ein Modell deutlich besser auf Trainingsdaten als auf Testdaten funktioniert, also nicht gut auf unbekannte Daten generalisiert. Dieselben Decision Boundaries kannst du in Abbildung 2-3 für die Testdaten sehen.
Schau genau hin: Die Darstellung der Decision Boundaries dominiert, und so kann diese Grafik auf den ersten Blick genau so aussehen wie die vorherige. Entscheidend sind aber die Datenpunkte, die nun nicht mehr für das Training, sondern für den Test eingezeichnet sind.
Die beiden Punkte links von der Mitte passen zum Beispiel überhaupt nicht mehr zur Vorhersage, rechts von der Mitte sieht es ebenso schlecht aus. Oben passt es hingegen ganz gut. Wir werden später in Kapitel 5, Feature-Auswahl, sehen, warum manche Arten ganz gut passen und warum wir bei einer anderen Auswahl der Features plötzlich derartig schlechte Ergebnisse bekommen.
Abbildung 2-3: Unpassende Decision Boundaries für Testdaten
Nun aber hier die Ergebnisse für diese Feature-Auswahl:
clf_sepal.score(X_train_sepal_only, y_train)
> 0.9555555555555556
clf_sepal.score(X_test_sepal_only, y_test)
> 0.80000000000000004
Das passt zu unserem Eindruck aus den Grafiken: Für die Trainingsdaten sieht es nicht schlecht aus (95% passend), aber die Testdaten liefern mit nur 80% Genauigkeit kein gutes Bild ab.
Das Bild des Overfittings verfestigt sich hier. Unser Modell ist also zu speziell und zu komplex. Es passt sich zu genau den Trainingsdaten an und ist dann nicht mehr allgemein genug für die Testdaten.
Underfitting
Gut, dann also ein einfacheres Modell? Erstaunlicherweise bekommen wir das hin, indem wir nicht nur die Nähe zu einem einzigen Nachbarn bei der Vorhersage in Erwägung ziehen, sondern die Nähe mehrerer. Wir probieren einmal zehn Nachbarn aus:
clf_sepal_10 = neighbors.KNeighborsClassifier(10)
Abbildung 2-4 zeigt die passende Grafik für die Trainingsdaten, an der man schön die viel sanfteren Übergänge der Decision Boundaries sehen kann.
Abbildung 2-4: Glatte Decision Boundaries, aber dieses Mal sogar schwach für die Trainingsdaten
Leider kann man genauso schön sehen, dass nicht einmal die Trainingsdaten gut vorhergesagt werden können. Wir haben es jetzt also mit Underfitting zu tun. Von Underfitting spricht man, wenn ein Modell zu einfach ist und nicht einmal die Trainingsdaten annähernd reproduzieren kann.
Das bestätigen uns auch die Scores, die für Trainings- und Testdaten ähnlich schwach sind:
clf_sepal_10.score(X_train_sepal_only, y_train)
> 0.80000000000000004
clf_sepal_10.score(X_test_sepal_only, y_test)
> 0.76666666666666672
Der Sweet Spot liegt irgendwo zwischen dem zu komplexen und dem zu einfachen Modell. Wir verraten dir jetzt schon einmal: Egal wie wir unser Modell hier anpassen, wir bekommen nie gute Ergebnisse. Das liegt daran, dass dieser Satz an Features einfach nicht ausreicht, um die einzelnen Arten voneinander zu trennen. Nichts zu machen. In der Praxis ist so etwas ernüchternd. Wenn du nicht die richtigen, zu schlechte oder zu wenige Daten hast, kannst du noch so schlau sein, du wirst nie zu guten Ergebnissen kommen. Mehr dazu findest du in Kapitel 3, Datenimport und -vorbereitung, und Kapitel 5,