如何计算多类分类问题的准确率以及准确率如何等于加权准确率?

机器算法验证 机器学习 准确性 多级 模型评估 精确
2022-03-22 17:01:47

考虑本文中的示例 http://text-analytics101.rxnlp.com/2014/10/computing-precision-and-recall-for.html 准确率会是 (30 + 60 + 80)/300 吗?什么是加权精度?

4个回答

对于这个问题,我有一个很好的解决方案和一个完美的可以理解的解决方案,因为我正在从这个问题中寻找相同的解决方案

您可以使用以下方法计算和存储准确性:

(accuracy <- sum(diag(mat)) / sum(mat))
# [1] 0.9333333

每个类的精度(假设预测在行上,真实结果在列上)可以用以下公式计算:

(precision <- diag(mat) / rowSums(mat))
#     setosa versicolor  virginica 
#  1.0000000  0.9090909  0.8750000 

如果您想获取特定类的精度,您可以执行以下操作:

(precision.versicolor <- precision["versicolor"])
# versicolor 
#  0.9090909 

每个类的召回(再次假设预测在行上,真实结果在列上)可以用以下公式计算:

 recall <- (diag(mat) / colSums(mat))
    #     setosa versicolor  virginica 
    #  1.0000000  0.8695652  0.9130435 

如果您想召回特定课程,您可以执行以下操作:

(recall.virginica <- recall["virginica"])
# virginica 
# 0.9130435 

相反,如果您将真实结果作为行,将预测结果作为列,那么您将翻转精度和召回定义。

数据:

(mat = as.matrix(read.table(text="  setosa versicolor virginica
 setosa         29          0         0
 versicolor      0         20         2
 virginica       0          3        21", header=T)))
#            setosa versicolor virginica
# setosa         29          0         0
# versicolor      0         20         2
# virginica       0          3        21

准确性适用于整个模型,您的公式是正确的。

一个“A”类的精度TP_A / (TP_A + FP_A)上述文章中的一样。现在您可以计算模型的平均精度。有几种平均方法(微观、宏观、加权),这里有很好的解释:

'weighted':计算每个标签的指标,并找到它们的平均值,按支持度加权(每个标签的真实实例数)。这会改变“宏观”以解决标签不平衡问题;(...)

我认为您的困惑来自 3x3 表。但是...该链接有一个关于标签 A 的精度和召回率的示例。准确性非常相似。

A 的准确度 = (30 + 60 + 10 + 20 + 80) / (30 + 20 + 10 + 50 + 60 + 10 + 20 + 20 + 80)

https://en.wikipedia.org/wiki/Confusion_matrix

我不知道加权精度是什么。

试试 PyCM,它可以为您提供准确度和其他参数。

PyCM 是一个用 Python 编写的多类混淆矩阵库

...以及支持大多数类和整体统计参数的分类后模型评估的适当工具

检查输出的html 版本