ML Atlas

Machine Learning von Grund auf · Portfolio-Projekt · 45 Min.

Projekt B: eine saubere Tabelle

Kurz gesagt

Zweites Portfolio-Projekt: Baue aus einer rohen Pinguin-Tabelle (Lücken, Kategorien) eine Pipeline ohne Leck und finde das Leck in drei fremden Pipelines.

Die Aufgabe

Du bekommst die Tabelle so, wie sie veröffentlicht wurde: 344 Pinguine, 2 davon ohne jede Messung und 11 ohne eingetragenes Geschlecht. Insel und Geschlecht sind Wörter, keine Zahlen. Das Modell soll die Art erkennen.

  1. Baue eine Pipeline aus Blöcken: womit die Lücken gefüllt werden, was mit fehlendem Geschlecht passiert, wie Insel und Geschlecht kodiert werden, ob skaliert wird und welches Modell. Wähle für jeden Schritt, der aus Zeilen lernen kann, wo er angepasst wird: in der Pipeline oder vor der Aufteilung.
  2. Schreib einen Satz Begründung und sende die Pipeline an den verdeckten Test.
  3. Zeig in drei fremden Pipelines auf den Schritt mit dem Leck.

Die Pipeline prüfst du mit Kreuzvalidierung. Der verdeckte Test bewertet sie einmal, am Ende.

Daten und Aufteilung

Palmer Penguins (Gorman, Williams und Fraser 2014; Paket palmerpenguins, Horst, Hill und Gorman 2020), Lizenz CC0 1.0: 344 Pinguine dreier Arten (Adelie, Chinstrap, Gentoo) von drei Inseln des Palmer-Archipels in der Antarktis. Messungen: Länge und Tiefe des Schnabels, Flossenlänge, Körpermasse. Dazu Insel und Geschlecht. palmerpenguins

  • Lernen: 258 Pinguine (Adelie 114, Chinstrap 51, Gentoo 93). Kreuzvalidierung in 5 Teilen: Jeder Teil ist einmal die Validierung, und die Pipeline lernt auf den anderen.
  • Verdeckter Test: 86 Pinguine (Adelie 38, Chinstrap 17, Gentoo 31), einmal zufällig beiseitegelegt, mit gleichen Artenanteilen (Seed 1). Die Pipeline lernt auf allen 258 und bewertet erst dann den Test.
  • „Vor der Aufteilung“ heißt: ein Schritt, angepasst auf der ganzen Tabelle, 344 Pinguine samt verdecktem Test. „In der Pipeline“ heißt: nur auf den Pinguinen, aus denen das Modell lernt (in jedem Fold und am Ende auf allen 258).

„Verdeckt“ heißt hier „auf der Seite nicht gezeigt“, nicht gesichert. Der Code der Seite ist öffentlich, jeder kann ihn lesen. Dein Browser zählt die Einreichungen, also setzt das Löschen der Website-Daten das Limit zurück. Das ist eine Übung in Disziplin, keine Prüfung.

So bestehst du

Das Bestehen ist automatisch, nach drei Regeln:

  • eine Pipeline ohne Leck: Jeder Schritt, der aus Zeilen lernt (Mittelwert oder Median für die Lücken, das häufigste Geschlecht, Mittelwert und Streuung des Skalierers), steht in der Pipeline. Ein Schritt, der jeweils nur eine Zeile ansieht (die Konstante „unbekannt“, eine Spalte entfernen), darf überall stehen;
  • Genauigkeit auf dem verdeckten Test höher als bei beiden einfachen Regeln: „immer die häufigste Art“ (44,2 % auf dem Test) und „eine Frage“, ein Baum der Tiefe 1, der fragt, ob die Flosse höchstens 207,5 mm misst (77,9 %);
  • nur die erste Einreichung zählt und nur die erste Wahl in jeder der drei fremden Pipelines: Du brauchst drei von drei Lecks. Du hast 3 Einreichungen, aber die späteren sind „nachträglich“: Sie zeigen das Testergebnis und ändern nichts am Bestehen.

Warum das Leck im Aufbau geprüft wird und nicht in der Zahl. Bei den Pinguinen bewegt so ein Leck das Ergebnis kaum: In jeder der 2304 Pipelines, die man hier bauen kann, ändert das Verschieben von Schritten aus der Pipeline vor die Aufteilung die CV-Genauigkeit um höchstens 0,8 Prozentpunkte. Die Zahl warnt nicht, also wird die Pipeline nach ihrem Aufbau beurteilt, wie bei einem Code-Review.

