作者ciphero (奶油焗蛋餃...:))
看板R_Language
標題[問題] 分層抽樣是否適用於正負樣本差距過大時?
時間Thu Jul 9 01:22:27 2015
[問題類型]:
意見調查(我對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://webptt.com/m.aspx?n=bbs/R_Language/M.1436376149.A.8AB.html
※ 編輯: ciphero (1.161.165.166), 07/09/2015 01:23:32
1F:推 Edster: 這是錯誤的抽樣方法,樣本並不能代表母體的分配 07/09 02:35
2F:推 Edster: 我不懂什麼叫跑不出來。這幾個字有很多想像,但通常跟樣 07/09 02:58
3F:→ Edster: 本無關,除非結果不符預期。這時你該抽樣的對象應該是變 07/09 02:59
4F:→ Edster: 數欄,而非樣本。 07/09 02:59
5F:→ celestialgod: 我測試了一下隨機資料 rpart確實給出錯誤 07/09 13:35
6F:→ celestialgod: 不過沒有給錯誤訊息 就完全沒有切割NODE 07/09 13:35
7F:→ celestialgod: summary給出error: 1 07/09 13:36
8F:→ celestialgod: tree這個套件也不行 07/09 13:40
9F:→ celestialgod: 我找到了 加control = rpart.control(cp = -1) 07/09 14:15
10F:→ celestialgod: 可以強迫分 07/09 14:15