Darstellung: Daten bereinigen

Apfelbäume produzieren eine Mischung aus Früchten und Würmermasse. Dennoch sind die Äpfel in exklusiven Lebensmittelgeschäften zu 100% perfekt. Zwischen Obstgärten und Lebensmitteln verbringt jemand viel Zeit damit, schlechte Äpfel zu entfernen oder etwas Wachs auf die handelsfähigen Äpfel zu werfen. Als ML-Engineer werden Sie viel Zeit damit verbringen, schlechte Beispiele auszusortieren und wiederverwertbare Beispiele zu bereinigen. Selbst ein paar „schlechte Äpfel“ können einen großen Datensatz verderben.

Skalierung von Featurewerten

Skalieren bedeutet, Gleitkommawerte aus ihrem natürlichen Bereich (z. B. 100 bis 900) in einen Standardbereich (z. B. 0 bis 1 oder -1 bis +1) umzuwandeln. Wenn ein Featuresatz nur aus einem einzigen Feature besteht, bietet die Skalierung wenig oder keinen praktischen Nutzen. Wenn ein Feature-Set jedoch aus mehreren Features besteht, bietet die Feature-Skalierung folgende Vorteile:

  • Hilft dabei, das Gradientenverfahren schneller zu konvergieren.
  • Hilft, den "NaN-Trap" zu vermeiden, bei dem eine Zahl im Modell zu einer NaN wird (z.B. wenn ein Wert während des Trainings die Gleitkommazahl-Genauigkeit überschreitet) und – aufgrund mathematischer Operationen – wird schließlich auch jede andere Zahl im Modell zu einer NaN.
  • Hilft dem Modell, geeignete Gewichtungen für jedes Feature zu erlernen. Ohne Featureskalierung orientiert sich das Modell zu viel an den Features mit einem größeren Bereich.

Sie müssen nicht für jedes Gleitkommafeature genau die gleiche Größe angeben. Es passiert nichts Schreckliches, wenn Feature A von -1 bis +1 und Feature B von -3 bis +3 skaliert wird. Ihr Modell reagiert jedoch schlecht, wenn Feature B von 5.000 auf 100.000 skaliert wird.

Umgang mit extremen Ausreißern

Das folgende Diagramm stellt ein Element namens roomsPerPerson aus dem Dataset „Kalifornien Housing“ dar. Der Wert von roomsPerPerson wurde berechnet, indem die Gesamtzahl der Räume für einen Bereich durch die Bevölkerung dieses Bereichs geteilt wird. Das Diagramm zeigt, dass in den meisten Gebieten Kaliforniens ein oder zwei Räume pro Person zur Verfügung stehen. Sehen wir uns jedoch die x-Achse an.

Ein Diagramm mit ZimmernProPerson, in dem sich fast alle Werte zwischen 0 und 4 befinden, aber es gibt einen recht langen Abschnitt, der bis zu 55 Räume pro Person reicht.

Abbildung 4. Ein verrrrry lonnnnnnng tail.

Wie können wir den Einfluss dieser extremen Ausreißer minimieren? Eine Möglichkeit wäre, das Log jedes Werts zu erfassen:

Ein Diagramm von log(roomsPerPerson), in dem 99% der Werte zwischen etwa 0,4 und 1,8 liegen, aber es gibt immer noch eine längliche Variante, die bis etwa 4,2 reicht.

Abbildung 5. Die logarithmische Skalierung hinterlässt immer noch einen Ausläufer.

Die Logskalierung funktioniert etwas besser, aber es gibt immer noch einen großen Teil der Ausreißerwerte. Wählen wir einen weiteren Ansatz aus. Was passiert, wenn wir den Maximalwert von roomsPerPerson einfach auf einen beliebigen Wert, z. B. 4,0, „begrenzen“ oder „kürzen“?

Ein Diagramm der ZimmerProPerson, in dem alle Werte zwischen -0,3 und 4,0 liegen. Die Parzelle ist glockenförmig, aber bei 4,0 gibt es einen ungewöhnlichen Hügel

Abbildung 6. Featurewerte werden bei 4,0 begrenzt

Die Begrenzung des Featurewerts auf 4,0 bedeutet nicht, dass alle Werte größer als 4,0 ignoriert werden. Es bedeutet vielmehr, dass alle Werte, die größer als 4,0 waren, jetzt zu 4,0 werden. Das erklärt den witzigen Anstieg bei 4.0. Trotz dieses Anstiegs ist der skalierte Featuresatz jetzt nützlicher als die Originaldaten.

Gruppieren

