2017-05-31 46 views
2

因此,我在創建的多標籤數據集(約20000個樣本)上訓練了一個深度神經網絡。我切換SOFTMAX乙狀結腸和嘗試(使用亞當優化器),以儘量減少:用於多標籤分類的不平衡數據集

tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y_, logits=y_pred) 

我結束了與這位國王預測(漂亮「恆」):

Prediction for Im1 : [ 0.59275776 0.08751075 0.37567005 0.1636796 0.42361438 0.08701646 0.38991812 0.54468459 0.34593087 0.82790571] 

Prediction for Im2 : [ 0.52609032 0.07885984 0.45780018 0.04995904 0.32828355 0.07349177 0.35400775 0.36479294 0.30002621 0.84438241] 

Prediction for Im3 : [ 0.58714485 0.03258472 0.3349618 0.03199361 0.54665488 0.02271551 0.43719986 0.54638696 0.20344526 0.88144571] 

起初,我還以爲我只需要爲每個班級找到一個門檻值。

但我注意到,例如,在我的20000個樣本中,第一類出現約10800,所以是0.54的比率,它是我每次預測的值。所以我認爲我需要找到解決tuis「不平衡數據集」問題的方法。

我想減少我的數據集(Undersampling)每個班級的發生次數相同,但只有26個樣本對應我的一個班級...這會讓我失去很多樣本...

我讀過關於過度取樣或關於更多的懲罰更少的類是罕見的,但沒有真正理解它是如何工作的。

有人可以分享一些關於這些方法的解釋嗎?

在實踐中,在Tensorflow上,是否有函數可以幫助實現這個功能?

其他建議?

謝謝:)

PS:Neural Network for Imbalanced Multi-Class Multi-Label Classification這篇文章提出了同樣的問題,但沒有答案!

+0

爲什麼不使用您擁有的所有樣本,並使用該不平衡數據來使用異常檢測算法? – Gabriel

+0

如果我理解的很好,你的建議是在我的(9)班(在我的數據集中「很好」代表)上訓練我的網絡,然後在我的「代表性很差」的班級上訓練另一個網絡(就像在這個二進制分類上做的那樣類)? –

+1

不,我建議使用算法來檢測非常小的數字,這對於絕大多數數據來說是不同的。他們通常被稱爲異常檢測算法,因爲通常當您嘗試檢測異常時,您有很多「好」樣本但很少「異常」樣本。然而,這些算法通常用於在兩個類別之間進行分類。所以也許這對你不好,但可能是更復雜的分類過程的一部分 – Gabriel

回答

1

那麼,在一個班級中有10000個樣本,而在一個難得的班級中只有26個樣本,這確實是一個問題。

但是,對我而言,您所看到的更像是「輸出甚至不會看到輸入」,因此網絡只會學習您的輸出分佈。

要調試這個,我會創建一個縮減集(僅用於此調試目的),比如說每個類有26個樣本,然後嘗試嚴重過度配合。如果你得到正確的預測,我的想法是錯誤的。但是,如果網絡甚至無法檢測到那些欠採樣的過載樣本,那麼確實這是一個架構/實現問題,而不是由於圖表分佈(然後您需要修復,但它不會像當前結果那麼糟糕)。

+0

我認爲這可能是來自我的網絡的一個問題,但對於單標籤分類(如MNIST)(當我使用Softmax時)它可以正常工作。但是我仍然會嘗試爲每班的26個樣本進行過度訓練!謝謝您的回答 ! –

+1

好吧,非常明確,你是對的..不幸的是我!但是,正如我之前所說的,完全相同的架構用於在MNIST數據集和我創建的數據集(多類單標籤)上學習和執行得非常好! 唯一改變的是我用Sigmoid取代了Softmax。 –

1

你的問題不是班級不平衡,而只是缺少數據。對於幾乎任何真正的機器學習任務,26個樣本被認爲是非常小的數據集。通過確保每個小班將至少有一個來自每個班級的樣本(這導致了一些樣本將比另一個更頻繁地使用,但是誰在乎)的情況,可以容易地處理班級不平衡。

但是,如果僅存在26個樣本,此方法(以及其他方法)將很快導致過擬合。這個問題可以通過某種形式的數據增強得到部分解決,但是仍然有太少的樣本來構建合理的東西。

所以,我的建議是收集更多的數據。

+0

26不是我的數據集的大小,而是整個數據集中的一個類的出現次數(即20000個樣本)。感謝你們「確保每個小班將至少有一個班級的樣本」。這跟Oersampling是一樣的嗎? :) –

相關問題