Ich verwende das Party- Paket in R mit 10.000 Zeilen und 34 Features, und einige Factor-Features haben mehr als 300 Levels. Die Rechenzeit ist zu lang. (Es hat bis jetzt 3 Stunden gedauert und ist noch nicht fertig.)
Ich möchte wissen, welche Elemente einen großen Einfluss auf die Rechenzeit einer zufälligen Gesamtstruktur haben. Gibt es Faktoren mit zu vielen Ebenen? Gibt es optimierte Methoden zur Verbesserung der RF-Rechenzeit?
r
random-forest
Chenghao Liu
quelle
quelle
Da randomForest eine Sammlung unabhängiger Wagen ist, die auf einer zufälligen Untergruppe von Features und Datensätzen basieren, eignet es sich für die Parallelisierung. Die
combine()
Funktion im randomForest-Paket setzt unabhängig trainierte Wälder zusammen. Hier ist ein Spielzeugbeispiel. In der Antwort von @mpq heißt es, dass Sie nicht die Formelnotation verwenden sollten, sondern einen Datenrahmen / eine Variablenmatrix und einen Ergebnisvektor übergeben sollten. Ich habe sie schamlos aus den Unterlagen geholt.Ich habe die randomForest-Kombinationsfunktion an den ähnlich benannten .combine-Parameter übergeben (der die Funktion am Ausgang der Schleife steuert).
Bearbeiten:
Nach dem erneuten Lesen des Beitrags stelle ich fest, dass ich nicht über das 34+ Faktor-Problem spreche. Eine völlig unüberlegte Antwort könnte darin bestehen, sie als binäre Variablen darzustellen. Das ist jeder Faktor eine Spalte, die mit einem 0/1-Level-Faktor bezüglich ihrer Anwesenheit / Nicht-Anwesenheit codiert ist. Indem Sie bei unwichtigen Faktoren eine variable Auswahl treffen und diese entfernen, können Sie verhindern, dass der Funktionsbereich zu groß wird.
quelle
Ich würde ein paar Links vorschlagen:
1) Shrink number of levels einer Faktorvariablen ist ein Link zu einer Frage,
stackoverflow
um sich mit einem ähnlichen Problem während der Verwendung desrandomForest
Pakets zu befassen . Insbesondere werden nur die am häufigsten vorkommenden Ebenen verwendet und allen anderen, weniger häufig vorkommenden Ebenen eine neue Ebene zugewiesen.Die Idee dazu kam von hier: 2009 KDD Cup Slow Challenge . Die Daten für diesen Wettbewerb hatten viele Faktoren mit vielen Ebenen und es werden einige der Methoden erläutert, mit denen die Daten von 50.000 Zeilen auf 15.000 Spalten reduziert wurden, um auf einem Laptop mit 2 Kernen und 2 GB RAM ausgeführt zu werden.
Mein letzter Vorschlag wäre, das oben vorgeschlagene Problem parallel auf einer Amazon EC2-Instanz mit hoher CPU-Auslastung auszuführen.
quelle
Ich kann nicht mit der Geschwindigkeit bestimmter Algorithmen in R sprechen, aber es sollte offensichtlich sein, was zu langer Rechenzeit führt. Für jeden Baum in jedem Zweig sucht CART nach der besten binären Aufteilung. Für jedes der 34 Features werden die durch die einzelnen Ebenen der Variablen gegebenen Aufteilungen am häufigsten betrachtet. Multiplizieren Sie die Laufzeit für jede Teilung in einem Baum mit der Anzahl der Zweige im Baum und multiplizieren Sie diese dann mit der Anzahl der Bäume im Wald, und Sie haben eine lange Laufzeit. Wer weiß? Vielleicht kann es sogar mit einem schnellen Computer Jahre dauern, bis dies erledigt ist?
Ich denke, die beste Möglichkeit, die Dinge zu beschleunigen, besteht darin, einige der Ebenen so zusammenzufassen, dass jede Variable nur noch 3 bis 5 statt bis zu 300 Ebenen enthält Informationen in Ihren Daten.
Danach könnten Sie vielleicht nachsehen, ob es einen cleveren Algorithmus gibt, der die Suchzeit für das Teilen an jedem Knoten der einzelnen Bäume beschleunigen kann. es könnte sein, dass die geteilte Suche an einem bestimmten Baum eine Wiederholung einer Suche ist, die bereits für einen vorherigen Baum durchgeführt wurde. Wenn Sie also die Lösungen der vorherigen Teilungsentscheidungen speichern und feststellen können, wann Sie sie wiederholen, kann diese Strategie möglicherweise ein wenig Rechenzeit einsparen.
quelle