Python 在keras中对不平衡数据集使用class_权重时,准确度显著降低

Python 在keras中对不平衡数据集使用class_权重时,准确度显著降低,python,tensorflow,keras,sentiment-analysis,Python,Tensorflow,Keras,Sentiment Analysis,我有一个相当不敏感的问题。我正在对亚马逊书评进行情绪分析,数据集严重失衡。正面评价几乎是负面评价的10倍,培训和测试的准确率都在90%左右(数据集不平衡)。然而,当我试图借助class_weight={0:10,1:1}来平衡数据集时,训练和测试的准确率都会下降到65%左右。同样,如果我做了class_weight={0:1,1:10}class_weight的话,准确性又会下降,所以显然我设置class_weight是错误的,但正如我所理解的,因为正面评论(1)的数量是负面评论(0)的10倍,

我有一个相当不敏感的问题。我正在对亚马逊书评进行情绪分析,数据集严重失衡。正面评价几乎是负面评价的10倍,培训和测试的准确率都在90%左右(数据集不平衡)。然而,当我试图借助
class_weight={0:10,1:1}
来平衡数据集时,训练和测试的准确率都会下降到65%左右。同样,如果我做了
class_weight={0:1,1:10}
class_weight的话,准确性又会下降,所以显然我设置
class_weight
是错误的,但正如我所理解的,因为正面评论(1)的数量是负面评论(0)的10倍,所以
class_weight
不应该设置为{0:10,1:1}

这是我如何对培训和测试数据进行分类的:

x_train, x_test, y_train, y_test = train_test_split(sequences,labels, test_size = 0.33, random_state = 42)
这是我的模型:

model = Sequential()
model.add(Embedding(max_words, embedding_dim))
model.add(Dropout(0.5))
model.add(LSTM(32, dropout=0.5, recurrent_dropout=0.5))
model.add(Dense(2, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy',metrics=['acc'])
model.fit(x_train, y_train, epochs=10, batch_size=320, class_weight = {0:1 , 1:10})

为数据集中频率较低的类设置较高的类权重是正确的方法。除了准确性,您还可以查看其他更像精度、召回率、F1分数、auc_roc分数(一致性)、混淆矩阵的数据,以实际了解模型在学习什么

当然,如果你不平衡损失,你会得到比平衡损失更好的准确度。事实上,这就是平衡的原因。否则,预测所有评论的正面等级的模型将为您提供90%的准确率。但这种模式是无用的。对于这种极不平衡的数据集,准确度通常是一个糟糕的指标。改用F1,您将看到不平衡模型给出的F1更差

请注意,模型学到的一件事是,即使没有看到样本,样本为0或1的“可能性”有多大。当你像这样使用类权重时,你实际上改变了模型。好吧,但我想了解类权重的准确度明显较低,因为多种原因,准确度较低。更改模型体系结构、数据预处理、模型超参数等。