鱼C论坛

 找回密码
 立即注册
查看: 2209|回复: 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表示预测为负样本,实际为负样本


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

混淆矩阵的矩阵表示:
confusion_matrix = [[18 1]
                    [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绘制示例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc
# from sklearn import cross_validataon
from sklearn import model_selection as cv

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

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

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

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

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

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

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

plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()



001.png



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

AUC是ROC曲线下的面积,范围在0-1之间,AUC数值越大表示模型效果越好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 10:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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