SVM樣本如何進行預處理和篩選?
現在要做一個0 1分類,但是在所有樣本中有超過90%的都是0,需要對這些樣本做怎麼的預處理?需要刪除大量的0樣本嗎? (否則的話一個y=0就可以獲得很好的accuracy)
這應該是數據挖掘領域裡比較經典的不平衡數據分類問題。
而這個問題沒有什麼適用廣泛的答案。 我就簡單的回答一下我最近看到的一些解決方案。其實,對於一般的不平衡問題我們採用oversample/undersample 的方法可能就能取得比較好的結果。但缺點就是如果overdample的比例過大會導致過擬合,undersample的比例過小可能會導致欠擬合。這個得經過實驗去比較分析了。
另一種常用的方法就是代價敏感學習演算法,對於正負比例不均衡的問題,將正例錯分成負例與將負例錯分成正例的代價一定是不同的。比如經典的機器人醫生問題:對100個人進行分類,將健康的人錯分為病人的代價,肯定比將病人分類為健康的人的代價要小的多。因此我們對於這樣兩種誤分類設置不同的懲罰項,使得最終的分類結果代價最小,從而達到優化的目的。
還有很多其他的比如SMOTE,Adacost等等。推薦樓主去看這篇綜述:Learning from imbalanced data。興許能夠有所啟發~
當然,在訓練數據之前進行數據清洗,訓練時採用隨機森林,boosting之類的抗過擬合問題的演算法興許也會有所幫助。
和樓主一樣,我最近也遇到了類似的問題,正負樣本比例懸殊,非常棘手,也沒有找到一個很完美的解決辦法。。。
總之,我也是數據挖掘菜鳥一枚,對於回答可能出現的不嚴謹問題,希望有大神看到之後不吝賜教。謝謝!數據已經傾斜了,演算法會學不到足夠的關於y=1的知識!要麼找更多關於y=1的觀測,要麼在現數據集分層抽樣。
題主問這個問題時需要考慮一下是否樣本中1的準確預測比零更重要,或者是相反的情況。這個是數據不對稱定義的一個關鍵點。
如果是題主遇到的是上述的情況的話,代價敏感學習是可以的。評價結果我覺得用ROC曲線是比較合適的。
如果題主的樣本中0和1同等重要的話,題主應考慮一下,你可以同時考慮一下召回率這個指標。以及相關的結合準確率與召回率的耦合的指標。另外樓上說的利用emsemble learning(隨機森林,adaboost等)防止過擬合的策略也可以考慮。這個問題,比較常見。一種最直接的思路就是不平衡抽樣,即對小樣本過採樣,對大樣本欠採樣。可以參考這篇論文
Yun
Qian, Yanchun Liang, Mu Li, Guoxiang Feng, Xiaohu Shi. A Resampling Ensemble
Algorithm for Classification of Imbalance Problems[J]. Neurocomputing, 143,
2014: 57-67.
文章,作者通過對小樣本進行過採樣,大樣本進行欠採樣,大幅提升了分類準確率。
另外一種思路是使用準確率和召回率,只考慮1類樣本的準確率和召回率。
第三種思路是利用集成學習、集成選擇技術,選出最合適這種情況的幾個分類器進行組合。
推薦閱讀: