查准率、查全率、F1值

举个栗子

假设有10个数据,
target: [ 1,1,1,1,1,0,0,0,0,0 ]
predict:[ 1,0,1,1,1,1,1,0,0,0 ]
target为数据现实的分类,predict为数据的预测结果。

查准率 P = (真正预测对的数量)/(预测结果是“对”的数量) 查准率即要求准确
此例中 P = 4/6
查全率 R = (真正预测对的数量)/(所有结果是“对”的数量) 查全率即要求“对”的越多越好
此例中 R=4/5

F值
F(k) = ( 1 + k ) * P * R / ( ( k*k ) * P + R )。 k>1查全率影响更大,k<1查准率影响更大
其中,常用的F1值,即 F(1) = 2 * P * R / ( P + R )

写个代码

分别求出类别0和1的P,R,F1值。

计算查准率P

class Precision:
    def __init__(self, right_num=0., pred_right_num=0.):
        """
        查准率
        :param pred_right_num: 真正预测准确的数量
        :param pred_num: 预测结果是“对”的数量
        """
        self.right_num = right_num
        self.pred_right_num = pred_right_num

        if self.pred_right_num != 0:
            self.P = self.right_num / self.pred_right_num
        else:
            self.P = 0

计算查全率R

class Recall:
    def __init__(self, right_num=0., tar_right_num=0.):
        """
        查全率
        :param right_num: 真正预测对的数量
        :param target_right_num:目标结果是“对”的数量
        """
        self.right_num = right_num
        self.tar_right_num = tar_right_num

        if self.tar_right_num != 0:
            self.R = self.right_num / self.tar_right_num
        else:
            self.R = 0

计算F值

class Fk:
    def __init__(self, P=0., R=0., k=1):
        """
        F值
        :param P:  precision
        :param R:  recall
        """
        self.P = P
        self.R = R
        self.k = k
        if (self.k * self.k) * self.P + self.R != 0:
            self.Fk = (1 + k) * self.P * self.R / ((self.k * self.k) * self.P + self.R)
        else:
            self.Fk = 0

完整代码

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值