【问题标题】:caret train rf model - inexplicably long execution插入符号训练 rf 模型 - 莫名其妙的长时间执行
【发布时间】:2014-09-11 12:37:25
【问题描述】:

在尝试使用 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 倍。可能的解释是什么?

提前致谢

【问题讨论】:

    标签: r package random-forest r-caret


    【解决方案1】:

    您没有在 trainControl 中指定 method,因此它默认为引导程序的 30 次迭代,并且由于也未设置 tuneLength,因此您在 mtry 的 3 个值上执行此操作。

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

    最大

    【讨论】:

    • 谢谢!尽管您可能知道得更好,但根据文档,它是 25 次迭代,而不是 30 次:trainControl(method = "boot", number = ifelse(grepl("cv", method), 10, 25), repeats = ifelse(grepl("cv", method), 1, number),
    猜你喜欢
    • 2018-10-02
    • 2019-03-12
    • 2021-08-19
    • 2019-01-09
    • 1970-01-01
    • 2019-08-30
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多