如何计算多个标签的类别权重(不平衡数据)?

时间:2018-08-17 18:54:16

标签: tensorflow neural-network deep-learning svm conv-neural-network

This answer解释了如何使用类权来惩罚Tensorflow中的错误分类。我使用的数据集更加复杂,因此使用类权重仍然存在问题。

7类 {c0,c1,c2,c3,c4,c5,c6}

每个类别的样本数量为:

  

所有样本 = 98070
   c0 = 1607

     

c1 = 5292

     

c2 = 4322

     

c3 = 3322

     

c4 = 6629

     

c5 = 7507

     

c6 = 69391

分别

这些类的洞察力:  [1.6%,5.4%,4.4%,3.4%,6.7%,7.6%,71%]

Tensorflow模型将每个测试样本归为 c6 ,而没有使用类别权重。 我想为产品添加班级重量来解决此问题。但是,由于我应该权衡多数类的损失并增加少数类的损失,所以 我不知道如何在这里将class_weights用于多类< / em>

换句话说,在我的情况下,我想正确地计算班级权重,并使总和等于1。班级权重应降低大多数班级的损失权重,而应提高针对大多数班级的损失权重。少数阶层...

注意::::

我使用深度学习的完全连接层进行分类,而不是使用SVM。

1 个答案:

答案 0 :(得分:0)

weights = tf.gather(1. / class_weights, labels)
loss = tf.losses.sparse_softmax_cross_entropy(
    logits=logits, labels=labels, weights=weights)