python - 测试准确度为 98% 的模型的混淆矩阵不准确
问题描述
我训练了一个二元分类模型,得到了 98% 的测试准确率和 99% 的训练准确率。
今天我想计算混淆矩阵并使用下面的代码来计算它们。
model = load_model("model.h5")
testGenerator = ImageDataGenerator(rotation_range=5,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=False,
fill_mode='nearest'
)
testData = testGenerator.flow_from_directory(
'Location',
target_size=(74,448),
batch_size=15,
class_mode='binary',
shuffle=False
)
proba = model.predict_generator(testData,steps=3000//15)
y_true = np.array([0] * 1482 + [1] * 1482 )
y_pred = proba > 0.5
print(confusion_matrix(y_true, y_pred))
我收到了这个混淆矩阵:
正如 sklearn 所说:
这在这里说假阴性和假阳性是如此之高。既然我有 98% 的测试准确率,这怎么可能呢?此外,我多次使用该模型生成预测(使用 model.predict() 函数)并手动检查它们。但每次它都给了我正确的分类。
任何想法如何获得准确的结果?
解决方案
让我们从头开始。消息“TypeError: unhashable type: 'numpy.ndarray'”表示您不能numpy.ndarray
用作字典键,因为它不是不可变对象。首先将其转换为tuple
或其他内容以使其不可变。
关于您的混淆矩阵,我敢打赌生成器会以不可预知的顺序从文件夹中加载文件,但您已y_true
设置为 1482zeros
和 1482 ones
- 这可能与生成器生成的文件的顺序匹配,也可能不匹配。因此,您会得到有趣的结果。
推荐阅读
- git - 如何将本地计算机中的文件添加到已克隆的本地 git 存储库?
- c++ - 有没有办法在没有括号的情况下在 C++ 中调用成员的 getter/setter?
- android - Android Studio 不想打开项目 (macOS)
- git - 跨分支保持更改
- excel - 运行时错误 1004 vba 方法范围对象 _global 失败
- javascript - 为什么在 ECMAScript 规范中将语句称为子句?
- reactjs - skipWaiting() 没有安装卡在等待阶段的新服务工作者
- php - html表单不发送数据
- django - 为什么我的代码不能与环境变量一起正常工作?
- python - 如何减少执行时间(Python)