2017-06-16 111 views
2

我有兩個數據集,看起來像這樣:深度學習的不平衡數據集

DATASET 1 
Training (Class 0: 8982, Class 1: 380) 
Testing (Class 0: 574, Class 1: 12) 

DATASET 2 
Training (Class 0: 8982, Class 1: 380) 
Testing (Class 0: 574, Class 1: 8) 

我試圖建立Tensorflow了深刻的前饋神經網絡。我在90年代獲得了精確度,在80年代獲得了AUC分數。當然,數據集嚴重不平衡,所以這些指標是無用的。我的重點是獲得良好的召回價值,我不想過分抽取1類。我已經玩弄了模型的複雜性無濟於事,最好的模型只能正確預測正面類的25%。

我的問題是,考慮到這些數據集的分佈,在沒有獲取更多數據(我無法獲得更多數據)的情況下構建模型是徒勞無益的,或者存在解決這個問題的數據的方法很不平衡。

謝謝!

回答

2

問題

我可以使用tensorflow學習不平衡分類與約30:1的比例

回答

是的,我有。具體而言,Tensorflow提供了輸入權重矩陣的功能。看看tf.losses.sigmoid_cross_entropy,有一個權重參數。您可以輸入與Y匹配的矩陣,並且每個值爲Y提供訓練示例應具有的相對權重。

找到正確權重的一種方法是啓動不同的平衡並運行訓練,然後查看您的混淆矩陣以及每個班級的精度與準確度的下降。一旦你得到兩個類具有相同的精確度和準確度比,那麼它們就是平衡的。

示例實現

下面是一示例實現中一個ý轉換成爲我

def weightMatrix(matrix , most=0.9) : 
    b = np.maximum(np.minimum(most , matrix.mean(0)) , 1. - most) 
    a = 1./(b * 2.) 
    weights = a * (matrix + (1 - matrix) * b/(1 - b)) 
    return weights 

參數表示最大分數差來表現非常出色的權重矩陣考慮。 0.9等同於.1:.9 = 1:9,其中等於1等於1。低於.5的值不起作用。

2

你可能有興趣看看this question及其答案。它的範圍比您的範圍更爲嚴格,因爲它專門針對分類權重,但它與您的案例似乎非常相關。

另外,AUC絕對是不是不相關:它實際上是獨立於您的數據不平衡。

+0

不要回答重複,將它們作爲重複項關閉 –

+0

是的 - 儘管如此,在我看來,問題更廣泛,即使我指向相同的解決方案。 – user1735003