作者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/m.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