首页 > 解决方案 > MLR3 与 cv.glmnet 调优速度

问题描述

我有一个小数据集,我正在尝试训练随机森林和套索模型。如果我从 glmnet 运行 cv.glmnet 它会执行 k 倍 CV 并在 1 秒内找到最佳 lambda。如果我从MLR3设置一个 AutoTuner并以相同的方式训练它,它会花费很长时间计算。我已经指定了 MLR3 的搜索空间和分辨率以匹配来自 cv.glmnet 的搜索空间和分辨率。

start_time <- Sys.time()
cv_model <- cv.glmnet(x, y, nfolds = 5, alpha = 1, family="binomial", type.measure = "deviance", keep = FALSE)
end_time <- Sys.time()
      
end_time - start_time

时间差 0.8357668 秒

task = 
        TaskClassif$new(
          id = 'test', 
          backend = na.omit(test[, ..keep_all]), 
          target = 'tox'
        )

lrn_glmnet <- lrn("classif.glmnet", predict_type="prob")
measure = msr("deviance")
resampling = rsmp("cv", folds = 5)
search_space = ps(s = p_dbl(lower = min(cv_model$lambda), upper = max(cv_model$lambda)))
terminator = trm("none")
tuner = tnr("grid_search", resolution=100)

at = AutoTuner$new(lrn_glmnet, resampling, measure, terminator, tuner, search_space)

start_time <- Sys.time()      
at$train(task)
end_time <- Sys.time()

end_time - start_time

时差 1.107895 分钟

就计算时间而言,这里的差异大约是80 倍。我真的很想使用 MLR3,因为我正在做嵌套 CV,这很容易,我可以一起对学习者进行基准测试,而不依赖于另一个包的内部工作,但这两个数量级是一个非常高的代价(例如,对于 5 个外部折叠的 100 次迭代,我正在查看大约 500 分钟与 500 秒)。

难道我做错了什么?有什么关于提高速度的建议吗?谢谢!

标签: rglmnetmlr3

解决方案


推荐阅读