作者MADNUG (就是比你长)
看板R_Language
标题[问题] sapply应用在整个data.fram
时间Wed Sep 30 20:26:36 2015
[问题类型]:
效能谘询(我想让R 跑更快)
[问题叙述]:
最近在用cross-validation来model selection
在目前的样本随机抽取(with replacement)N笔後配适模型
上述步骤重复100次,
接着N改为N+5,再重复100次,如此N+5k一直做下去
目前是用for-loop
但觉得跑得好慢
於是在想说不知是否能用apply族的函数
但看了说明,大多是对data.fram的每个栏执行function
好像没发现有对整个data.fram执行function
故上来请教一下
有想过不然创建个维度100的LIST,每个LIST都是一整个data.fram
不过还没试不知道可不可行= =
[程式范例]:
http://pastebin.com/avAHvyhd
[环境叙述]:
R version 3.2.2 (2015-08-14)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8 x64 (build 9200)
[关键字]:
选择性,也许未来有用
--
○ 啊~ ○○ 咿~ ○ 喔~ 嗯~
ㄥ︹○ ︽〕 ○\︿ ○
》 ﹨︿ ○︿/︿ ○≦\_
(十面埋伏) (针锋相对) (腹背受敌) (腾云驾雾)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 184.6.253.131
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1443616001.A.654.html
1F:→ andrew43: 运算过程已经向量化了吗? 09/30 20:36
2F:→ andrew43: 你可以先试着用 list 与 lapply() 看看好不好做 09/30 20:43
3F:→ andrew43: 这大概是最简单的一个选项。 09/30 20:43
4F:→ andrew43: 另外也可以关心一下速度瓶颈是哪个部份, 再来针对它改. 09/30 20:44
5F:→ andrew43: 如果是bootstap慢, 可以改成同N者共享一个大data frame 09/30 20:47
6F:→ andrew43: 如果是fitting慢, 大概换一台电脑会更有帮助。 09/30 20:47
7F:→ andrew43: 看了一下, 应该是卡 lm() 和 step(). 有考虑平行运算吗? 09/30 20:54
8F:→ MADNUG: 平行运算呀?这没想过,回去研究看看! 09/30 21:11
9F:→ andrew43: 先「手动」平行运算: 把 for loop 对半, 同时用二个 R 09/30 21:12
10F:→ andrew43: session 跑... (我怎麽会有这麽废的想法...) 09/30 21:13
11F:→ MADNUG: 抱歉在内文没打清楚,应该是每次在dataframe中抽取N rows 09/30 21:14
12F:→ MADNUG: 做模型配适 09/30 21:14
13F:→ andrew43: 可以请你提供原本的 data frame 的 dim() 大概多少? 09/30 21:26
14F:→ andrew43: 这样要测试可能会比较一致 09/30 21:26
data fram的dim()是428*23, 全都是numerical
15F:→ MADNUG: 晚点下课回去更新一下,感谢! 09/30 22:56
16F:→ celestialgod: 1. 先换成RRO 矩阵计算快 09/30 23:11
17F:推 celestialgod: 2. 储存的变数都要先preallocate memory 09/30 23:12
18F:→ celestialgod: 3. 能够向量化的计算就不要用回圈 09/30 23:12
19F:推 celestialgod: 4. 使用snowfall来平行 09/30 23:12
20F:→ celestialgod: 2, 4点版上都有文章 去找都有收录 09/30 23:12
21F:→ celestialgod: 你只是lm 换RRO就很快了 09/30 23:14
22F:→ celestialgod: 平行的话内回圈可以平行 09/30 23:15
第2点有做到
其余三点等等来研究研究,晚点若研究出来就来更新一下XD
谢谢两位建议的方向!
※ 编辑: MADNUG (184.6.253.131), 10/01/2015 00:58:40
23F:→ andrew43: 题外话,记得别习惯把变数取名叫T,太容易误会了。 10/01 06:48
24F:推 Edster: 请问这种在资料集中重复抽取子集的方式来最佳化 10/01 10:37
25F:→ Edster: 是你自己想的吗,还是大家都公认这样做? 10/01 10:38
26F:→ Edster: 总觉得应该有更聪明的演算法来抽取资料子集。 10/01 10:39
27F:→ Edster: 我讲的是演算法,不是coding 10/01 10:40
28F:→ MADNUG: 我这是应用k-fold cross validation,在验证模型有效性时 10/01 12:43
29F:→ MADNUG: 常用到的方法,但我不确定在抽取上是否有效率更佳的解法 10/01 12:43
30F:→ andrew43: k-fold c.v. 现在很流行,和其它蒙地卡罗方法的目的 10/01 13:17
31F:→ andrew43: 类似,就是要robust。 10/01 13:17
32F:→ andrew43: 似乎已经流行到变成主流方法了。 10/01 13:19
33F:→ celestialgod: 疑? k-fold cross validation不是用来选模吗 10/01 16:54
34F:→ celestialgod: 跟robust好像没关系 10/01 16:54
35F:→ celestialgod: 100个sample loocv还是不会这样而有robust性质吧 10/01 16:56
36F:→ celestialgod: loocv: leave-one-out cross validation 10/01 16:58
37F:→ andrew43: 嗯,那我可能有误会了什麽,谢谢。 10/01 20:58
38F:→ andrew43: 我把不靠母数的方法都过度理解成目的是为了robust 10/01 21:05
39F:→ andrew43: 才这样以为。 10/01 21:05
40F:→ MADNUG: 请问可以提示一下 PRO 的关键字吗? 在板上搜不到相关资讯 10/01 21:16
41F:→ andrew43: R 效能优化 里 13 10/01 21:33
42F:→ MADNUG: Got it! Thank you so much! 10/01 21:37