1. 程式人生 > >機器學習-10:MachineLN之樣本不均衡

機器學習-10:MachineLN之樣本不均衡

你要的答案或許都在這裡小鵬的部落格目錄

我想說:

其實很多時候,有競爭是好的事情,可以促進你的成長,可以磨練你的耐性,可以提升你的魅力,可以表現你的豁達,可以體驗成功的喜悅,可以感受失敗其實並不可怕,可怕的是你沒有面對失敗的勇氣;而今天的社會達爾文的進化論其實從來沒有變過,唯一不變的事情想必就是變了,做慈善的是慈善機構,做教育的是學校,百依百順的是父母,只要踏上社會,那麼對不起,優勝劣汰,適者生存,你必須面對,並且你面對的都是高手,是多個依依東望的諸葛亮,你要脫穎而出除了變的更優秀沒有出路! 那麼你打算怎麼做呢?

說到樣本不均衡,感覺平時大家不太重視,下面來一起討論一下!

那麼我的問題是:

1. 什麼是樣本不均衡?

2. 為什麼要解決樣本不均衡?

3. 解決樣本不均衡有哪些方法?

看到這裡你的答案是什麼?下面是我的答案:

1. 什麼是樣本不均衡?

樣本不均衡:在準備訓練樣本的時候,各類別樣本比例不等,有的差距可能比較小,有的差距則會比較大,以CIFAR-10為例:

CIFAR-10是一個簡單的影象分類資料集。共有10類(airplane,automobile,bird,cat,deer,dog, frog,horse,ship,truck),每一類含有5000張訓練圖片,1000張測試圖片。如下圖:Dist. 1:類別平衡,每一類都佔用10%的資料。Dist. 2、Dist. 3:一部分類別的資料比另一部分多。

Dist. 4、Dist 5:只有一類資料比較多。Dist. 6、Dist 7:只有一類資料比較少。Dist. 8: 資料個數呈線性分佈。Dist. 9:資料個數呈指數級分佈。Dist. 10、Dist. 11:交通工具對應的類別中的樣本數都比動物的多。


2. 為什麼要解決樣本不均衡?

訓練網路使用的是CIFAR-10的結構,下面是測試結果:可以看出總的準確率表現不錯的幾組1,2,6,7,10,11都是大部分類別平衡,一兩類差別較大;而表現很差的,像5,9可以說是訓練失敗了,他們的不平衡性也比前面的要強。


那麼再看一下,對樣本少的資料進行過取樣之後,測試結果:可以看到經過過取樣將類別數量平衡以後,總的表現基本相當。(過取樣雖然是一個很簡單的想法,但是很OK,3中還將介紹海康威視ImageNet2016競賽經驗


想必到這裡可以看到樣本均衡的重要性了吧。

3. 解決樣本不均衡有哪些方法?

解決不均衡問題的方式有很多:

(1)可以將資料進行擴增: (這些方法有時候也可以勉強做為資料不均衡的增強方法,如果訓練時候各類樣本都已經用了以下的方法進行data augmentation,那麼樣本不均衡就選其他方法來做吧)

  • 原圖:


  • 影象旋轉;


  • 影象crop;


  • 影象平移;


  • 影象flip;(左右映象,有的可以上下)


  • (5)影象光照;


  • 還有一些像新增噪聲; 透視變換等;

(2) 可以借鑑一下海康威視的經驗:


以圖中的例子來說,步驟如下:首先對原始的影象列表,按照標籤順序進行排序;然後計算每個類別的樣本數量,並得到樣本最多的那個類別的樣本數。根據這個最多的樣本數,對每類隨機都產生一個隨機排列的列表;然後用每個類別的列表中的數對各自類別的樣本數求餘,得到一個索引值,從該類的影象中提取影象,生成該類的影象隨機列表;然後把所有類別的隨機列表連在一起,做個Random Shuffling,得到最後的影象列表,用這個列表進行訓練。每個列表,到達最後一張影象的時候,然後再重新做一遍這些步驟,得到一個新的列表,接著訓練。Label Shuffling方法的優點在於,只需要原始影象列表,所有操作都是在記憶體中線上完成,非常易於實現。

另外也可以按照同樣的方式對多的樣本進行欠取樣;

(3)還可以用Weighted samples,給每一個樣本加權重,樣本多的類別每個的權重就小些,樣本少的類別每個的權重就大些,這樣無論樣本是否均衡,在Loss Function中每類的影響力都一樣的。

(4)還可以:再過取樣之後使用K-fold交叉驗證,來彌補一些特殊樣本造成的過擬合問題,(K-fold交叉驗證就是把原始資料隨機分成K個部分,在這K個部分中選擇一個作為測試資料,剩餘的K-1個作為訓練資料。交叉驗證的過程實際上是將實驗重複做K次,每次實驗都從K個部分中選擇一個不同的部分作為測試資料,剩餘的資料作為訓練資料進行實驗,最後可以把得到的K個實驗結果平均。)

推薦閱讀: