使用TensorFlow训练非平衡数据

情况说明:

我想知道在我的训练数据中标签分布不平衡时,如何最佳地使用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中用于类别不平衡二元分类器的损失函数及其答案类似。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注