2016-03-21 17 views
0

xgboost modelini çoklu öbek tahmini sorununa sığdırmaya çalışıyorum ve hiperparametre araması yapmak için caret kullanmak istedim. Ben trainControl ile train nesneyi temin olmadığında paketini test etmek için, aşağıdaki kodu kullanılmış ve bu sürer Bir trainControl nesnesi ile train kaynağı olduğunda, kod geçmez,Neden cartel'de "xgbTree" öğesini trainControl ile bu kadar yavaş kullanıyorsunuz?

# 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" 
) 

Ancak 20 saniye sürer finished..or (uzun sürüyor en azından 15 dakika boyunca 'bitirmek dint.

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" 
) 

bunun nedeni nedir?

Bilginize, benim veri boyutu

olduğunu
dim(sparse_train) 
[1] 702402  36 
+0

Tekrarlanabilir bir örneğiniz var mı? –

cevap

5

TrainControl nesneleriniz farklıdır.

İlk trenControl nesnesinde, yöntem method="none" şeklindedir. İkinci trainControl nesnesinde, yöntem method="cv" ve number=2'dur. Yani, ikinci nesnede, daha sonra bir çapraz geçerliliği çalıştırmayan, iki katlı bir çapraz doğrulama çalıştırıyorsunuz.

0

Denediğiniz başka bir şey de nthread = 1 numaralı telefonu caret::train() aramasına eklemektir.

Hem XGBoost hem de Caret, mümkün olduğunda paralel/çok çekirdekli işlemeyi kullanmayı dener ve geçmişte bunu (sessizce) bulamadıkça, makinenizi boğmak için çok fazla iş parçacığı buldum. Modelleri sırayla işlemek için caret'i sorunu en aza indirir ve yalnızca xgboost'un yumurtlama iş parçacıkları olacağı anlamına gelir.