python - 使用混淆矩阵的分类报告
问题描述
我们的 ML 模型有一个混淆矩阵。
array([[508, 12],
[ 78, 36]])
我们还有classification_report
precision recall f1-score support
0 0.83 0.98 0.90 123
1 0.85 0.31 0.45 36
accuracy 0.83 159
macro avg 0.84 0.64 0.67 159
weighted avg 0.83 0.83 0.80 159
为了了解这种 ML 解决方案的功效,我们为传统构建的系统生成了一个混淆矩阵
array([[305, 62],
[ 108, 50]])
有没有办法从中生成classification_report
?标准功能而不是编码,以确保一致性。
解决方案
我建议你在这里阅读这篇文章https://towardsdatascience.com/beyond-accuracy-precision-and-recall-3da06bea9f6c。根据混淆矩阵中的值,您可以计算出真阳性、真阴性、假阳性和假阴性。之后,您可以计算使用它们的任何指标。
我找到了一个代码示例(来源)
def evaluate(self, dataset):
predictions = self.predict(dataset[:,0])
confusion_matrix = sklearn_confusion_matrix(dataset[:,1], predictions, labels=self.__classes)
precisions = []
recalls = []
accuracies = []
for gender in self.__classes:
idx = self.__classes_indexes[gender]
precision = 1
recall = 1
if np.sum(confusion_matrix[idx,:]) > 0:
precision = confusion_matrix[idx][idx]/np.sum(confusion_matrix[idx,:])
if np.sum(confusion_matrix[:, idx]) > 0:
recall = confusion_matrix[idx][idx]/np.sum(confusion_matrix[:, idx])
precisions.append(precision)
recalls.append(recall)
precision = np.mean(precisions)
recall = np.mean(recalls)
f1 = (2*(precision*recall))/float(precision+recall)
accuracy = np.sum(confusion_matrix.diagonal())/float(np.sum(confusion_matrix))
return precision, recall, accuracy, f1
在代码中,您可以看到如何创建混淆矩阵并得出分数。我知道你已经有了矩阵,所以也许你可以看一下第二部分并尝试了解如何仅使用矩阵计算分数。
推荐阅读
- java - Java Reactor - if/else 链接(过滤)
- azure-web-app-service - Azure 应用服务计划概述显示与 Application Insights Live Metrics 不同的 CPU 使用率
- wordpress - Wordpress 中的连续(无限)计数器
- oracle - oracle sql中的ascii函数,用于非ascii值
- css - 如何在 wordpress 中将“容器”类更改为“容器流体”类
- mysql - 使用mysql工作台创建表时出错
- package - Common Lisp 包 - 当包可能无法加载时如何处理?
- flutter - Flutter:是否可以在 main.dart 中实现一次快餐栏,例如,当连接状态发生变化时,用于所有屏幕
- python - DataError:没有数字类型可以聚合尝试对字母数字值进行排名
- ios - 使用 NSCalendar Swift 查找周日和周一