首页 > 编程知识 正文

什么是矩阵,利用混淆矩阵计算评价指标

时间:2023-05-05 04:57:37 阅读:41142 作者:2414

本文介绍如何混淆矩阵(confusion_matrix )

混淆矩阵定义及表示含义 :

模糊矩阵是基于两个准则以矩阵形式将数据集中的记录组合起来的:真实类别和根据分类模型预测的类别判断。 矩阵的行表示真值,矩阵的列表示预测值。

TP(True Positive): 将正类预测为正类数 即正确预测,真实为0,预测也为0

FN (False Negative):将正类预测为负类 即错误预测,真实为0,预测为1

FP(False Positive):将负类预测为正类数 即错误预测,真实为1,预测为0

TN (True Negative):将负类预测为负类数,即正确预测,真实为1,预测也为1

4种评估方法:

精确率Precision=TP / (TP+FP), 在预测是Positive所有结果中,预测正确的比重

召回率recall=TP / (TP+FN), 在真实值为Positive的所有结果中,预测正确的比重

准确率accuracy=(TP+TN) / (TP+FN+FP+TN) 所有预测为正确结果所占总预测值的比重

特异度Specificity = TN / (TN+FP) 在真实值是Negative的所有结果中,预测正确的比重

可以看到准确率中的分子值就是矩阵对角线上的值。

首先以二分类为例,看看矩阵的表现形式。 如下所示。

现在列举一下混合同行列表。 宠物店里有10只动物,其中有6只狗和4只猫,现在有分类器把这10只动物分类。

分类结果为狗5只,猫5只(5=1) 4。 中,建立分类结果的模糊矩阵并进行分析后,

可以通过混淆矩阵简单计算真值犬的数量(行数的相加)为6=5) 1,

分类得到的狗的数量(列数相加)为5=5,实际的猫的数量为4=0) 4,

以狗为例:

Precision(狗):5 / 5 =100%

recall (狗):5 / 6 = 83.3%

accuracy :9 / 10 = 90%

http://www.Sina.com/: http://www.Sina.com /

那么,对于多分类问题来说:

与二分类混淆矩阵同样,在矩阵行数据相加是真值类别数,列数据相加是分类后的类别数的情况下,与之相应地有以下的计算式;

Specificity

4 / 4 = 100%

精确率_狗= 5 / 6 = 83.3%

与二分类混淆矩阵同样,在矩阵行数据相加是真值类别数,列数据相加是分类后的类别数的情况下,与之相应地有以下的计算式;

召回率_狗 = 5 / 9 = 55.5%

通用做法:

精确率_类别1=a/(a+d+g)

froms klearn.metricsimportconfusion _ matrixfromsklearn.metricsimportrecall _ scoreimportmatplotlib.pyplotasplt #预测量数据1,0,1,2,1,0,0,1 ] #类别classes=list(set ) (fact ) ) #混淆矩阵confusion=confusion _ matrix (guess ) 之后是指定的颜色块。 可以是gray,也可以是gray_x的相反颜色,PLT.imshow ) conf

usion, cmap=plt.cm.Blues)# 这个东西就要注意了# ticks 这个是坐标轴上的坐标点# label 这个是坐标轴的注释说明indices = range(len(confusion))# 坐标位置放入# 第一个是迭代对象,表示坐标的顺序# 第二个是坐标显示的数值的数组,第一个表示的其实就是坐标显示数字数组的index,但是记住必须是迭代对象plt.xticks(indices, classes)plt.yticks(indices, classes)# 热度显示仪?就是旁边的那个验孕棒啦plt.colorbar()# 就是坐标轴含义说明了plt.xlabel('guess')plt.ylabel('fact')# 显示数据,直观些for first_index in range(len(confusion)): for second_index in range(len(confusion[first_index])): plt.text(first_index, second_index, confusion[first_index][second_index]) # 显示plt.show() # PS:注意坐标轴上的显示,就是classes# 如果数据正确的,对应关系显示错了就功亏一篑了# 一个错误发生,想要说服别人就更难了from sklearn.metrics import confusion_matrixfrom sklearn.metrics import recall_scoreimport matplotlib.pyplot as plt # 预测数据,predict之后的预测结果集guess = [1, 0, 1, 2, 1, 0, 1, 0, 1, 0]# 真实结果集fact = [0, 1, 0, 1, 2, 1, 0, 1, 0, 1]# 类别classes = list(set(fact))# 排序,准确对上分类结果classes.sort()# 对比,得到混淆矩阵confusion = confusion_matrix(guess, fact)# 热度图,后面是指定的颜色块,gray也可以,gray_x反色也可以plt.imshow(confusion, cmap=plt.cm.Blues)# 这个东西就要注意了# ticks 这个是坐标轴上的坐标点# label 这个是坐标轴的注释说明indices = range(len(confusion))# 坐标位置放入# 第一个是迭代对象,表示坐标的顺序# 第二个是坐标显示的数值的数组,第一个表示的其实就是坐标显示数字数组的index,但是记住必须是迭代对象plt.xticks(indices, classes)plt.yticks(indices, classes)# 热度显示仪?就是旁边的那个验孕棒啦plt.colorbar()# 就是坐标轴含义说明了plt.xlabel('guess')plt.ylabel('fact')# 显示数据,直观些for first_index in range(len(confusion)): for second_index in range(len(confusion[first_index])): plt.text(first_index, second_index, confusion[first_index][second_index]) # 显示plt.show() # PS:注意坐标轴上的显示,就是classes# 如果数据正确的,对应关系显示错了就功亏一篑了# 一个错误发生,想要说服别人就更难了

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。