Best Practices für maschinelles Lernen für große Datenmengen

9

Ich stehe kurz vor meinem Abschluss und hatte etwas über maschinelles Lernen gelernt und damit Forschungsprojekte durchgeführt. Ich frage mich über die Best Practices in der Branche, wenn maschinelle Lernaufgaben mit großen Datenmengen (wie 100 GB oder TB) ausgeführt werden. Schätzen Sie, ob andere Datenwissenschaftler ihre Erfahrungen teilen können. Hier sind meine Fragen:

  1. Offensichtlich dauert das Trainieren sehr großer Datensätze länger (kann Tage oder Wochen dauern). Oft müssen wir verschiedene Modelle (SVM, Neuronales Netzwerk usw.) trainieren, um ein besseres Leistungsmodell zu vergleichen und zu finden. Ich vermute, dass wir in Industrieprojekten die Ergebnisse so schnell wie möglich erzielen wollen, aber die beste Leistung erzielen. Gibt es Tipps zur Verkürzung der Schulungs- und Testzeit? Wenn Sie die Untermenge des Datensatzes empfehlen, würde mich interessieren, wie Sie den Datensatz am besten unterteilen können, um alle oder die meisten Szenarien aus dem Datensatz abzudecken.
  2. Wir wissen, dass die Durchführung einer Kreuzvalidierung besser ist, da dies die Überanpassung verringern kann. Die Kreuzvalidierung benötigt jedoch auch Zeit zum Trainieren, und das mit Kreuzvalidierung trainierte Modell wird möglicherweise nicht direkt implementiert (aus der Erfahrung von Python Sklearn: Ich muss das Modell nach dem Kreuzvalidierungstest erneut mit dem Datensatz trainieren, damit es implementiert wird). Führen Sie normalerweise eine Kreuzvalidierung in Ihren Big-Data-Projekten durch oder kommen Sie mit der Aufteilung der Zugtests zurecht?

Schätzen Sie das Feedback.

iLoeng
quelle

Antworten:

8

