каре поезд рф модель - необъяснимо долгое исполнение

Пытаясь обучить модель случайного леса с помощью пакета Caret, я заметил, что время выполнения необъяснимо велико:

> set.seed = 1;
> n = 500;
> m = 30;
> x = matrix(rnorm(n * m), nrow = n);
> y = factor(sample.int(2, n, replace = T), labels = c("yes", "no"))
> require(caret);
> require(randomForest);
> print(system.time({rf <- randomForest(x, y);}));
   user  system elapsed 
   0.99    0.00    0.98 
> print(system.time({rfmod <- train(x = x, y = y,
+                method = "rf",
+                metric = "Accuracy",
+                trControl = trainControl(classProbs = T)
+ );}));
   user  system elapsed 
  95.83    0.71   97.26 

Мне казалось, что выполнение должно быть только в 10 раз дольше, так как по умолчанию происходит 10-кратная кросс-валидация вместо одного запуска. Я не настраиваю никаких параметров, но кажется, что train делает это автоматически:

> rfmod$results
  mtry  Accuracy       Kappa AccuracySD    KappaSD
1    2 0.4736669 -0.04437013 0.03323485 0.06493845
2   16 0.4818095 -0.03241901 0.03279341 0.06426745
3   30 0.4878361 -0.02149108 0.02956972 0.05936881

Это объяснило бы не более чем 30-кратную разницу. Однако он работает почти в 100 раз дольше. Какое может быть возможное объяснение?

заранее спасибо


person maksay    schedule 21.07.2014    source источник


Ответы (1)


Вы не указываете method в trainControl, поэтому по умолчанию используется 30 итераций начальной загрузки, и, поскольку tuneLength также не было установлено, вы делаете это для 3 значений mtry.

Ускорение в 99,2449 раз не должно быть неожиданным, если вы умножите вычислительные затраты в 90 раз.

Максимум

person topepo    schedule 21.07.2014
comment
Спасибо! Хотя вам виднее, по документации именно 25 итераций, а не 30: trainControl(method = "boot", number = ifelse(grepl("cv", method), 10, 25), repeats = ifelse(grepl("cv", method), 1, number), - person maksay; 21.07.2014