多标签分类中的不平衡数据集

6

我训练了一个基于深度神经网络的多标签数据集(大约20000个样本)。我将softmax替换为sigmoid,并尝试使用Adam优化器来最小化:

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,这是我的预测值每次都围绕的值。因此,我认为我需要找到一种方法来解决这个“不平衡数据集”的问题。

我考虑过减少我的数据集(欠采样)以使每个类别出现的次数大致相同,但有一个类别只有26个样本...这会让我失去很多样本...

我读到过关于过采样或进一步惩罚稀有类别的方法,但没有真正理解它们是如何工作的。

有人可以分享一些关于这些方法的解释吗?

在Tensorflow上实践时,是否有帮助执行这些方法的函数?

还有其他建议吗?

谢谢:)

PS:神经网络用于不平衡的多分类多标签分类 这篇文章提出了同样的问题,但没有答案!


为什么不使用您拥有的所有样本,并使用该不平衡数据来使用异常检测算法呢? - codingfish
如果我理解正确,您建议的是在我的(9)个类别上训练我的网络(在我的数据集中“良好”表示),然后在我的“少量代表性”的类别上训练另一个网络(就像对这个类别进行二元分类)? - A. Piro
1
不建议使用检测大多数数据的算法来检测非常小的少数派数据。这些算法通常被称为异常检测算法,因为通常在尝试检测异常时会有很多“好”的样本但很少“异常”的样本。然而,这些算法通常是用来分类两个类别的。因此,也许这对您来说并不好,但它可能可以成为更复杂分类过程的一部分。 - codingfish
好的,谢谢你的想法(和额外的解释)! - A. Piro
2个回答

4

嗯,在一个类别中有10000个样本,而在一个稀有类别中只有26个样本确实是一个问题。

然而,根据我的经验,你所遇到的问题更像是“输出甚至看不到输入”,因此网络只学习了你的输出分布。

为了调试这个问题,我会创建一个缩小的数据集(仅供调试目的),每个类别只包含26个样本,并尝试过度拟合。如果您得到正确的预测结果,则我的想法是错误的。但是,如果网络甚至无法检测到那些被欠采样的过度拟合样本,则确实存在架构/实现问题,而不是由于扭曲的分布导致的问题(那么您需要修复它,但它不会像当前的结果那么糟糕)。


我一开始以为这可能是我的网络问题,但对于像MNIST(当我使用Softmax时)这样的单标签分类,它运行得非常好。但我仍然打算尝试每类26个样本进行过度拟合!谢谢你的回答! - A. Piro
2
好的,你肯定是对的...可惜对我来说!但是,正如我之前所说,完全相同的架构用于学习和在MNIST数据集上表现非常出色,并且在我创建的数据集(多类单标签)上也是如此!唯一改变的是我用Sigmoid替换了Softmax.. - A. Piro

2
你的问题不在于类别不平衡,而是缺乏数据。对于任何实际的机器学习任务来说,26个样本都被认为是非常小的数据集。通过确保每个小批量至少有一个来自每个类别的样本来处理类别不平衡是很容易的(这会导致某些样本比其他样本更频繁地使用,但谁关心呢)。
然而,在仅有26个样本的情况下,这种方法(以及任何其他方法)都很快会导致过拟合。这个问题可以通过某种形式的数据增强部分解决,但还是太少了,无法构建出合理的东西。
因此,我的建议是收集更多的数据。

26不是我的数据集的大小,而只是整个数据集(即20000个样本)中一个类别出现的次数。感谢您提出“确保每个小批量至少有一个来自每个类别的样本”的想法。这与过采样的想法相同,对吧? :) - A. Piro
没有过度采样是指通过抽样增加少数类实例数量的方法。 - Brndn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接