Ich werde einige Praktiken auflisten, die ich nützlich gefunden habe. Ich hoffe, dies hilft:

  1. Unabhängig davon, ob die Daten sehr groß sind oder nicht, ist eine Kreuzvalidierung ein Muss beim Erstellen eines Modells. Wenn dies länger dauert, als ein Endverbraucher warten möchte, müssen Sie möglicherweise seine Erwartungen zurücksetzen oder schnellere Hardware / Software zum Erstellen des Modells erwerben. Überspringen Sie jedoch nicht die Kreuzvalidierung. Das Zeichnen von Lernkurven und die Kreuzvalidierung sind wirksame Schritte, die uns dabei helfen, Fehler früher im Prozess zu erkennen und zu korrigieren. Ich habe Fälle erlebt, in denen ein einfacher Zugtestsatz keine Probleme aufzeigt, bis ich Kreuzfaltenvalidierungen durchführe und eine große Abweichung in der Leistung des Algorithmus bei verschiedenen Falten feststelle.

  2. Entfernen Sie vor der Größenanpassung eines Datensatzes die Datensätze mit fehlenden Werten für Schlüsselvariablen und Ausreißer, Spalten mit stark korrelierten Variablen und Varianzvariablen nahe Null. Auf diese Weise erhalten Sie eine viel bessere Schätzung des tatsächlich verwendbaren Datensatzes. Manchmal haben Sie möglicherweise nur einen Bruchteil des verfügbaren Datensatzes, der tatsächlich zum Erstellen eines Modells verwendet werden kann.

  3. Bei der Größenanpassung eines Datasets zum Erstellen eines Modells ist es einfacher, die Rechenressourcen zu schätzen, wenn Sie das Dataset in Zeilen und Spalten und die Speichergröße der endgültigen numerischen Matrix auflisten. Da jeder Algorithmus für maschinelles Lernen letztendlich den Datensatz in eine numerische Matrix konvertieren wird, ist die Aufzählung der Datensatzgröße in GB / TB der rohen Eingabedaten (die meistens aus Zeichenfolgen / nominalen Textvariablen usw. bestehen können) häufig irreführend Der Datensatz scheint entmutigender und gigantischer zu sein als er ist.

  4. Wenn Sie die endgültige nutzbare Größe Ihres Datensatzes kennen (oder schätzen), prüfen Sie, ob Sie über eine geeignete Maschine verfügen, um diese in den Speicher zu laden und das Modell zu trainieren. Wenn Ihre Datensatzgröße kleiner ist als der von der Software verfügbare / verwendbare Speicher, müssen Sie sich keine Gedanken mehr über die Größe machen.

  5. Wenn der Datensatz größer ist als der zum Trainieren eines Modells verfügbare Speicher, können Sie diese Ansätze ausprobieren (ausgehend von den einfachsten zuerst):

    • Verwenden Sie einen Computer mit mehr Speicher: Wenn Sie einen Cloud-Dienstanbieter verwenden, besteht der einfachste Ansatz darin, mehr Speicher bereitzustellen und das Modell wie gewohnt weiter zu erstellen. Versuchen Sie bei physischen Maschinen, zusätzlichen Arbeitsspeicher zu beschaffen. Der Preis sinkt weiter. Wenn Ihr Datensatz so groß bleibt oder mit der Zeit größer wird, ist dies eine gute Investition.
    • Hinzufügen von Knoten zum Cluster: Bei Hadoop- und Spark-basierten Cluster-Computing-Bereitstellungen ist das Training für einen größeren Datensatz so einfach wie das Hinzufügen weiterer Computer zum Cluster.
    • Sehr oft erfordern Klassifizierungsaufgaben ein Training für Daten mit stark unausgeglichenen Klassen. Das Verhältnis von positiven zu negativen Klassen kann manchmal bis zu 1: 1000 oder mehr betragen. Eine einfache Methode zur Verbesserung der Genauigkeit in diesen Fällen besteht darin, entweder die Minderheitsklasse zu über- oder die Mehrheitsklasse zu unterschätzen oder beides zusammen zu tun. Wenn Sie über einen großen Datensatz verfügen, ist eine Unterabtastung der Mehrheitsklasse eine sehr gute Option, um die Genauigkeit Ihres Algorithmus zu verbessern und die Trainingszeit zu verkürzen.
    • Erstellen Sie ein Ensemble: Teilen Sie den Datensatz nach dem Zufallsprinzip auf und schulen Sie mehrere Basislerner für jeden Teil. Kombinieren Sie diese dann, um die endgültige Vorhersage zu erhalten. Dies würde den großen Datensatz am effektivsten nutzen und ein genaueres Modell erzeugen. Sie müssen jedoch mehr Zeit aufwenden, um das Ensemble sorgfältig aufzubauen und sich von den üblichen Gefahren des Ensemblebaus fernzuhalten.
    • Wenn Sie ein Ensemble verwenden, trainieren Sie viele Single-Thread-Modelle parallel. Fast alle ML-Software bietet Funktionen zum Trainieren mehrerer Modelle auf verschiedenen Kernen oder separaten Knoten insgesamt.
    • Bewerten Sie mehrere verschiedene Algorithmen in Bezug auf die Zeit, die benötigt wird, um sie für Ihren spezifischen Datensatz zu trainieren, im Vergleich zu ihrer Genauigkeit. Es gibt zwar keine universelle Antwort, aber ich habe festgestellt, dass SVMs bei der Verwendung von verrauschten Daten viel länger zum Trainieren benötigen als sorgfältig zusammengestellte Ensembles regulierter Regressionsmodelle, aber möglicherweise nur geringfügig genauer in der Leistung sind. Das Trainieren eines gut aufgebauten neuronalen Netzwerks kann im Vergleich zu einem CART-Baum sehr lange dauern, ist jedoch wesentlich genauer als der Baum.
    • Versuchen Sie, den Prozess so weit wie möglich zu automatisieren, um den Zeitaufwand für die Erstellung des Modells zu verringern. Ein paar Stunden für die Automatisierung einer komplexen fehleranfälligen manuellen Aufgabe können Ihr Team hundert Stunden später im Projekt retten.
    • Verwenden Sie, falls verfügbar, die Algorithmusimplementierungen, die Parallelverarbeitung, Sparse-Matrizen und Cache-fähiges Computing verwenden. Diese reduzieren die Verarbeitungszeit erheblich. Verwenden Sie beispielsweise xgboost anstelle einer Single-Core-Implementierung von GBM.
    • Wenn nichts anderes funktioniert, trainieren Sie das Modell mit einem kleineren Datensatz. Wie Emre in seiner Antwort vorgeschlagen hat, verwenden Sie Lernkurven, um die kleinste Stichprobengröße festzulegen, die für das Training des Modells erforderlich ist. Wenn Sie mehr Trainingsaufzeichnungen als diese Größe hinzufügen, wird die Modellgenauigkeit nicht merklich verbessert. Hier ist ein guter Artikel, der diese Situation untersucht - http://web.mit.edu/vondrick/largetrain.pdf .
Sandeep S. Sandhu
quelle
Vielen Dank an @Sandeep für Ihre ausführliche Antwort. Könnten Sie bitte Punkt 3 näher erläutern, in dem der Datensatz in Zeilen und Spalten sowie die Speichergröße der endgültigen numerischen Matrix aufgelistet werden? Bedeutet das, dass Sie die Größe Ihres sauberen Datasets mithilfe von Syntaxen wie "df.values.nbytes" und "df.shape" im Pandas-Datenrahmen ermitteln? Vielen Dank.
iLoeng
Verwenden Sie: df.values.nbytes + df.index.nbytes + df.columns.nbytes
Sandeep S. Sandhu
4

Die Frage ist, wie viele Daten benötigt werden, um Ihr Modell zu sättigen? Um dies festzustellen, können Sie Lernkurven mit unterschiedlichen Datenmengen zeichnen und die Größe möglicherweise um einen konstanten Faktor vergrößern / verkleinern. Wenn eine Schulung aller Daten nicht möglich ist, kann Ihnen die Lernkurve dabei helfen, einen informierten Kompromiss einzugehen.

Die Modellsättigung spielt auch bei der Kreuzvalidierung eine Rolle. Wenn Sie sich nicht der Sättigung nähern, erhalten Sie durch die Verwendung einer kleinen Anzahl von Falten pessimistische Leistungsdaten, da Sie Ihr Modell mit weniger Daten trainieren, als es verwenden kann.

Schließlich und umgekehrt können Sie ein komplexeres Modell verwenden, anstatt die Größe der Daten an das Modell anzupassen.

Willkommen bei DataScience.SE.

Emre
quelle