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類樣本的準確率和召回率。

第三種思路是利用集成學習、集成選擇技術,選出最合適這種情況的幾個分類器進行組合。


推薦閱讀:

TAG:數據挖掘 | 機器學習 | SVM | 分類演算法 |