python - 如何正确理解混淆矩阵和分类报告
问题描述
我知道这个问题在某种程度上是重复的,但我所看到的答案都没有明确解决我的担忧,所以我想再次询问混淆矩阵,并classification_report
针对我的案例。
一般来说,我使用随机森林分类器来预测用户是否返回我的网页或 1 = 'Return' 和 0 = 'No return'
- 在训练和预测数据之后,我运行了一些评估指标,如下所示:
print('Precision score: {:.2f}'.format(precision_score(y_test, y_pred)))
print('Recall_score score: {:.2f}'.format(recall_score(y_test, y_pred)))
print('AUC.ROC score: {:.2f}'.format(roc_auc_score(y_test, y_pred)))
精度分数:0.63
Recall_score 分数:0.16
AUC.ROC 分数:0.56
在这一点上,我的理解是结果代表“返回”(值 = 1)的观点,这recall = 0.16
意味着返回用户的百分比被正确识别。
所以我的第一个问题是:到目前为止我的理解是否正确?
- 我计算了混淆矩阵并
classification_report
确认了上述结果:
print(confusion_matrix(y_test, y_pred))
[[99981 3250]
[28799 5447]]
从这个混淆矩阵输出中,计算 Precision 和 Recall 返回不同的值(分别为 0.97 和 0.78)。
对于classification_report
:
print(classification_report(y_test, y_pred))
precision recall f1-score support
0 0.78 0.97 0.86 103231
1 0.63 0.16 0.25 34246
从分类报告中,我的假设是我对问题 (1) 的理解是正确的,并且上面的混淆矩阵结果代表“不返回”用户。
所以我的第二个问题:我上面的结论正确吗?如果是,那么为什么混淆矩阵会返回“不返回”用户的值而不是“返回”,以及如何为“返回”用户计算类似的混淆矩阵?
解决方案
推荐阅读
- javascript - Phaser 3 在场景之间共享自定义对象数据?
- android - 如何检测橡皮擦工具边界与路径生成的线之间的冲突?
- javascript - 续集查询
- javascript - JavaScript 的动态特性示例
- c++ - 如何将 YUV422/YUV420 视频数据(Y、U、V 缓冲区)写入视频播放卡的缓冲区?
- javascript - 在班次后立即检查数组以查看它是否为空
- terminal - 有没有办法在终端内搜索 youtube 视频?
- android - 如何以编程方式在我的 android 应用程序中实现点击?
- node.js - 根据子参考 ID Mongo 和 Nodejs 获取所有父文档
- c# - 匹配字符串数组和字符串列表的一种方法