具有高度不平衡的数据集的基本DNN-网络可预测相同的标签

时间:2018-07-20 01:17:08

标签: python neural-network pytorch

我将尝试从较高的角度解释我的问题,希望我能对这一切背后的ML有所了解。

我正在处理从音频文件中提取的聚合特征,因此每个特征向量的大小(1xN)。输出将是单个情感标签,“积极”,“中性”或“消极”。我分别将它们映射到2、1、0(标签在设计上是离散的,但也许可以使其连续吗?)

我正在使用的数据集是90%中性,6%负和4%正,我将它们分成了train / dev / test。我在PyTorch中编写了基本的DNN,并一直在使用CrossEntropyLoss和SGD(具有Nesterov动量)进行训练。我遇到的问题是,仅看到约10%的数据后,网络开始仅预测神经标签。类权重收敛到类似

tensor([[-0.9255],
        [ 1.9352],
        [-1.1473]])

无论您输入什么1xN特征向量,我都希望能找到有关如何解决此问题的指南。

供参考,架构是

DNNModel(
  (in_layer): Linear(in_features=89, out_features=1024, bias=True)
  (fcs): Sequential(
    (0): Linear(in_features=1024, out_features=512, bias=True)
    (1): Linear(in_features=512, out_features=256, bias=True)
    (2): Linear(in_features=256, out_features=128, bias=True)
  )
  (out_layer): Sequential(
    (0): SequenceWise (
    Linear(in_features=128, out_features=3, bias=True))
  )
)

def forward(self, x):
    x =  F.relu(self.in_layer(x))
    for fc in self.fcs:
        x = F.relu(fc(x))
    x = self.out_layer(x)
    return x

不确定NN是否真正有意义-是每个隐藏层之间的关系还是偏见?或者是其他东西。谢谢!

编辑:移动到了数据科学堆栈交换,因为这在这里更有意义。 link

1 个答案:

答案 0 :(得分:1)

有多种方法可以解决此问题。您可以尝试重新采样数据集。

这可以通过两种方式完成:

  1. 您可以尝试欠采样,即删除代表过多的类的实例,或者
  2. 您可以尝试进行过度采样,即添加更多代表不足的类的实例。

这可能是最简单的方法,但是如果您愿意尝试,可以尝试使用惩罚模型。

在惩罚模型中,我们在模型上施加了额外的成本,以在训练过程中对少数群体进行分类错误,这种额外的成本或惩罚会使模型更加关注少数群体。例如penalised-svm和其他。

有关penalised-svm算法的更多信息,请点击以下链接:   [https://stats.stackexchange.com/questions/122095/does-support-vector-machine-handle-imbalanced-dataset][1]