[問題] 分層抽樣是否適用於正負樣本差距過大時?

看板R_Language作者 (奶油焗蛋餃...:))時間9年前 (2015/07/09 01:22), 9年前編輯推噓2(208)
留言10則, 2人參與, 最新討論串1/1
[問題類型]: 意見調查(我對R 有個很棒的想法,想問問大家的意見) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 這裡我想問的問題,比較偏重在處理資料時使用的抽樣方式是否適合? 問題如下: 假設我有一份資料集,樣子如下: 項次 col_1 col_2 col_3 ...... col_50 result ------------------------------------------------- 1 ... ... ... ... yes 2 ... ... ... ... yes 3 ... ... ... ... no ...... ... ... ... ... ... 500000 ... ... ... ... yes 如果: 1.這份資料集總共有 500000 筆資料。 2.資料的因變數是「result」,其值只有 yes 跟 no 兩種。 3.資料中沒有任何 missing value。 4.假設 yes 跟 no 的資料數量差異很大,例如達到 99:1 的程度, 也就是 yes 有 495000 筆,no 只有 5000 筆好了。 5.目的是想要找出「col_1 ~ col_50 這 50 個欄位對於 result 的影響程度」 原本我是將這 500000 筆資料原封不動的利用 R 的分類樹演算法(rpart)來處理 例如指令為: formula = result ~ col_1 + col_2 + ... + col_50 x = rpart(formula, data, method="class") # data: 含 500000 筆資料 summary(x) #獲得變數重要程度的資訊 但後來發現結果跑不出來,應該是 yes 與 no 的資料數量相差過於懸殊的關係 @@~ [你的答案]: 所以後來我想到用「分層抽樣」的方法,針對不同的 result,用不同比例來隨機抽樣: 種類 筆數 抽樣比例 抽樣筆數 -------------------------------- yes 495000 5% 24750 no 5000 100% 5000 -------------------------------- 總計 500000 29750 在這個方法裡面,我只用了 29750 筆資料 (yes:24750筆、no:5000筆) 雖然後來結果有很順利的跑完 但是對於採用這種方法,我不曉得會有什麼樣的缺點 (例如是否會因為樣本數減少,導致結論偏離正確的結果) 不知道大家對於這樣的抽樣方式,覺得是否合理呢? 感謝大家給予意見! [關鍵字]: 分層抽樣;rpart -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.165.166 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1436376149.A.8AB.html ※ 編輯: ciphero (1.161.165.166), 07/09/2015 01:23:32

07/09 02:35, , 1F
這是錯誤的抽樣方法,樣本並不能代表母體的分配
07/09 02:35, 1F

07/09 02:58, , 2F
我不懂什麼叫跑不出來。這幾個字有很多想像,但通常跟樣
07/09 02:58, 2F

07/09 02:59, , 3F
本無關,除非結果不符預期。這時你該抽樣的對象應該是變
07/09 02:59, 3F

07/09 02:59, , 4F
數欄,而非樣本。
07/09 02:59, 4F

07/09 13:35, , 5F
我測試了一下隨機資料 rpart確實給出錯誤
07/09 13:35, 5F

07/09 13:35, , 6F
不過沒有給錯誤訊息 就完全沒有切割NODE
07/09 13:35, 6F

07/09 13:36, , 7F
summary給出error: 1
07/09 13:36, 7F

07/09 13:40, , 8F
tree這個套件也不行
07/09 13:40, 8F

07/09 14:15, , 9F
我找到了 加control = rpart.control(cp = -1)
07/09 14:15, 9F

07/09 14:15, , 10F
可以強迫分
07/09 14:15, 10F
文章代碼(AID): #1LdLnLYh (R_Language)
文章代碼(AID): #1LdLnLYh (R_Language)