machine-learning - 使用 TensorFlow 对不平衡数据进行训练

标签 machine-learning neural-network deep-learning tensorflow perceptron

情况:

我想知道当我的训练数据在两个标签之间的标签分布不平衡时如何最佳地使用 TensorFlow。例如,假设MNIST tutorial被简化为仅区分 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)

我听说这可以通过增加错误分类较小标签类别的成本来实现,但我不确定如何做到这一点。

最佳答案

(1)使用你的策略是可以的。我也在处理不平衡的数据,我尝试首先使用下采样和上采样方法来使训练集均匀分布。或者使用集成方法用均匀分布的子集来训练每个分类器。

(2)我还没有看到任何最大化AUROC的方法。我的想法是,AUROC 基于真阳性率和假阳性率,这并不能说明它在每个实例上的效果如何。因此,它不一定能够最大化分离类的能力。

(3)关于通过类实例的比例来加权成本,类似于Loss function for class imbalanced binary classifier in Tensor flow 以及答案。

关于machine-learning - 使用 TensorFlow 对不平衡数据进行训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35049379/

相关文章:

machine-learning - 即使在 GPU 上,KNN 分类器也花费太多时间

python - 使用自己的数据集训练网络

machine-learning - 我的图像分割模型在训练和验证方面提供了非常高的准确性,但输出空白掩模

python - 将有状态 LSTM 称为功能模型?

python - 如何从 Python 连接到 H2O Deep Water Docker Image?

matlab - 无需工具箱即可在 MATLAB 中实现遗传算法

machine-learning - 参加 Microsoft Research 句子完成挑战

machine-learning - 具有神经网络的异或门

matlab - 支持向量机参数 matlab

python - 深度学习和神经网络