Das folgende Diagramm zeigt die relative Verbreitung von Häusern in verschiedenen Breiten in Kalifornien. Beachten Sie das Clustering: Los Angeles liegt ungefähr auf Breitengrad 34 und San Francisco ungefähr auf Breitengrad 38.

Ein Grundstück mit Häusern pro Breitengrad. Das Diagramm ist sehr unregelmäßig und enthält Drums um die Breitengrade 36 und enorme Spitzen um die Breitengrade 34 und 38 herum.

Abbildung 7. Häuser pro Breitengrad.

Im Dataset ist latitude ein Gleitkommawert. Es ist jedoch nicht sinnvoll, latitude in unserem Modell als Gleitkommafunktion darzustellen. Das liegt daran, dass keine lineare Beziehung zwischen Breiten- und Gebäudewerten besteht. Beispielsweise sind Häuser mit dem Breitengrad 35 nicht \(\frac{35}{34}\) teuer (oder günstiger) als Häuser mit dem Breitengrad 34. Trotzdem sind einzelne Breitengrade wahrscheinlich ein ziemlich guter Prädiktor für Hauswerte.

Um den Breitengrad zu einem hilfreichen Prädiktor zu machen, teilen wir die Breitengrade wie in der folgenden Abbildung gezeigt in „bins“ auf:

Ein Grundstück mit Häusern pro Breitengrad. Das Diagramm ist in

Abbildung 8. Gruppierung von Werten.

Wir haben jetzt elf verschiedene boolesche Merkmale (LatitudeBin1, LatitudeBin2, ..., LatitudeBin11) anstelle eines einzelnen Gleitkommafeatures. 11 separate Elemente sind etwas weniger elegant. Deshalb möchten wir sie zu einem Vektor mit 11 Elementen vereinen. Auf diese Weise können wir den Breitengrad 37,4 wie folgt darstellen:

[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

Dank des Binnings kann unser Modell jetzt völlig unterschiedliche Gewichtungen für jeden Breitengrad lernen.

Scrubbing

Bisher haben wir davon ausgegangen, dass alle zum Trainieren und Testen verwendeten Daten vertrauenswürdig sind. In der Praxis sind viele Beispiele in Datensätzen aus mindestens einem der folgenden Gründe unzuverlässig:

  • Ausgelassene Werte: Eine Person hat z. B. vergessen, einen Wert für das Alter eines Hauses einzugeben.
  • Doppelte Beispiele. Dies ist beispielsweise der Fall, wenn ein Server versehentlich zweimal dieselben Logs hochgeladen hat.
  • Schlechte Labels. Zum Beispiel hat eine Person ein Bild einer Eiche falsch mit einem Ahorn beschriftet.
  • Falsche Featurewerte. Zum Beispiel hat jemand eine zusätzliche Ziffer eingegeben oder ein Thermometer stand in der Sonne.

Sobald sie erkannt wurden, "korrigieren" Sie in der Regel fehlerhafte Beispiele, indem Sie sie aus dem Dataset entfernen. Um ausgelassene Werte oder doppelte Beispiele zu erkennen, können Sie ein einfaches Programm schreiben. Es kann viel schwieriger sein, ungültige Featurewerte oder Labels zu erkennen.

Neben der Erkennung fehlerhafter einzelner Beispiele müssen Sie auch ungültige Daten in der Zusammenfassung erkennen. Histogramme sind eine gute Möglichkeit, um aggregierte Daten zu visualisieren. Außerdem können Statistiken wie die folgenden hilfreich sein:

  • Maximum und Minimum
  • Mittel- und Medianwert
  • Standardabweichung

Erstellen Sie gegebenenfalls Listen mit den häufigsten Werten für diskrete Merkmale. Entspricht beispielsweise die Anzahl der Beispiele mit country:uk der erwarteten Anzahl. Soll language:jp wirklich die häufigste Sprache in Ihrem Dataset sein?

Daten analysieren

Halte dich dabei an diese Regeln:

  • Überlege dir, wie deine Daten deiner Meinung nach aussehen sollten.
  • Überprüfen Sie, ob die Daten diese Erwartungen erfüllen (oder dass Sie erklären können, warum dies nicht der Fall ist).
  • Prüfen Sie noch einmal, ob die Trainingsdaten mit anderen Quellen übereinstimmen, z. B. Dashboards.

Gehen Sie mit Ihren Daten so sorgfältig wie mit geschäftskritischem Code um. Gutes ML basiert auf guten Daten.

Weitere Informationen

Regeln des maschinellen Lernens, ML-Phase II: Feature Engineering