混淆矩阵 python,多分类的混淆矩阵
本文主要介绍两种多分类混淆矩阵的Python实现。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
00-1010 1.什么是混淆矩阵2,分类模型的评价指标3,两种多分类混淆矩阵3.1?直接打印出每个类别的分类准确率。3.2打印具体分类结果的数值4。总结一下。
目录
在深度学习中,混淆矩阵是绘制ROC曲线的基础,也是衡量分类模型准确性的最基本、最直观、最简单的方法。它可以直观地了解分类模型在每一类样本中的表现,经常作为模型评估的一部分。它可以很容易地指出多个类之间是否存在混淆(即一个类被预测为另一个类)。
首先,我们必须澄清几个概念:
或者t:样本是否被正确分类。
或者p:样本是阳性还是阴性。
真正(TP):预测正确;模型也是正例,样本的真类别是正例,真负例(TN):正确预测:模型预测负例,样本的真类别是负例,假正例(FP):预测误差:模型预测正例,样本的真类别是负例,假负例(FN):预测误差;模型预测为负例,样本真实类别为正例。将这四个指标一起呈现在一个表格中,就可以得到下面这个矩阵,我们称之为混淆矩阵。在这里,我从其他文章里偷了一张图:
在混合线矩阵中,对角线是分割线。上图就是一个例子:对角线位置表示预测正确,对角线外的位置表示该样本被错误预测为其他样本。
1、什么是混淆矩阵
从混淆矩阵中,可以直观地看到各个参数的数值。准确率是模型预测对在所有模型预测为正的样本中所占的比例,即“分类器认为是正的且为正的部分占所有分类器认为是正的比例”。计算公式如下:
F1分数指示器结合了精确度和召回率的输出结果。f1-得分范围从0到1,1代表模型的最佳输出,0代表模型的最差输出。计算公式如下:
除了F1分,F2分和F0.5分在统计中也有广泛应用。其中,在F2评分中,召回率的权重高于精确率的权重,而在F0.5评分中,精确率的权重高于召回率的权重。
2、分类模型评价指标
多分类混淆矩阵可以根据不同的要求绘制不同的矩阵:
1.直接打印出每个类别的分类准确率。
2.打印具体分类结果的数值,便于各种指标的数据分析和计算。
在介绍具体代码之前,先介绍一下混淆_矩阵()函数,这是Python中sklearn库提供的输出矩阵数据的方法:
定义混淆矩阵(y_true,y_pred,labels=None,sample_weight=None):
参数含义:
Y _ true3360是样本的真实分类结果,y _ pred3360是样本的预测分类结果y _ pred:预测结果标签:给定类别,通过它可以选择类别sample_weight :样本权重
3、两种多分类混淆矩阵
#显示混淆矩阵
定义绘图_混淆(模型,x _值,y _值):
#获得预测结果
预测=预测(模型,x_val)
#获得真正的标签
true label=y _ val . arg max(axis=-1)#将one-hot转换为标签
cm=混淆矩阵
(y_true=truelabel, y_pred=predictions)
plt.figure()
# 指定分类类别
classes = range(np.max(truelabel)+1)
title=Confusion matrix
#混淆矩阵颜色风格
cmap=plt.cm.jet
cm = cm.astype(float) / cm.sum(axis=1)[:, np.newaxis]
plt.imshow(cm, interpolation=nearest, cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)
thresh = cm.max() / 2.
# 按照行和列填写百分比数据
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, {:.2f}.format(cm[i, j]), horizontalalignment="center",
color="white" if cm[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel(True label)
plt.xlabel(Predicted label)
plt.show()
3.2打印具体的分类结果的数值
# 显示混淆矩阵def plot_confuse_data(model, x_val, y_val):
classes = range(0,6)
predictions = predict(model,x_val)
truelabel = y_val.argmax(axis=-1) # 将one-hot转化为label
confusion = confusion_matrix(y_true=truelabel, y_pred=predictions)
#颜色风格为绿。。。。
plt.imshow(confusion, cmap=plt.cm.Greens)
# ticks 坐标轴的坐标点
# label 坐标轴标签说明
indices = range(len(confusion))
# 第一个是迭代对象,表示坐标的显示顺序,第二个参数是坐标轴显示列表
plt.xticks(indices, classes)
plt.yticks(indices, classes)
plt.colorbar()
plt.xlabel(Predicted label)
plt.ylabel(True label)
plt.title(Confusion matrix)
# plt.rcParams两行是用于解决标签不能显示汉字的问题
plt.rcParams[font.sans-serif]=[SimHei]
plt.rcParams[axes.unicode_minus] = False
# 显示数据
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()
4、总结
1、混淆矩阵是深度学习中分类模型最常用的评估指标。网上大部分都是显示各类的分类正确率,不够灵活。显示具体数值灵活性大,可以计算自己想要的指标。
2、多分类的混淆矩阵中 查准率为主对角线上的值除以该值所在列的和;召回率等于主对角线上的值除以该值所在行的和。
以上就是Python实现两种多分类混淆矩阵的详细内容,更多关于Python多分类混淆矩阵的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。