鱼C论坛

 找回密码
 立即注册
查看: 2524|回复: 0

[学习笔记] 混淆矩阵

[复制链接]
发表于 2022-6-1 12:27:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Handsome_zhou 于 2022-10-18 13:24 编辑

混淆矩阵是分类模型的一种评价指标。

混淆矩阵的表格表示:
01.png

如上图,T/F表示预测正确/预测错误,P/N表示预测为正样本/预测为负样本。

TP表示预测为正样本,实际也为正样本
FP表示预测为正样本,实际为负样本
FN表示预测为负样本,实际为正样本
TN表示预测为负样本,实际为负样本


混淆矩阵也称为误差矩阵,就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。

混淆矩阵的矩阵表示:
  1. confusion_matrix = [[18 1]
  2.                     [1 19]]
复制代码


在混淆矩阵中,第二,第四象限对应的位置的数值越多越好。第一,第三象限对应位置的数值越少越好。


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

1、准确率(Accuracy)----针对整个模型
2、精确度(Precision)
3、灵敏度(Sensitivity):就是召回率(Recall)
4、特异度(Specificity)

四种指标的定义、计算、理解:
02.png

其中,PPV:positive prediction value, TPR:true positive rate TNR:true negative rate

在如上四个指标上进行拓展,会产生另外一个三级指标:
F1 Score = 2PR/(P+R)
其中,P代表precision,R代表Recall。
F1-Score指标综合了Precision与Recall的产出的结果。取值范围从0到1。1代表模型的输出结果最好,0代表结果最差。


ROC与AUC

ROC使用混淆矩阵的TPR=TP/(TP+FN)(灵敏度,召回率)为纵坐标轴,FPR = FP/(FP+TN)为横坐标轴绘制。

ROC绘制示例:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from sklearn import svm, datasets
  4. from sklearn.metrics import roc_curve, auc
  5. # from sklearn import cross_validataon
  6. from sklearn import model_selection as cv

  7. #导入数据
  8. iris = datasets.load_iris()
  9. X = iris.data
  10. y = iris.target

  11. #二分类
  12. X, y = X[y != 2], y[y != 2]

  13. #增加噪声
  14. random_state = np.random.RandomState(0)
  15. n_samples, n_features = X.shape
  16. X = np.c_[X, random_state.randn(n_samples, 200*n_features)]
  17. #分割训练和测试集
  18. X_train, X_test, y_train, y_test = cv.train_test_split(X,y, test_size=.3,random_state=0)

  19. #学习预测每个类与其他类
  20. svm = svm.SVC(kernel='linear', probability=True, random_state=random_state)

  21. y_score = svm.fit(X_train, y_train).decision_function(X_test)

  22. fpr, tpr, threshold = roc_curve(y_test, y_score)
  23. roc_auc = auc(fpr, tpr)

  24. plt.figure()
  25. lw = 2
  26. plt.figure(figsize=(10,10))
  27. plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)

  28. plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
  29. plt.xlim([0.0, 1.0])
  30. plt.ylim([0.0, 1.05])
  31. plt.xlabel('False Positive Rate')
  32. plt.ylabel('True Positive Rate')
  33. plt.title('Receiver operating characteristic example')
  34. plt.legend(loc="lower right")
  35. plt.show()
  36. 001.png
复制代码


关于ROC含义的具体的讲解:https://zhuanlan.zhihu.com/p/390518914

AUC是ROC曲线下的面积,范围在0-1之间,AUC数值越大表示模型效果越好。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 23:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表