混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆矩阵多用于判断分类器(Classifier)的优劣,适用于分类型的数据模型,如分类树(Classification Tree)、逻辑回归(Logistic Regression)、线性判别分析(Linear Discriminant Analysis)等方法。
混淆矩阵里面统计的是个数,有时候面对大量的数据,光凭算个数,很难衡量模型的优劣。因此混淆矩阵在基本的统计结果上又延伸了如下4个指标
在实际场景中,有时候需要同时关注精准率和召回率。这种情况下我们有一个新的指标:F1 Score,它的计算公式为:
F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。
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去了
# 评估指标
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))
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, 说明本类的有错分到其他类的情况召回率越大说明,本类错分到其他类的情况小
总结:
召回率:说明本类分类的正确性,召回率越大说明,对本类的识别效果越好
精确率:模型预测的正类结果中,有多少是正类
1、宏平均 macro avg:
对每个类别的 精确率、召回率和F1 score 加和求平均。
例:精确率的 macro avg=(P_no+P_yes)/2=(0.99 +0.90 )/2 = 0.94
2、微平均 micro avg:
3、加权平均 weighted avg和加权平均 weighted avg:
精确度P的weighted avg = (P1 * support1 + P2 * support2) / (support1+support2)
4、support:支持度,即属于每一类的个数