Das Werkzeug berechnet die CV selbst, also lässt sich die Validierung nicht austricksen. Austricksen lässt sich der Test: einreichen, Ergebnis ansehen, nachbessern. Deshalb zählt nur die erste Einreichung. Vor dem Einreichen zeigt das Werkzeug den üblichen Bereich: von CV − 4 bis CV + 4 Prozentpunkte. So weit streute der Test um die CV bei den Beispiel-Pipelines auf 200 anderen zufälligen Aufteilungen (95 % der Fälle). Ein Pinguin auf dem Test sind 1,2 Punkte.

Die Beispiel-Pipelines ohne Leck bestehen auf 100 % dieser 200 Aufteilungen. kNN ohne Skalierung besteht nur auf 35 %: Die Körpermasse in Gramm übertönt die anderen Messungen, deshalb verliert so eine Pipeline in der CV (75,7 %) sogar gegen „eine Frage“ (79,0 %), und über ihr Bestehen entschiede das Glück der Aufteilung. Es gibt keine Rangliste: Dein Ergebnis siehst nur du.

Deine Pipeline

Das Werkzeug läuft im Browser mit eingeschaltetem JavaScript. Ohne JavaScript baust du die Pipeline im Notebook unten.

Drei fremde Pipelines

Jede dieser Pipelines rechnet eine Kreuzvalidierung auf allen 344 Pinguinen, und in jeder hat ein Schritt ein Leck: drei der acht Leckarten aus der Lektion über Datenlecks (Kapoor und Narayanan 2023). Nach deiner Wahl siehst du die Art, die Reparatur und wie viel das Leck bei den Pinguinen ändert.

Die Lecksuche läuft im Browser mit eingeschaltetem JavaScript.

Abschlusskarte

Nach dem Bestehen kannst du eine Karte herunterladen (PNG). Deinen Namen tippst du auf dieser Seite ein, die Karte entsteht in deinem Browser, und der Name gelangt weder in die Adresse der Seite noch auf einen Server. „Auf LinkedIn teilen“ übergibt nur die Adresse dieser Seite.

Für Programmierende: das Notebook

Das Notebook macht dasselbe in scikit-learn: derselbe Datensatz (die CSV-Datei aus dem Repository seaborn-data, auf einen Commit festgelegt), dieselben 86 Zeilen des verdeckten Tests (als Zeilennummern), dieselben Wahlen wie die Blöcke auf der Seite, Kreuzvalidierung in 5 Teilen, die Leckprüfung am Aufbau und die Regel zum Bestehen. Führe die Testzelle einmal aus, nachdem du gewählt hast: Der erste Lauf zählt. In den geprüften Beispielen liefert kNN dieselben Zahlen wie die Seite; ein Baum kann um einzelne Pinguine abweichen, weil scikit-learn Gleichstände anders auflöst.

README-Vorlage für GitHub

Ein aus einem Tutorial kopiertes Notebook sagt wenig über dich. Ein README mit deinen eigenen Entscheidungen und Grenzen sagt mehr. Kopiere die Vorlage und fülle jeden Abschnitt mit eigenen Worten.

Vorlage zeigen
# Eine saubere Tabelle: eine Pipeline ohne Leck

Projekt B des ML-Atlas-Kurses: https://mlatlas.org/de/kurs/ml/projekt-b/

## Problem
Die Art eines Pinguins aus Messungen, Insel und Geschlecht erkennen, wenn die Tabelle Lücken und Kategorien hat. <In deinen Worten: für wen und wozu.>

## Daten und Lizenz
Palmer Penguins, Gorman, Williams und Fraser (2014), Paket palmerpenguins (Horst, Hill und Gorman 2020), CC0 1.0, https://allisonhorst.github.io/palmerpenguins/. 344 Pinguine, 2 ohne Messungen, 11 ohne Geschlecht.

## Validierung
<Wie du die Daten aufgeteilt hast, wie viele Teile die Kreuzvalidierung hat, wo jeder Schritt angepasst wird (in der Pipeline oder vor der Aufteilung) und wie oft du den verdeckten Test angesehen hast.>

## Ergebnis ± Streuung
<Die Pipeline, CV-Genauigkeit und ihre Streuung zwischen den Teilen; Genauigkeit auf dem Test.>

## Baseline
<Die Genauigkeit von „immer die häufigste Art“ und „eine Frage“ auf denselben Daten.>

## Was das Modell nicht kann
<Grenzen: drei Inseln, die Jahre 2007–2009, was mit einem Pinguin ohne Messungen, was mit einer anderen Art.>

## Nächste Schritte
<Was du als Nächstes prüfen würdest und warum.>