python - 非加权类别标签 - 准确性不会改变

标签 python keras scikit-learn

我有一个分类问题,试图预测 6 个类别。输入特征是心电图信号。这是数据集的标签;

anger, calmness, disgust, fear, happiness, sadness

这是数据集的样子;

                                               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
.                            .                          .  .  .  .  .  .
.                            .                          .  .  .  .  .  .
.                            .                          .  .  .  .  .  .
.                            .                          .  .  .  .  .  .

如您所见,我对标签进行了 one-hot 编码。

问题是,无论我尝试什么,准确度都不会高于 0.2而且它总是在每个时代重演。我将此数据集称为 "non-weighted" 的原因是因为每个类标签都有相同数量的实例。例如,如果有60行数据,标记为"anger" ,那么还有 60 "calmness" , 60 "disgust"等等。我认为,这导致模型总是预测同一类,这就是准确性不会改变的原因。

有什么办法可以解决这个问题吗?提前致谢。

编辑: 我尝试将此分类问题转换为“二元分类”。我只是消除了所有标签并将它们转换为愤怒的单个标签>不生气。在我的 keras 模型中,我仅将损失函数从“categorical-crossentropy”更改为“binary-crossentropy”。之后,模型的准确率发生了巨大的变化,我的准确率超过了 80%。所以,我不知道这意味着什么以及我应该从这个结果中理解什么。但不知何故,当我的数据集中有超过 2 个类并且它不是二元分类问题时,准确率低于 %20,并且它在每个时期都会重复。

最佳答案

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

  • 如果您在训练中没有对数据进行打乱,那么您绝对应该这样做。

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

    • 对于数据集,简单地绘制一些样本,看看是否可以正确分类。如果您做不到,这意味着您的数据有问题。

    • 对于模型,只需运行测试列车实验,该实验使用非常少量的样本,例如 100 个,并使用完全相同的训练集进行测试。这个想法是,如果你的网络有效,它应该很快就会过度适应这个较小的数据集。否则,这意味着您的网络遇到了一些严重的问题。

其他一些快速提示:

  • 使用适中的批量大小,例如 16 或 32
  • 删除所有批量归一化层(如果有)
  • 尝试不同的学习率

关于python - 非加权类别标签 - 准确性不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55505340/

相关文章:

python - Scikit-learn SVM : Reshaping X leads to incompatible shapes

python - 从字符串中剥离 's(撇号 s)

python - 在 Pandas 中将分类特征转换为数字特征时出错

python - 验证码识别准确率低

tensorflow - Tensorflow 中的回调

python - 为什么我在使用 SVM Predict() 函数时出现错误?

python - Heroku 部署 : dash. 异常。NoLayoutException

python - 选择对象实例化的几种方法之一

python - Keras 模型的输出张量必须是 Keras `Layer` 的输出(因此保存过去层元数据)

python - 值错误: could not convert string to float:While loading data from sql server to Predict()