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.
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:
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“?
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.
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:
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