r - 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 秒)。
难道我做错了什么?有什么关于提高速度的建议吗?谢谢!
解决方案
推荐阅读
- python - CSV 文件可以。不能转换成浮点数
- java - 从数组中添加年份 + 平均降雨量
- r - IF(SUMPRODUCT(MAX 公式使用 R
- javascript - 给定一个露营地数组,一种视图类型为字符串,派对人数为数字,返回一个包含匹配站点的露营地编号的数组
- salesforce - 如何为具有相同字段 Level_1__c、Level_2__c、Level_3__c 的 2 个自定义对象编写 SOQL
- javascript - 将值从一个函数传递到另一个函数
- aws-lambda - 对 NodeJS lambda 使用 Typescript 而不是 Javascript 会增加冷启动时间吗?
- javascript - Vue.js - 显示 base64 图像字符串时出错(431,请求标头字段太大)
- azure - 在 Azure 上为静态网站添加自定义域
- mongodb - Docker-compose 缓存我的 mongodb 密码