LightGBM-Ergebnisse sind je nach Reihenfolge der Daten unterschiedlich

8

Ich habe zwei Datensätze A und B, die hinsichtlich Anzahl der Spalten, Name der Spalten und Werte genau gleich sind. Der einzige Unterschied ist die Reihenfolge dieser Spalten. Anschließend trainiere ich das LightGBM-Modell für jeden der beiden Datensätze mit den folgenden Schritten

  1. Teilen Sie jeden Datensatz in Training und Test ein (verwenden Sie für A und B den gleichen zufälligen Startwert und das gleiche Verhältnis).
  2. Belassen Sie die Hyperparameter als Standard
  3. Stellen Sie einen Zufallszustand als feste Zahl ein (zur Reproduktion)
  4. Optimieren Sie die Lernrate mithilfe einer Rastersuche
  5. Trainieren Sie ein LightGBM-Modell auf dem Trainingsset und testen Sie es auf dem Testset
  6. Die Lernrate mit der besten Leistung am Testsatz wird ausgewählt

Die Ausgabemodelle für die beiden Datensätze sind sehr unterschiedlich, weshalb ich der Meinung bin, dass die Reihenfolge der Spalten die Leistung des Modelltrainings mit LightGBM beeinflusst.

Wissen Sie, warum dies der Fall ist?

Duy Bui
quelle

Antworten:

6

Eine mögliche Erklärung ist folgende:

Wenn sich die Reihenfolge der Spalten unterscheidet, gibt es einen kleinen Unterschied in der Vorgehensweise.

LightGBM, XGBoost, CatBoost wählen unter anderem in jedem Schritt des Trainings verschiedene Spalten aus den Funktionen in Ihrem Datensatz aus.

Die Auswahl dieser Spalten erfolgt nach dem Zufallsprinzip: Angenommen, Ihr Datensatz enthält 20 Spalten. Der Stammknoten wählt die Merkmale 1, 3 und 18 aus. In beiden Datensätzen unterscheiden sich die Merkmale 1, 3 und 18 in beiden möglichen Datensätzen. Dies wird wiederholt durchgeführt und in jedem Schritt wirkt sich eine Zufälligkeit auf Ihr Endergebnis aus.

Juan Esteban de la Calle
quelle
Wie können wir diese Zufälligkeit steuern, wenn der Algorithmus eine Teilmenge von Features auswählt, um einen Entscheidungsbaum zu erstellen? Das war auch mein einziger Gedanke, um diese Situation zu beantworten. Wenn wir immer alle Features pro Baum auswählen, berechnet der Algorithmus außerdem Gini (oder ähnliches), um die Feature-Wichtigkeit bei jedem Schritt zu berechnen, wodurch keine Zufälligkeit entsteht.
Duy Bui
lightgbmErmöglicht dem Benutzer das Festlegen der zufälligen Startwerte für die Zeilen- und Spaltenabtastung.
Brads
1
@bradS: Ich habe den Startwert im LightGBM nicht als Hyperparameter festgelegt, aber ich habe ihn erneut überprüft und der Startwert sollte standardmäßig als feste Zahl festgelegt werden. Das heißt, es sollte das gleiche Ergebnis haben, was hier nicht der Fall ist. lightgbm.readthedocs.io/en/latest/Parameters.html
Duy Bui
3

Während die Reihenfolge der Daten theoretisch keine Rolle spielt, ist sie in der Praxis wichtig. In Anbetracht der Tatsache, dass Sie Schritte unternommen haben, um die Reproduzierbarkeit sicherzustellen, ändert eine unterschiedliche Reihenfolge der Daten Ihre Split-Logik für Zugtests (es sei denn, Sie wissen mit Sicherheit, dass die Zug- und Testsätze in beiden Fällen genau gleich sind). Obwohl Sie nicht angeben, wie Sie die Daten aufteilen, ist es sehr wahrscheinlich, dass eine bestimmte Auswahl von Datenpunkten die Maschine gegenüber Ausreißern robuster macht und daher eine bessere Modellleistung bietet. In dem Fall, dass die Zug- und Testdaten in beiden Fällen gleich sind, müssten Sie wahrscheinlich prüfen, ob es eine Saatgut- / Reproduzierbarkeitsmaßnahme (in einem Teil Ihres Codes) gibt, die Sie nicht getroffen haben.

gbdata
quelle
Entschuldigung, das habe ich vergessen zu erwähnen. Aktualisiert meine Anfrage. Zug und Test sind genau gleich, weil ich sie mit demselben zufälligen Samen aufgeteilt habe.
Duy Bui
@DuyBui ein paar Vorschläge zum Ausprobieren: 1) Wenn Sie Gpu verwenden, setzen Sie gpu_use_dp auf true Von: github.com/Microsoft/LightGBM/pull/560#issuecomment-304561654 2) Setzen Sie num_threads auf eine feste Zahl Von: github.com/ Microsoft / LightGBM / Issues / 632 ;
gbdata