CNN+LSTM模型生成混淆矩阵时报ValueError样本数量不一致求助
问题根源
错误触发的核心原因是你对测试集标签做argmax运算时指定的轴参数错误,同时你的数据集划分逻辑也存在逻辑错误:
- 首先看你处理标签的两行代码:
y_pred= np.argmax(Y_pred2, axis=1) # prediksi y_test=np.argmax(Y_test, axis=0)
你的Y_test是独热编码格式,形状为(测试集样本数, 类别数),你指定axis=0相当于沿着样本维度取最大值索引,输出结果的长度等于你的类别数(报错中的4就是你设置的n_labels值);而y_pred是沿着axis=1(类别维度)取索引,输出结果长度等于测试集样本数(报错中的304)。二者长度不一致,就触发了混淆矩阵的样本数不一致报错。
- 第二个隐藏问题是你的训练集/测试集划分逻辑错误:
X_train=Train_data[:int(Totalnb * 0.9),:] Y_train=Train_label[:int(Totalnb * 0.9)] X_test=Train_data[int(Totalnb * 0.1):,:] Y_test=Train_label[int(Totalnb * 0.1):]
你这里训练集取的是前90%样本,测试集取的是后90%样本,二者存在80%的重叠,完全不符合数据集划分的要求,正确的测试集应该取总样本的后10%。
修复方案
把上述两处错误修改为如下代码即可:
- 修正数据集划分逻辑:
X_train=Train_data[:int(Totalnb * 0.9),:] Y_train=Train_label[:int(Totalnb * 0.9)] # 测试集从90%的位置开始取,而不是10%的位置 X_test=Train_data[int(Totalnb * 0.9):,:] Y_test=Train_label[int(Totalnb * 0.9):]
- 修正标签argmax的轴参数:
y_pred= np.argmax(Y_pred2, axis=1) # 沿着类别维度(axis=1)取最大值索引,和y_pred保持一致 y_test=np.argmax(Y_test, axis=1)
修改完成后再运行混淆矩阵相关代码即可正常输出结果。
内容的提问来源于stack exchange,提问作者JuniorPython
相关产品推荐
相关产品推荐

