【机器学习】分类器性能度量——混淆矩阵及sklearn实现

记录一下混淆矩阵的学习心得,不写下来老是容易搞混..

I. 理论解析

机器学习中,考量二分类问题的分类器性能时,可以将样本的实际类别与分类器预测类别,划分为如下 TN, FP, FN, TP 四种结果,组合起来就是大名鼎鼎的 confusion matrix 混淆矩阵。其中:

True,False 表示预测结果与实际分类是否一致:一致为True,不一致为False;

Positive,Negative 表示预测结果的类别:通常class 1 为Positive,class 0 为Negative

混淆矩阵预测值
0(-)1(+)
实际值

0(-)

True Negative (TN)False Positive (FP)
1(+)False Negative (FN)True Positive (TP)

画出混淆矩阵后,就可以根据矩阵,计算相应的度量指标了,主要有准确率(Accuracy),召回率(Recall),精确率(Precision)三大金刚。

PS: 看了太多不同的叫法,本来就容易混淆,叫法一多更蒙圈了,感觉还是叫英文直观一点

1. 准确率 (Accuracy)

所有预测正确的样本,占总样本的比例。

Accuracy = \frac{TP + TN}{TP + TN + FP + FN}

准确率关注整体(正样本 + 负样本)的预测准确程度。但在样本不均衡时,准确率有很大的局限性,此时高accuracy无太大意义。例如在实际生活中,大多数信用卡客户都不会违约(class 0),违约的只是少数(class 1)。用分类器预测信用卡客户是否会违约时,即便把所有样本都预测为不违约(class 0)也可以获得很高的准确率,但这对于风控模型来说,毫无参考价值。

2. 召回率 (Recall)

针对原样本而言,在所有实际为正(class 1)的样本中,被预测为正的样本比例。

 又称为sensitivity rate,true positive rate(TPR),查全率。这个指标关注更多的是查全,不要有漏检的情况,宁可错杀一千,不能放过一个

3. 精确率 (Precision)

针对预测样本而言,在所有被预测为正(class 1)的样本中,实际为正(class 1)的样本比例。

又称为 positive predictive rate,查准率。更关注正样本结果中的预测准确程度,宁愿漏检,也不愿意预测错误。

召回率 与 精确率 Trade-off

召回率(查全率)与精确率(查准率)是一对矛盾的变量,二者相互制约,此消彼长。

以下表为例,假设 t=1 代表客户违约,用A,B 两个分类器进行预测

t actual0000010101
t predicted-A0111111111
t predicted-B0000000100

模型 A: 宁可错杀,不能放过,即便没有很确定,也判断该客户会违约。此时分类器高召回率,低精确率。

recall = TP / 实际为正 = 3/3 = 100%,

precision = TP / 预测为正 = 3/9 = 33.33%

模型B: 宁可漏过,不能错判,只在非常确定的情况下,才判断客户违约。此时分类器低召回率,高精确率。

recall = 1/3 = 33.33%,

precision = 1/1 = 100%

4. F-Score  

Fβ-score 是综合考虑召回率与精确率的一个加权调和平均指标,平衡召回率、精确率。F-score分数越高,说明模型质量越好。具体公式如下:

 

其中,β代表对召回率、精确率的不同重视程度:

β=1,二者一样重要,此时即为F1-Score;

β<1,精确率更为重要。比如在经济整体向好时,希望准确判断违约客户,以放出更多的贷款,提升利息收益;

β>1,召回率更为重要。经济状况不好时,更希望尽可能少漏掉违约客户,即更多的找出违约客户,避免本金损失。

II. python实现

实用角度出发,直接调用sklearn包,查看分类结果

from sklearn.metrics import classification_report
print(classification_report(y_test, pred_log, digits=3)) 

# y_test是划分出的测试集
# pred_log是依据分类器预测出的结果
# 通常保留3位小数便于比较

输出结果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值