Re: [問題] 類別不平衡

看板DataScience作者 (如果狗狗飛上天)時間6年前 (2018/03/27 06:21), 6年前編輯推噓6(604)
留言10則, 7人參與, 6年前最新討論串3/3 (看更多)
※ 引述《DennismithJR (DSJ)》之銘言: : 想請問大家在處理分類問題時遇到標籤分布很不平衡時會怎麼處理呢 : 翻過Kaggle上一些相關問題,幾乎沒看到有人因此做特別的抽樣或其他處理 : 好像只要評估指標是logloss或ROC的AUC就當沒事了... : 不知道是不是因為樣本少的類別仍有一定數量就能如此? : 若好比說我有一組樣本 : 標籤有五個類別,數量分別如下面所示,其比例與母體相符 : A: 10000 : B: 5000 : C: 200 : D: 15 : E: 8 : 顯然這樣本在D、E甚至C的分類上可能會出現些問題 : 想請問遇到這樣的分布,有什麼建議的抽樣方式呢? 這樣的數據你拿來訓練,其結果就是C,D,E會被完全淹沒在汪洋大海之中,模型 的參數幾乎沒有機會針對它們做優化.其結果就是CDE通通會被判讀成A跟B.所 以你要做的是data augmentation.讓弱勢類可以有更多機會被模型讀到. 常見的方法(至少我知道的): 1.暴力的把弱勢類的資料直接重複多次,放大它們的效力,讓模型無法忽視它們. 一般的情況下這樣做效果就還不錯. 2.但是上面的方法也有個問題,就是這會導致弱勢類的數據缺少變化,模型容易 過擬合,過度迎合那些特定的數字.所以你可以適度的在那些被人工重複的CDE 上加些噪音,讓它們其他的feature產生一些微小變化.以避免模型過度擬合特定 的數字. 3.但是上面的作法還是有點問題,因為不同的特徵之間可能是有關連的,你在 這個特徵上加了一些噪音,理論上另一個特徵應該也要有些相應的變化,但是 隨意的加噪音的方法就沒辦法考慮到這點了.你很可能會弄出不合理的噪音.(例 如讀越多書,考試越低分?)所以一個可行的作法是先作PCA,但是不要降維,維持 原來的維度即可.我們的目的只要求出一個可以把covar matrix對角化的線性 空間的基底就好. 然後把所有的特徵重新用這組基底表示,接著在這上面添加 噪音.這樣做有個好處是,在PCA的基底下,所有的特徵在線性空間中都變成了正 交關係,這時候個別的特徵上加點噪音,至少在線性程度上完全不會與另一個特 徵有連動.這樣的噪音顯然比2要更合理一些. 4.根據上面的思路,還有一個相對簡單的作法,就是做降維例如PCA,t-SNE,甚至 auto encoder,如果是圖片資料,直接用CNN+flatten layer也可以.假如降維之 後,各類別之間都區分的還算開,那我們就可以人工的在每個類別的cluster附近 隨意的添加一些人造的數據點,這顯然又比上面兩個方法更合理,但前提是降維 之後,數據仍可以大致分開,而且你有能力確認這件事.怎麼確認? 如果不是2,3 維,你當然就無法靠視覺化來判斷這件事情了,所以你唯一能做的,是計算弱勢樣 本間的距離是否靠近,強勢樣本距離弱勢樣本是否很遠.然後用這些低維度的人 造數據來做訓練,這相當於一種簡單的數據造假方法. 5.而更高階的數據造假方法,則是建立一個生成模型(generative model)! 這 在神經網路中,最常見的方法就是VAE(Variational Autoencoder)或是GAN (Generative adversial network). 它們可以提取你的樣本中的特徵,學習如 何造假,最後造出不盡相同又幾可亂真的數據.但要用這招,你的弱勢類別也不 能少到只有幾百這種數量級,這是無法訓練神經網路的.所以比如說你有兩個類 別,其中一個類別有500K,另一個類別只有20K,20K的數據量練一個不太大的神 經網路已經夠了,這時候你就可以考慮針對那個20K的進行造假.讓兩個類別數 量級相當. 隨意介紹了幾種方法,網路上還有更多高手的密招,你也可以多看看. 不過不管 密招多厲害,每一種方法都要付出不同程度的代價.端看你的時間跟資源了. -- ★人生中最溫暖的夏天是在紐約的冬天 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 169.237.42.114 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1522102889.A.C5D.html ※ 編輯: pipidog (169.237.42.114), 03/27/2018 07:06:14

03/27 07:54, 6年前 , 1F
03/27 07:54, 1F

03/27 08:31, 6年前 , 2F
03/27 08:31, 2F

03/27 09:42, 6年前 , 3F
03/27 09:42, 3F

03/27 10:04, 6年前 , 4F
03/27 10:04, 4F

03/27 10:22, 6年前 , 5F
方法1 術語上叫做oversampling 對吧?
03/27 10:22, 5F

03/27 12:37, 6年前 , 6F
把少的那類變多就是oversampling 反之就是undersampling
03/27 12:37, 6F

03/27 12:37, 6年前 , 7F
https://goo.gl/kPAmhN 這篇我覺得講的滿清楚的
03/27 12:37, 7F

03/27 12:38, 6年前 , 8F
另外,借標題問一下,這幾種方法可以同時使用嗎?
03/27 12:38, 8F

03/27 19:34, 6年前 , 9F
做降維的過程也是在fit統計模型 一樣會遇到類別不平均
03/27 19:34, 9F

03/27 19:34, 6年前 , 10F
的問題吧
03/27 19:34, 10F
文章代碼(AID): #1QkN9fnT (DataScience)
討論串 (同標題文章)
文章代碼(AID): #1QkN9fnT (DataScience)