在训练模型的时候,有时候需要对同一个模型,采用不同条件的训练,这时候需要使用多重for循环将不同的条件放入到同一个模型中,模型的整体训练速度比较慢,在网上查到一列资料,例如foreach + doParallel 多核并行方案,但是好像不能解决多重for 循环的问题? 有没有哪位朋友有比较好的解决方案。
a = rep(1:3,each=2) b = rep(5:6,times=3) dataframe = data.frame('a'=a,'b'=b) dataframe apply(dataframe, 1, function(x){ a1 = x[[1]] b1 =x[[2]] return(c(a1,b1)) })
可以吗?
CMCai0104 这里不仅仅是 几个参数的问题,还牵涉到数据集选取,模型的参数,参数的长度非常大,导致训练速度比较慢。
不必要多重循环,可以像楼上一样将所有参数的组合构成一个参数的数据框(参考expand.grid())。这样对参数数据框做一层循环或者apply一次就够了,然后就可以并行了
expand.grid()
有一个 mlr 调参工具可以了解下 https://pat-s.github.io/mlr/articles/tutorial/devel/tune.html
多个参数应该也没问题,dataframe多加几列好了。
个人感觉问题不大,函数里面套函数、函数里面选数据集都可以。
具体没看到问题不好说。
至于速度可以网上找找提速的小技巧,我推荐别用原生r,用Microsoft r可以默认使用多核(避免原生r语言写多核的麻烦)。
遇到类似问题,要更换数据集,几十个,都需要作随机森林模型训练,也是写循环实现吗?每一个模型保存的命名该怎么循环设置?
foreach循环在10年前几乎刚发布后就支持嵌套了,请看文档 ……
https://cran.r-project.org/web/packages/foreach/vignettes/nested.html