python - 编写一个以正类为输入的混淆矩阵函数
问题描述
我想创建一个混淆矩阵,而不依赖于任何包。我有两个列表(预测值和实际值),我想将它们与正类的指标一起输入到函数中。
例如,什么时候1
是正类:
predicted_lst = [1, 0, 1, 0, 0]
actual_lst = [1, 0, 0, 1, 1]
我的功能目前看起来像这样,但效率低下:
def confusion_matrix(predicted, actual, pos_class):
TP = 0
TN = 0
FP = 0
FN = 0
for i in range(len(actual)):
if actual[i] == pos_class and predicted[i] == pos_class:
TP +=1
elif actual[i] == pos_class and predicted[i] != pos_class:
FN +=1
elif actual[i] != pos_class and predicted[i] == pos_class:
FP +=1
else:
TN +=1
return TP, FP, TN, FN
我的问题是,有没有更有效的方法来编写这段代码?我看到了这些帖子,但它们没有像我希望的那样将正类作为函数输入。我也不想使用任何包(包括numpy)
解决方案
您可以假设它1
是正类来编写函数,并pos_class
通过简单地更改返回值的顺序来适应参数,如果0
是正类的话。
FP
在循环内部,您可以放弃and的增量计算FN
,因为这些可以从循环外部的真实值中得出:
def confusion_matrix(predicted, actual, pos_class):
TP = 0
TN = 0
for pred, act in zip(predicted, actual):
if pred == act:
if act == 0:
TN += 1
else:
TP += 1
positive = sum(predicted)
negative = len(predicted) - positive
FP = positive - TP
FN = negative - TN
if pos_class == 1:
return TP, FP, TN, FN
else:
return TN, FN, TP, FP
推荐阅读
- javascript - 用 JavaScript 中的转义字符替换特定字符串
- python - ImportError: DLL load failed while importing _pywrap_tensorflow_internal: 找不到指定的模块
- ajax - 如果我登录到我的 WP 仪表板,联系表 7 不使用 Ajax
- reactjs - 如何在 React-Redux 容器中访问 match?
- java - 无法导入 Eclipse 库
- java - 在递归重叠问题中应用 DP 记忆方法时得到错误的结果
- android - 如果有安全问题,它会被 google play console 成功发布吗?
- swift - 无法将“ViewController”类型的值分配给“WKNavigationDelegate”类型?
- java - 线程“主”java.lang.NullPointerException 中的异常以及如何修复它?
- git - 从发布管道推送到本地 Azure DevOps Git