分类评价指标Accuracy/Recall/Precision/F-score/FalseAlarm

@TOC

一、前言

有些东西不记录下来,就会记不清,最近在做分类任务,所以重新总结一下,记录在博客里面,以便后面翻阅。第二章介绍分类的评价指标,第三章使用python实现各类评价指标,第四章为参考文献。

二、评价指标介绍

符号解释:
二分类任务:
T P TP TP - ( T r u e P o s i t i v e ) (True Positive) (TruePositive) 真正例
T N TN TN - ( T r u e N e g a t i v e ) (True Negative) (TrueNegative) 真负例
F P FP FP - ( F a l s e P o s i t i v e ) (False Positive) (FalsePositive) 假正例
F N FN FN - ( F a l s e N e g a t i v e ) (False Negative) (FalseNegative) 假负例

1. Accuracy(准确率)

准确率是衡量分类器分类准确程度最常见的分类评价指标之一,是指正确分类的样本占总样本的比例。该评价指标优点在于可以综合衡量分类器对每个类别的分类性能;缺点同样,该分类指标只能模糊表示分类器的性能,无法精确描述分类器对某些类别分类性能;在训练分类器时,常用来大概描述分类器的性能,该指标在评价多分类任务中的重要程度要高于二分类任务中。

A c c u r a c y = T P + T N T P + F P + T N + F N = 分 类 正 确 的 样 本 数 量 总 样 本 数 量 Accuracy = \frac{TP+TN}{TP+FP+TN+FN} = \frac{分类正确的样本数量}{总样本数量} Accuracy=TP+FP+TN+FNTP+TN=

2. Recall(召回率、查全率)

Recall表示分类器对某一特定类别的召回,是指原本为正例的样本被正确分类的比例(假设正例是目标类别),因此常用于二分类任务中;当然在多分类任务中该指标要针对某一特定类别来计算。
R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} Recall=TP+FNTP

3. Precision(精确度)

Precision表示分类器对某一特定类别的分类精确程度,是指被分类为正例的样本中真正属于正例的比例,同样常用于二分类任务中;在多分类任务中该指标也只能针对某一特定类别来计算。
P r e c i s o n = T P T P + F P Precison = \frac{TP}{TP+FP} Precison=TP+FPTP

4.F-score(又称为F-measure)

F-score是衡量分类器性能的综合行指标,由于Recall和Precision是两个相互矛盾的指标,当在衡量两个分离器性能优劣势,往往由于二者相互矛盾导致无法评价两分类器好坏,因此引入该综合性指标来加以判断。
F − s c o r e = ( α 2 + 1 ) ( R e c a l l ∗ P r e c i s i o n ) α 2 ( R e c a l l + P r e c i s i o n ) F-score = \frac{(\alpha^2+1)(Recall*Precision)}{\alpha^2(Recall+Precision)} Fscore=α2(Recall+Precision)(α2+1)(RecallPrecision)
设置不同的 α \alpha α值来控制评判倾向,通常使用 α = 1 \alpha=1 α=1的F1-score来评估分类器性能。

5.FalseAlarmRate(虚警率)

FalseAlarm表示分类器正确预测正样本纯度的指标,是指负例样本中被分类为正例的比例,常用与检测类任务,值越小说明模型性能越好。
F a l s e A l a r m R a t e = F P T N + F P FalseAlarmRate = \frac{FP}{TN+FP} FalseAlarmRate=TN+FPFP

三、python代码实现

1. Accuracy、Recall、Precision、F1-score、FalseAlarmRate实现

import numpy as np
# 假设真实标签和预测标签
ground_truth = [1,0,0,1,1,1,0,1,1,0] # 真实标签
predictions = [1,1,0,1,0,1,0,1,0,0] # 预测标签
# 将列表转换为numpy格式,
ground_truth = np.array(ground_truth, dtype=np.int32)
predictions = np.array(predictions, dtype=np.int32)
# 计算tp/tn/fp/fn
tp = np.sum(np.logical_and(predictions == 1, ground_truth == 1))
tn = np.sum(np.logical_and(predictions == 0, ground_truth == 0))
fp = np.sum(np.logical_and(predictions == 1, ground_truth == 0))
fn = np.sum(np.logical_and(predictions == 0, ground_truth == 1))

# 计算accuracy
accuracy = np.mean(predictions == ground_truth)
# 计算recall
recall = tp/(tp+fn)
# 计算precision
precision = tp/(tp+fp)
# 计算f1-score
f1_score = 2*recall*precision/(recall+precision)
# 计算falseAlarmRate
false_alarm_rate = fp/(tn+fp)

四、参考博文

[1] wiki-f-score
[2] TP、FP、TN、FN代码实现

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值