Parallele Verarbeitung mit xgboost und caret

Ich möchte den Modellanpassungsprozess für xgboost parallelisieren, während Caret verwendet wird. Nach dem, was ich in xgboost's @ gesehen haDokumentatio, dasnthreader @ -Parameter steuert die Anzahl der Threads, die beim Anpassen der Modelle verwendet werden sollen, im Sinne einer parallelen Erstellung der Bäume. Caret'strainie @ -Funktion führt eine Parallelisierung durch, indem beispielsweise ein Prozess für jede Iteration in einem k-fachen CV ausgeführt wird. Ist dieses Verständnis richtig, wenn ja, ist es besser:

Registrieren Sie die Anzahl der Kerne (z. B. mit demdoMC Paket und dasregisterDoMC Funktion), setzenthread=1 über die Zugfunktion von caret, damit dieser Parameter an xgboost übergeben wird, setallowParallel=TRUE imtrainControl, und lasscaret die Parallelisierung für die Kreuzvalidierung vornehmen; odeDisable Caret-Parallelisierung allowParallel=FALSE und keine parallele Backend-Registrierung) und setnthread auf die Anzahl der physischen Kerne, sodass die Parallelisierung ausschließlich in xgboost enthalten ist.

Oder gibt es keinen "besseren" Weg, um die Parallelisierung durchzuführen?

Bearbeiten Ich habe den von @topepo vorgeschlagenen Code mit @ ausgeführtuneLength = 10 undsearch="random" und @ angebnthread=1 in der letzten Zeile (ansonsten verstehe ich, dass xgboost Multithreading verwenden wird). Es gibt die Ergebnisse, die ich habe:

xgb_par[3]
elapsed  
283.691 
just_seq[3]
elapsed 
276.704 
mc_par[3]
elapsed 
89.074 
just_seq[3]/mc_par[3]
elapsed 
3.106451 
just_seq[3]/xgb_par[3]
elapsed 
0.9753711 
xgb_par[3]/mc_par[3]
elapsed 
3.184891

m Ende stellte sich heraus, dass es sowohl für meine Daten als auch für diesen Testfall eine bessere Wahl hinsichtlich der Laufzeit war, Caret die Parallelisierung vornehmen zu lasse

Antworten auf die Frage(2)

Ihre Antwort auf die Frage