情境:
当我的训练数据在两个标签之间的分布存在不平衡时,我想知道如何最优地使用TensorFlow。例如,假设MNIST教程仅用于区分1和0,而我们所有可用的图像都是1或0。当我们有大约50%每种类型的图像用于训练和测试时,使用提供的TensorFlow教程进行训练是很简单的。但是如果我们的数据中90%的图像是0而只有10%是1,该怎么办呢?在这种情况下,我发现TensorFlow经常预测整个测试集为0,从而获得毫无意义的90%准确度。
我使用的一种策略是为训练选择具有均匀分布的0和1的随机批次。这种方法确保我仍然可以使用所有的训练数据并产生不到90%准确度但更有用的分类器结果。由于在这种情况下准确度对我来说有些无用,因此我通常选择ROC曲线下面积(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)
我听说可以通过增加错误分类较小标签类别的成本来实现,但是我不确定如何做到这一点。