因此,我在创建的多标签数据集(约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这篇文章提出了同样的问题,但没有答案!
为什么不使用您拥有的所有样本,并使用该不平衡数据来使用异常检测算法? – Gabriel
如果我理解的很好,你的建议是在我的(9)班(在我的数据集中“很好”代表)上训练我的网络,然后在我的“代表性很差”的班级上训练另一个网络(就像在这个二进制分类上做的那样类)? –
不,我建议使用算法来检测非常小的数字,这对于绝大多数数据来说是不同的。他们通常被称为异常检测算法,因为通常当您尝试检测异常时,您有很多“好”样本但很少“异常”样本。然而,这些算法通常用于在两个类别之间进行分类。所以也许这对你不好,但可能是更复杂的分类过程的一部分 – Gabriel