混淆矩阵
本帖最后由 Handsome_zhou 于 2022-10-18 13:24 编辑混淆矩阵是分类模型的一种评价指标。
混淆矩阵的表格表示:
如上图,T/F表示预测正确/预测错误,P/N表示预测为正样本/预测为负样本。
TP表示预测为正样本,实际也为正样本
FP表示预测为正样本,实际为负样本
FN表示预测为负样本,实际为正样本
TN表示预测为负样本,实际为负样本
混淆矩阵也称为误差矩阵,就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。
混淆矩阵的矩阵表示:
confusion_matrix = [
]
在混淆矩阵中,第二,第四象限对应的位置的数值越多越好。第一,第三象限对应位置的数值越少越好。
混淆矩阵的二级指标:
混淆矩阵里面统计的是个数,有时候面对大量的数据,光凭算个数,很难衡量模型的优劣。因此混淆矩阵在基本的统计结果上又延伸了如下4个指标:
1、准确率(Accuracy)----针对整个模型
2、精确度(Precision)
3、灵敏度(Sensitivity):就是召回率(Recall)
4、特异度(Specificity)
四种指标的定义、计算、理解:
其中,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
#增加噪声
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape
X = np.c_
#分割训练和测试集
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(, , color='navy', lw=lw, linestyle='--')
plt.xlim()
plt.ylim()
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
关于ROC含义的具体的讲解:https://zhuanlan.zhihu.com/p/390518914
AUC是ROC曲线下的面积,范围在0-1之间,AUC数值越大表示模型效果越好。
页:
[1]