python - 如何计算平均 TPR、TNR、FPR、FNR - 多类分类
问题描述
如果数据集不平衡,如何计算平均 TPR、TNR、FPR、FNR?
例如 FPR:[3.54224720e-04 0.00000000e+00 1.59383505e-05 0.00000000e+00] 那么,我可以计算出 4 类的总和除以 4 吗?
TPR :[3.54224720e-04 + 0.00000000e+00 + 1.59383505e-05 + 0.00000000e+00]/4 = 0.99966 ?
And how to calculate 3.54224720e-04 it is equal .000354224720 ?
Thank you
FP = np.sum(matrix, axis=0) - np.diag(matrix)
FN = np.sum(matrix, axis=1) - np.diag(matrix)
TP = np.diag(matrix)
TN = np.sum(matrix) - (FP + FN + TP)
# True Positive rate
TPR = TP/(TP+FN)
print("TPR:", TPR)
# True Negative Rate
TNR = TN/(TN+FP)
print("TNR:", TNR)
# False Positive Rate
FPR = FP/(FP+TN)
print("FPR:", FPR)
# False Negative Rate
FNR = FN/(TP+FN)
print("FNR:", FNR)
# Overall accuracy
ACC = (TP+TN)/(TP+FP+FN+TN)
print("ACC :", ACC)
解决方案
有不同的方法来衡量指标的平均值。如果您检查包,例如sklearn,您会看到可以提供多个参数。微观,宏观,加权等。
如果您想手动计算它们,一种方法(微)是从您的四个不同输出中获取不同的 TP、FN、FP 和 TN 值并将它们汇总在一起,然后计算您的指标。
所以,你应该真正理解你的问题,看看哪一个是有意义的。大多数情况下,在数据不平衡的情况下,最好使用加权平均。请记住,如果您有任何基线计算,则必须使用完全相同的方法来计算这些值以进行公平比较,因为不同的平均方法之间可能存在巨大差异。
是的,这两个数字是相等的。
更新:
如文档所示:
加权平均值:计算每个标签的指标,并通过支持度(每个标签的真实实例数)找到它们的加权平均值。这会改变“宏观”以解决标签不平衡问题;它可能导致 F 分数不在精确率和召回率之间。
这个问题也是相关的。
对于加权指标,您分别计算 4 个类中的每个类的每个指标。有了每个类中的实例数,您就可以计算加权平均指标。这张图片显示了加权精度的等式:
推荐阅读
- verilog - 在verilog中写管道的两种方式,哪一种更好?
- android - 华为移动服务开发——存储服务不存在
- pandas - 通过 pandas.groupby.agg 循环时如何忽略单词的其他实例?
- powershell - Powershell > 并非每个代码路径都在方法中返回一个值
- perl - 如何防止 Mojolicious 缓存静态文件?
- maven - fabric8 docker-maven-plugin:从命令行添加附加标签
- javascript - 如何提取html字符串中第一段的内容 react native
- asp.net - 升级nuget包问题
- kubernetes - aks 中的 Service Mesh Linkerd 安装错误
- windows - 在 IIS 中加载用户配置文件值设置为 True 不会加载站点