2016-03-21 9 views
0

Ich versuche, XGBOOST-Modell auf Multiclass-Vorhersage Problem anzupassen, und wollte caret zu Hyperparameter-Suche verwenden. das Paket zu testen, ich den folgenden Code verwendet, und es dauert dauert 20 Sekunden, wenn ich train Objekt mit trainControlWarum wird "xgbTree" in caret so langsam mit trainControl verwendet?

# just use one parameter combination 
xgb_grid_1 <- expand.grid(
    nrounds = 1, 
    eta = 0.3, 
    max_depth = 5, 
    gamma = 0, 
    colsample_bytree=1, 
    min_child_weight=1 
) 
# train 
xgb_train_1 = train(
    x = as.matrix(sparse_train), 
    y = conversion_tbl$y_train_c , 
    trControl = trainControl(method="none", classProbs = TRUE, summaryFunction = multiClassSummary), 
    metric="logLoss", 
    tuneGrid = xgb_grid_1, 
    method = "xgbTree" 
) 

jedoch nicht liefern, wenn ich train mit einem trainControl Objekt liefern, wird der Code nie finished..or eine lange Zeit (zumindest kraft es Ziel für 15 Minuten.

xgb_trcontrol_1 <- trainControl(
    method = "cv", 
    number = 2, 
    verboseIter = TRUE, 
    returnData = FALSE, 
    returnResamp = "none",           
    classProbs = TRUE,           
    summaryFunction = multiClassSummary 
) 
xgb_train_1 = train(
    x = as.matrix(sparse_train), 
    y = conversion_tbl$y_train_c , 
    trControl = xgb_trcontrol_1, 
    metric="logLoss", 
    tuneGrid = xgb_grid_1, 
    method = "xgbTree" 
) 

Warum ist das?

FYI, meine Datengröße

dim(sparse_train) 
[1] 702402  36 
+0

Haben Sie ein reproduzierbares Beispiel? –

Antwort

5

Ihre trainControl Objekte sind unterschiedlich.

Im ersten trainControl-Objekt lautet die Methode method="none". Im zweiten trainControl-Objekt lautet die Methode method="cv" und number=2. Im zweiten Objekt führen Sie also eine zweifache Kreuzvalidierung durch, die länger dauert als eine Kreuzvalidierung.

0

Eine andere Sache, die Sie versuchen können, ist nthread = 1 zum caret::train() Aufruf hinzuzufügen.

Sowohl XGBoost als auch Caret versuchen nach Möglichkeit, parallele/Multicore-Verarbeitung zu verwenden, und in der Vergangenheit habe ich festgestellt, dass dies (stillschweigend) zu viele Threads verursacht, die Ihren Rechner gedrosselt haben.

Wenn Caret zur sequentiellen Verarbeitung von Modellen angegeben wird, wird das Problem minimiert und es bedeutet, dass nur xgboost Threads erzeugt.