Python 非加权类标签-精度不变
我有一个分类问题,它试图预测6个类。输入特征是ECG信号。以下是数据集的标签 愤怒、平静、厌恶、恐惧、幸福、悲伤 以下是数据集的外观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
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
- 删除所有批处理规范化层(如果有)
- 尝试不同的学习速度