【机器学习-分类模型评价指标】混淆矩阵&分类报告

一、混淆矩阵(误差矩阵)

混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆矩阵多用于判断分类器(Classifier)的优劣,适用于分类型的数据模型,如分类树(Classification Tree)、逻辑回归(Logistic Regression)、线性判别分析(Linear Discriminant Analysis)等方法。
 

  1. TP(True Positive):将正确类预测为正确类,真实为0,预测也为0
  2. FN(False Negative):将正确类预测为错误类,真实为0,预测为1
  3. FP(False Positive):将错误类预测为正确类, 真实为1,预测为0
  4. TN(True Negative):将错误类预测为错误类,真实为1,预测也为1 

 四个二级指标

混淆矩阵里面统计的是个数,有时候面对大量的数据,光凭算个数,很难衡量模型的优劣。因此混淆矩阵在基本的统计结果上又延伸了如下4个指标

  • 准确率(Accuracy)—— 针对整个模型
  • 精确率(Precision)
  • 灵敏度(Sensitivity)即召回率(Recall)  衡量了分类器对正例的识别能力
  • 特异度(Specificity)衡量了分类器对负例的识别能力

 三级指标

在实际场景中,有时候需要同时关注精准率和召回率。这种情况下我们有一个新的指标:F1 Score,它的计算公式为:

F1 score = \frac{2PrecisionRecall}{Precision+Recall}

F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。

 python画混淆矩阵 

import seaborn as sns
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt

sns.set()
f,ax = plt.subplots()
y_true = [0,0,1,2,1,2,0,2,2,0,1,1]#真实的分类
y_pred = [1,0,1,2,1,0,0,2,2,0,1,1]#模型的分类结果
C2 = confusion_matrix(y_true,y_pred,labels=[0,1,2])
#打印 C2
print(C2)
sns.heatmap(C2,annot=True,ax=ax) #画热力图

ax.set_titile('confusion matrix') #标题
ax.set_xlabel('predict') #x 轴
ax.set_ylabel('true') #y 轴
'''结果
[[3 1 0]
 [0 4 0]
 [1 0 3]'''

共三类:对角线值越大说明分类越正确

类1:总数为4(第一行所有元素值相加) ,有一个错误分类,将属于类1的分到类2去了

类2:   总数为4,分类正确率都正确(没有把属于类2分到其他类) ,即召回率等于1

类3:总数为4,有一个错误分类,把属于类3的分到类1去了

sklearn求评估指标

# 评估指标
from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,cohen_kappa_score
print('预测数据的准确率为: {:.4}%'.format(accuracy_score(y_test,y_pred)*100))
print('预测数据的精确率为:{:.4}%'.format(
      precision_score(y_test,y_pred)*100))
print('预测数据的召回率为:{:.4}%'.format(
      recall_score(y_test,y_pred)*100))
# print("训练数据的F1值为:", f1score_train)
print('预测数据的F1值为:',
      f1_score(y_test,y_pred))
print('预测数据的Cohen’s Kappa系数为:',
      cohen_kappa_score(y_test,y_pred))

 二、分类报告

def classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False) 

该函数就是在进行了分类后,输入原始真实数据(y_true)和预测数据(y_pred)而得到分类报告,常常用来观察模型的好坏,如利用f1-score进行评判

# 打印分类报告
print('预测数据的分类报告为:','
',
      classification_report(y_test,y_pred))
  • 使用 sklearn.metric.classification_report 工具对模型的测试结果进行评价时,会输出如下结果:(表格)    分为0/1两类

0                        precision         recall           f1-score                support
0                         0.99                     1             0.99                    155
1                         0.90                0.82             0.86                     11

accuracy                                                        0.98                    166
macro avg           0.94                0.91            0.92                     166
weighted avg       0.98                0.98            0.98                     166

类1: 召回率=1,精确率=0.99 说明,本类分类正确,其他类有错分到本类的情况
类2: 召回率<1, 说明本类的有错分到其他类的情况

召回率越大说明,本类错分到其他类的情况小
总结:
召回率:说明本类分类的正确性,召回率越大说明,对本类的识别效果越好
精确率:模型预测的正类结果中,有多少是正类

 

  • micro avg、macro avg 和weighted avg 的计算方式。

1、宏平均 macro avg:

对每个类别的 精确率、召回率和F1 score   加和求平均。

例:精确率的 macro avg=(P_no+P_yes)/2=(0.99 +0.90  )/2  = 0.94

2、微平均 micro avg:

  • 不区分样本类别,计算整体的精确率、召回率和F1 score
  • 微平均是将所有类中中真阳例先加起来,再除以所有类中的(真阳例+假阳例)
  • 微平均在classification_report中只有在多标签分类的时候才会显示,多标签不是指多个类,而是一个样本可能属于两个或以上的类。

3、加权平均 weighted avg和加权平均 weighted avg:

  • 加权平均 weighted avg是对宏平均的一种改进,考虑了每个类别样本数量在总样本中占比

精确度P的weighted avg  = (P1 * support1 + P2 * support2) / (support1+support2) 

  • 样本平均(sample avg):跟微平均一样,仅在多标签分类时显示

4、support:支持度,即属于每一类的个数
 

  • 5
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值