情况说明:
我想知道在我的训练数据中标签分布不平衡时,如何最佳地使用TensorFlow进行训练。例如,假设MNIST教程被简化为仅区分1和0,所有可用的图像都是1或0。当我们有大约50%的每种类型的图像用于训练和测试时,使用提供的TensorFlow教程进行训练是直接的。但如果我们的数据中90%的图像是0,只有10%是1呢?我观察到在这种情况下,TensorFlow通常会预测我的整个测试集都是0,从而达到一个毫无意义的90%的准确率。
我使用的一个策略是选择随机批次进行训练,这些批次具有0和1的均匀分布。这种方法确保我仍然可以使用我的所有训练数据,并且产生了不错的结果,准确率低于90%,但分类器更有用。由于在这种情况下准确率对我来说有些无用,我通常选择的指标是接收者操作特征曲线下面积(AUROC),这产生的结果显著高于0.50。
问题:
(1) 我描述的策略是训练非平衡数据的接受或最佳方式吗,还是有更好的方法?
(2) 由于在非平衡数据的情况下准确率指标不太有用,是否有通过改变成本函数可以最大化的其他指标?我当然可以在训练后计算AUROC,但能否以最大化AUROC的方式进行训练?
(3) 我是否可以对我的成本函数进行其他修改以改善非平衡数据的结果?目前,我使用的是TensorFlow教程中给出的默认建议:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
我听说通过增加对小类别误分类的成本权重可能实现这一点,但我不知道如何操作。
回答:
(1)使用你的策略是可以的。我也在处理非平衡数据,我首先尝试使用降采样和升采样方法,使训练集均匀分布。或者使用集成方法,用均匀分布的子集训练每个分类器。
(2)我没有看到任何最大化AUROC的方法。我的想法是,AUROC基于真阳性和假阳性率,这并不能说明它在每个实例上的表现如何。因此,它可能不一定能最大化分离类别的能力。
(3)关于根据类别实例的比例加权成本,这与TensorFlow中用于类别不平衡二元分类器的损失函数及其答案类似。