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

时间:2019-04-03 22:36:18

标签: 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, 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,并且它总是在每个时期重复一次。之所以将这个数据集称为"non-weighted"是因为每个类标签都有相同数量的实例。例如,如果有60行数据标记为"anger",则还有60 "calmness",60 "disgust",依此类推。我认为,这导致模型始终预测同一类,这就是为什么准确性不会改变的原因。

有什么办法解决这个问题?预先感谢。

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

1 个答案:

答案 0 :(得分:1)

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

  • 如果您在训练中没有整理数据,则绝对应该这样做。

  • 如果您这样做了,我认为最好检查一下数据集和网络。

    • 对于数据集,只需绘制一些样本,然后查看是否可以正确分类即可。如果您做不到,则表示您的数据有问题。

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

其他一些快速提示:

  • 使用中等大小的批次,例如16或32
  • 如果有的话,删除所有批标准化层
  • 尝试不同的学习率