记录一下混淆矩阵的学习心得,不写下来老是容易搞混..
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无太大意义。例如在实际生活中,大多数信用卡客户都不会违约(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 actual | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
t predicted-A | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
t predicted-B | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
模型 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位小数便于比较
输出结果如下:文章来源:https://www.toymoban.com/news/detail-499827.html
文章来源地址https://www.toymoban.com/news/detail-499827.html
到了这里,关于【机器学习】分类器性能度量——混淆矩阵及sklearn实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!