瞎聊机器学习——多分类的精确率和召回率

我们常用的精确率和召回率通常都用于二分类的问题上,那么在多分类上应该怎样去使用这些评价指标呢?

多分类的精确率和召回率

既然精确率和召回率的概念以及计算公式都指向二分类问题,那么我们不妨将多分类问题转换为二分类问题来做。

先来看一下精确率和召回率的概念:

  • 精确率是指分类正确的正样本个数占分类器判定为正样本的个数的比例。
  • 召回率是指分类正确的正样本真实正样本的比例。

根据概念我们知道,在转换为二分类的过程中,我们重点在意的就是怎样去做正样本,其实我们可以把每个类别单独视为“正”,所有的其他类型视为“负”。

举个例子:

在进行例子之前,我们先来了解一个概念叫做——混淆矩阵。

对于上面这个表格,我们就可以把它叫做是一个混淆矩阵,在混淆矩阵中,每一行之和表示该类别的真实样本数量,每一列之和表示被预测为该类别的样本数量。

那么对于这个混淆矩阵我们就可以计算它每一个类别的精确率和召回率:

  • 分类1的精确率(此时把分类1当作正样本,其余为负样本):

分类正确的正样本=43

分类器判定为正样本=50

P=43/50

  • 分类1的召回率:

分类正确的正样本=43

真实正样本=45

R=43/45

  • 分类2的精确率(此时把分类2当作正样本,其余为负样本):

分类正确的正样本=45

分类器判定为正样本=50

P=45/50

  • 分类2的召回率:

分类正确的正样本=45

真实正样本=51

R=45/51

  • 分类3的精确率(此时把分类3当作正样本,其余为负样本):

分类正确的正样本=49

分类器判定为正样本=50

P=4950

  • 分类3的召回率:

分类正确的正样本=49

真实正样本=54

R=49/54

得到了每个分类对应的P和R值他们的F1 score就可以用下面的式子算得:

F1 score =\frac{2*precision*recall}{precision+recall}

 

用代码实现一下该计算方式:


M = [
    [14371, 6500, 9, 0, 0, 2, 316],
    [5700, 22205, 454, 20, 0, 11, 23],
    [0, 445, 3115, 71, 0, 11, 0],
    [0, 0, 160, 112, 0, 0, 0],
    [0, 888, 39, 2, 0, 0, 0],
    [0, 486, 1196, 30, 0, 74, 0],
    [1139, 35, 0, 0, 0, 0, 865]
]
n = len(M)
for i in range(n):
    rowsum, colsum = sum(M[i]), sum(M[r][i] for r in range(n))
    try:
        print ('precision: %s' % (M[i][i]/float(colsum)), 'recall: %s' % (M[i][i]/float(rowsum)))
    except ZeroDivisionError:
        print ('precision: %s' % 0, 'recall: %s' %0)

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哥不像程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值