混淆矩阵含义及python代码实现

一、分类评估指标中定义的一些符号含义

  1. TP:将正类预测为正类数,真实为0,预测也为0
  2. FN:将正类预测为负类数,真实为0,预测为1
  3. FP:将负类预测为正类数, 真实为1,预测为0
  4. TN:将负类预测为负类数,真实为1,预测也为1

 二、混淆矩阵定义及表示含义

混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值。

二分类问题:

  混淆矩阵

     预测值

正(猫) 负(狗)

正(猫)      3     0
负(狗)       1      2

通过混淆矩阵我们可以轻松算的真实值猫的数量(行数量相加)为3=3+0,分类得到猫的数量(列数量相加)为4=3+1。真实狗的数量为3=1+2,分类得到狗的数量为2=0+2。同时,我们不难发现,对于二分类问题,矩阵中的4个元素刚好表示TP,TN,FP,TN这四个符号量 。

  混淆矩阵

      预测值

      正     负

     正       TP(a)     FN(b)
     负       FP(c)      TN(d)

则:精确率:Precision=a/(a+c)=TP/(TP+FP)

召回率:recall=a/(a+b)=TP/(TP+FN)

准确率:accuracy=(a+d)/(a+b+c+d)=(TP+TN)/(TP+FN+FP+TN)

多分类问题: 

   混淆

   矩阵

       预测值

类别1 类别2 类别3

类别1     a     b      c
类别2    d     e      f
类别3     g      h      i

矩阵行数据相加是真实值类别数,召回率_类别1=a/(a+b+c) 。列数据相加是分类后的类别数, 精确率_类别1=a/(a+d+g)。对角线相加是分类准确率,准确率accuracy=(a+e+i)/(a+b+c+d+e+f+g+h+i)

三、Python代码实现混淆矩阵

sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)

y_true:是样本真实分类结果,y_pred 是样本预测分类结果 ,labels是所给出的类别,通过这个可对类别进行选择 ,sample_weight 是样本权重。我们用confusion_matrix生成矩阵数据,然后用seaborn的热度图绘制出混淆矩阵数据:

import seaborn as sns
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
sns.set()
y_true = ["cat", "dog", "cat", "cat", "dog", "rebit"]
y_pred = ["dog", "dog", "rebit", "cat", "dog", "cat"]
C2= confusion_matrix(y_true, y_pred, labels=["dog", "rebit", "cat"])
sns.heatmap(C2,annot=True)

参考文献:

https://baijiahao.baidu.com/s?id=1619821729031070174&wfr=spider&for=pc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章