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



这个答案解释了我们如何使用类权重来惩罚 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用于多类

换句话说,我想在我的情况下正确计算类权重,并使总和等于 1。阶级权重应该降低多数阶级的损失,增加少数阶级的损失

......注意::::

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

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

最新更新