插入火车射频模型 - 莫名其妙的长时间执行

mak*_*say 4 r package random-forest r-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 
Run Code Online (Sandbox Code Playgroud)

在我看来,执行时间应该只有10倍,因为默认情况下会发生10次交叉验证,而不是单次运行.我没有调整任何参数,但似乎火车自动完成:

> 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
Run Code Online (Sandbox Code Playgroud)

这最多可以解释30倍的差异.但是,它的运行时间要长近100倍.可能的解释是什么?

提前致谢

top*_*epo 10

你没有指定method,trainControl因此它默认为30次迭代的引导程序,因为tuneLength也没有设置,你正在超过3个值mtry.

当您将计算成本乘以90倍时,99.2449倍的加速应该不会出乎意料.

马克斯

  • 谢谢!虽然你可能知道的更好,根据文档,它是25次迭代,而不是30次:`trainControl(method ="boot",number = ifelse(grepl("cv",method),10,25),repeats = ifelse( grepl("cv",方法),1,数字),` (2认同)