Python 非加权类标签-精度不变

Python 非加权类标签-精度不变,python,keras,scikit-learn,Python,Keras,Scikit Learn,我有一个分类问题,它试图预测6个类。输入特征是ECG信号。以下是数据集的标签 愤怒、平静、厌恶、恐惧、幸福、悲伤 以下是数据集的外观 ecg 0 1 2 3 4 5 0 [[0.1912, 0.3597, 0.3597, 0.3597, 0.3597, 0.35... 1 0 0 0 0 0 1 [[0.2179, 0.4172, 0.4172, 0.4172

我有一个分类问题,它试图预测6个类。输入特征是ECG信号。以下是数据集的标签

愤怒、平静、厌恶、恐惧、幸福、悲伤

以下是数据集的外观

                                               ecg      0  1  2  3  4  5
0    [[0.1912, 0.3597, 0.3597, 0.3597, 0.3597, 0.35...  1  0  0  0  0  0
1    [[0.2179, 0.4172, 0.4172, 0.4172, 0.4172, 0.41...  1  0  0  0  0  0
2    [[0.1986, 0.3537, 0.3537, 0.3537, 0.3537, 0.35...  0  1  0  0  0  0
3    [[0.2808, 0.5145, 0.5145, 0.5145, 0.5145, 0.51...  0  1  0  0  0  0
4    [[0.1758, 0.2977, 0.2977, 0.2977, 0.2977, 0.29...  0  0  1  0  0  0
5    [[0.2183, 0.396, 0.396, 0.396, 0.396, 0.396, 0...  0  0  1  0  0  0
6    [[0.204, 0.3869, 0.3869, 0.3869, 0.3869, 0.386...  0  0  0  1  0  0
7    [[0.1695, 0.2823, 0.2823, 0.2823, 0.2823, 0.28...  0  0  0  1  0  0
8    [[0.2005, 0.3575, 0.3575, 0.3575, 0.3575, 0.35...  0  0  0  0  1  0
9    [[0.1969, 0.344, 0.344, 0.344, 0.344, 0.344, 0...  0  0  0  0  1  0
10   [[0.2312, 0.4141, 0.4141, 0.4141, 0.4141, 0.41...  0  0  0  0  0  1
11   [[0.1862, 0.3084, 0.3084, 0.3084, 0.3084, 0.30...  0  0  0  0  0  1
12   [[0.2605, 0.47, 0.47, 0.47, 0.47, 0.47, 0.3814...  1  0  0  0  0  0
13   [[0.2154, 0.3733, 0.3733, 0.3733, 0.3733, 0.37...  1  0  0  0  0  0
.                            .                          .  .  .  .  .  .
.                            .                          .  .  .  .  .  .
.                            .                          .  .  .  .  .  .
.                            .                          .  .  .  .  .  .
正如你所看到的,我有一个热编码我的标签

问题是,无论我尝试什么,精度都不会超过
0.2
,而且它总是在每个时代重复。我之所以将此数据集称为“非加权”,是因为每个类标签的实例数相同。例如,如果有60行数据标记为“愤怒”,那么还有60行数据标记为“冷静”,60行数据标记为“厌恶”,依此类推。我认为,这导致模型总是预测同一类,这就是为什么准确度不变

有没有办法解决这个问题?提前谢谢

编辑:
我试图将这个分类问题转换成一个“二进制分类”。我只是删除了所有标签,并将它们转换成一个单独的标签,该标签是生气的不生气的。在我的keras模型中,我只将损失函数从的“分类交叉熵”更改为的“二进制交叉熵”。在那之后,模型的精确度发生了巨大的变化,我的精确度超过了80%。所以,我不知道这意味着什么,我应该从这个结果中理解什么。但不知何故,当我的数据集中有两个以上的类,并且这不是一个二元分类问题时,准确度低于%20,并且在每个历元上都会重复。

拥有一个平衡的数据集,即每个类都有相同数量的样本,比不平衡的数据集要好。所以我认为这不是问题所在

  • 如果你没有在训练中洗牌你的数据,你肯定应该这样做

  • 如果您已经这样做了,我认为您最好检查您的数据集和网络

    • 对于dataset,只需绘制一些样本,然后查看是否可以正确分类它们。如果你做不到,这意味着你的数据有问题

    • 对于模型,只需运行训练测试实验,该实验使用非常少的样本(比如100个),并使用完全相同的训练集进行测试。这个想法是,如果你的网络工作正常,它应该很快适应这个较小的数据集。否则,这意味着您的网络将遇到一些严重问题

其他一些快速提示:

  • 使用中等批量,例如16或32
  • 删除所有批处理规范化层(如果有)
  • 尝试不同的学习速度

谢谢你的回答。我已经洗牌了数据集,但它没有帮助。我还没有尝试绘制数据集或测试训练方法,但我尝试将此分类问题转换为二进制分类。我将“6”标签转换为“1”标签,即“生气”或“不生气”,并从标签中消除其他情绪。使用二进制分类,我的准确率达到了80%以上。但每当标签增加时,这种模式就会消亡。这就是为什么我认为我的模型总是试图预测同一类,这就是为什么我有“1/6”的准确性。