我将尝试从较高的角度解释我的问题,希望我能对这一切背后的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
答案 0 :(得分:1)
有多种方法可以解决此问题。您可以尝试重新采样数据集。
这可以通过两种方式完成:
这可能是最简单的方法,但是如果您愿意尝试,可以尝试使用惩罚模型。
在惩罚模型中,我们在模型上施加了额外的成本,以在训练过程中对少数群体进行分类错误,这种额外的成本或惩罚会使模型更加关注少数群体。例如penalised-svm和其他。
有关penalised-svm算法的更多信息,请点击以下链接: [https://stats.stackexchange.com/questions/122095/does-support-vector-machine-handle-imbalanced-dataset][1]