[問題] sapply應用在整個data.fram

看板R_Language作者 (就是比你長)時間8年前 (2015/09/30 20:26), 8年前編輯推噓3(3039)
留言42則, 4人參與, 最新討論串1/1
[問題類型]: 效能諮詢(我想讓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://www.ptt.cc/bbs/R_Language/M.1443616001.A.654.html

09/30 20:36, , 1F
運算過程已經向量化了嗎?
09/30 20:36, 1F

09/30 20:43, , 2F
你可以先試著用 list 與 lapply() 看看好不好做
09/30 20:43, 2F

09/30 20:43, , 3F
這大概是最簡單的一個選項。
09/30 20:43, 3F

09/30 20:44, , 4F
另外也可以關心一下速度瓶頸是哪個部份, 再來針對它改.
09/30 20:44, 4F

09/30 20:47, , 5F
如果是bootstap慢, 可以改成同N者共享一個大data frame
09/30 20:47, 5F

09/30 20:47, , 6F
如果是fitting慢, 大概換一台電腦會更有幫助。
09/30 20:47, 6F

09/30 20:54, , 7F
看了一下, 應該是卡 lm() 和 step(). 有考慮平行運算嗎?
09/30 20:54, 7F

09/30 21:11, , 8F
平行運算呀?這沒想過,回去研究看看!
09/30 21:11, 8F

09/30 21:12, , 9F
先「手動」平行運算: 把 for loop 對半, 同時用二個 R
09/30 21:12, 9F

09/30 21:13, , 10F
session 跑... (我怎麼會有這麼廢的想法...)
09/30 21:13, 10F

09/30 21:14, , 11F
抱歉在內文沒打清楚,應該是每次在dataframe中抽取N rows
09/30 21:14, 11F

09/30 21:14, , 12F
做模型配適
09/30 21:14, 12F

09/30 21:26, , 13F
可以請你提供原本的 data frame 的 dim() 大概多少?
09/30 21:26, 13F

09/30 21:26, , 14F
這樣要測試可能會比較一致
09/30 21:26, 14F
data fram的dim()是428*23, 全都是numerical

09/30 22:56, , 15F
晚點下課回去更新一下,感謝!
09/30 22:56, 15F

09/30 23:11, , 16F
1. 先換成RRO 矩陣計算快
09/30 23:11, 16F

09/30 23:12, , 17F
2. 儲存的變數都要先preallocate memory
09/30 23:12, 17F

09/30 23:12, , 18F
3. 能夠向量化的計算就不要用迴圈
09/30 23:12, 18F

09/30 23:12, , 19F
4. 使用snowfall來平行
09/30 23:12, 19F

09/30 23:12, , 20F
2, 4點版上都有文章 去精華區找都有收錄
09/30 23:12, 20F

09/30 23:14, , 21F
你只是lm 換RRO就很快了
09/30 23:14, 21F

09/30 23:15, , 22F
平行的話內迴圈可以平行
09/30 23:15, 22F
第2點有做到 其餘三點等等來研究研究,晚點若研究出來就來更新一下XD 謝謝兩位建議的方向! ※ 編輯: MADNUG (184.6.253.131), 10/01/2015 00:58:40

10/01 06:48, , 23F
題外話,記得別習慣把變數取名叫T,太容易誤會了。
10/01 06:48, 23F

10/01 10:37, , 24F
請問這種在資料集中重複抽取子集的方式來最佳化
10/01 10:37, 24F

10/01 10:38, , 25F
是你自己想的嗎,還是大家都公認這樣做?
10/01 10:38, 25F

10/01 10:39, , 26F
總覺得應該有更聰明的演算法來抽取資料子集。
10/01 10:39, 26F

10/01 10:40, , 27F
我講的是演算法,不是coding
10/01 10:40, 27F

10/01 12:43, , 28F
我這是應用k-fold cross validation,在驗證模型有效性時
10/01 12:43, 28F

10/01 12:43, , 29F
常用到的方法,但我不確定在抽取上是否有效率更佳的解法
10/01 12:43, 29F

10/01 13:17, , 30F
k-fold c.v. 現在很流行,和其它蒙地卡羅方法的目的
10/01 13:17, 30F

10/01 13:17, , 31F
類似,就是要robust。
10/01 13:17, 31F

10/01 13:19, , 32F
似乎已經流行到變成主流方法了。
10/01 13:19, 32F

10/01 16:54, , 33F
疑? k-fold cross validation不是用來選模嗎
10/01 16:54, 33F

10/01 16:54, , 34F
跟robust好像沒關係
10/01 16:54, 34F

10/01 16:56, , 35F
100個sample loocv還是不會這樣而有robust性質吧
10/01 16:56, 35F

10/01 16:58, , 36F
loocv: leave-one-out cross validation
10/01 16:58, 36F

10/01 20:58, , 37F
嗯,那我可能有誤會了什麼,謝謝。
10/01 20:58, 37F

10/01 21:05, , 38F
我把不靠母數的方法都過度理解成目的是為了robust
10/01 21:05, 38F

10/01 21:05, , 39F
才這樣以為。
10/01 21:05, 39F

10/01 21:16, , 40F
請問可以提示一下 PRO 的關鍵字嗎? 在板上搜不到相關資訊
10/01 21:16, 40F

10/01 21:33, , 41F
R 效能優化 裡 13
10/01 21:33, 41F

10/01 21:37, , 42F
Got it! Thank you so much!
10/01 21:37, 42F
文章代碼(AID): #1M2zK1PK (R_Language)