神经网络 - 处理不平衡的数据集

Pau*_*lin 6 neural-network random-forest tensorflow

我正在研究一个带有 2 个标签的分类问题:0 和 1。我的训练数据集是一个非常不平衡的数据集(考虑到我的问题,测试集也是如此)。

不平衡数据集的比例为 1000:4,标签“0”出现的次数比标签“1”多 250 倍。但是,我有很多训练样本:大约 2300 万。所以我应该为标签“1”获得大约 100 000 个样本。

考虑到我有大量的训练样本,我没有考虑 SVM。我还阅读了关于随机森林的 SMOTE。但是,我想知道 NN 是否可以有效地处理这种具有大型数据集的不平衡数据集?

另外,当我使用 Tensorflow 来设计模型时,我应该/可以调整哪些特性来处理这种不平衡的情况?

谢谢你的帮助 !保罗


更新 :

考虑到答案的数量,而且它们非常相似,我将在这里全部回答,作为一个共同的答案。

1)我在这个周末尝试了第一个选项,增加了正面标签的成本。实际上,由于不平衡的比例较小(例如另一个数据集上的 1/10),这似乎有助于获得更好的结果,或者至少可以“偏向”精确率/召回率分数比例。但是,对于我的情况,它似乎对字母数字非常敏感。alpha = 250,这是不平衡数据集的比例,我的精度为 0.006,召回分数为 0.83,但模型预测的 1 太多了,它应该是 - 标签 '1' 的大约 0.50 .. . 当 alpha = 100 时,模型只预测“0”。我想我将不得不为这个 alpha 参数做一些“调整”:/我也会从 TF 中查看这个函数,因为我现在是手动完成的:tf.nn.weighted_cross_entropy_with_logitsthat

2)我会尝试去平衡数据集,但我担心这样做会丢失很多信息,因为我有数百万个样本,但只有大约 10 万个正样本。

3)使用较小的批量似乎确实是一个好主意。我会试试看 !

cha*_*255 0

我可能尝试的一件事是在计算成本时对样本进行不同的加权。例如,如果预期结果是 0,则可以将成本除以 250;如果预期结果是 1,则不考虑成本。这样,越稀有的样本就会产生更大的影响。您也可以简单地尝试在不进行任何更改的情况下对其进行训练,然后看看 nnet 是否恰好可以工作。不过,我会确保使用大批量,这样您总是会在每批中至少获得一个稀有样本。