1. 程式人生 > >「機器學習」資料不平衡情況下的處理方法(1)

「機器學習」資料不平衡情況下的處理方法(1)

1. background

   前端時間想換工作,於是面了幾家公司。發現了公司面試基本會問當資料集分佈不平衡的時候該怎麼處理。在現實做專案的時候這種情況也會很多。於是做了一下整理。

2. 資料不平衡

    資料不平衡的情況主要出現在二分類。比如現在公司做的重要郵件檢測。幾千個郵件只有幾百個重要郵件,其他都是不重要郵件。這樣帶來的問題是,你想要檢測的數量小的損失率帶來的整體影響很小。(比如你把所有小類的95%都分錯了帶來的影響  對於整體來說也可能不大)。所以在評價的時候看著資料很不錯,為啥實際應用卻檢測不出來這樣的結果。而且資料量小也就代表資訊少,效果不會很好也能預想到。

3. 一般方法

    資料不平衡的解決方法一般分為兩種:

        1. 取樣法

        2. 懲罰法

這篇先來介紹一下采樣法。

4. 取樣法

    取樣法有如下幾種

        1. 過取樣(Oversampling

        2. 欠取樣(Undersampling

    4.1 過取樣:

            過取樣就是把小類資料給擴大,把資料多複製幾份之類的。但是顯而易見這種做法會明顯增加過擬合現象。導致測試集中表現良好,實際中效果很差。覺得比較好的方法使人工製造資料。在一定規律下,自己生成新的小類資料已達到擴充小類資料樣本的目的。然而問題是如何製造這些資料,感覺這塊學問比較大。此前在郵件分類中自動生成新的重要郵件。然而效果不是特別好,不知道是不是因為本身生成的樣本有問題。

    4.2 欠取樣:

  欠取樣是指把大類樣本縮小。可以隨機去掉一些資料使得資料集平衡。然而這會使大量資訊丟失。大資料大資料肯定資料越多越好,這樣做的話感覺很損失。可以取樣類似於隨機森林一樣的做法,隨機有放回的生成多個縮小的大類資料,每個小版本大類資料和小類整合成一個新資料集,在各個新資料集中進行分類,使用多數決的方法確定最後結果。(個人感覺這種做法效果應該還好。)