【CNN】模型评估标准

1.分类模型评价指标

在模型评估中,有多个标准用于衡量模型的性能,这些标准包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 分数(F1-Score)等。

P positive;N Negative

真正例(TP) :模型正确预测为正类的样本数量。

它真实标签是什么,预测值就是什么这就是TP

真负例(TN) :模型正确预测为负类的样本数量。

真实标签和预测标签不一样

假正例(FP) :模型错误预测为正类的样本数量。

比如预测标签是0,真实标签不是0,那么就是一个FP0

假负例(FN) :模型错误预测为负类的样本数量。

FN = 该类别真实样本数 - 正确预测数(TP)

比如真实标签0有3个 预测里面正确预测到了俩个 那么FN = 1

1. 理解数据

  • 真实标签y_true = [2, 0, 2, 2, 0, 1]

  • 预测标签y_pred = [0, 0, 2, 2, 0, 2]

2. 构建混淆矩阵

首先计算混淆矩阵(按类别0、1、2排列):

真实\预测 0 1 2
0 2 0 0
1 0 0 1
2 1 0 2
  • 类别0:真实为0的样本(索引1和4)

    • 预测结果:两个都被正确预测为0 → TP=2

    • 其他类别预测为0的样本:真实为2的样本(索引0)被预测为0 → FP=1

    • Precision₀ = TP / (TP + FP) = 2 / (2 + 1) = 2/3

  • 类别1:真实为1的样本(索引5)

    • 预测结果:真实为1被预测为2 → TP=0

    • 其他类别预测为1的样本:无 → FP=0

    • Precision₁ = 0 / (0 + 0) = 0(sklearn将分母为0时定义为0)

  • 类别2:真实为2的样本(索引0、2、3)

    • 预测结果:索引2和3正确预测为2 → TP=2

    • 其他类别预测为2的样本:真实为1(索引5)被预测为2 → FP=1

    • Precision₂ = 2 / (2 + 1) = 2/3

计算每个类别的FN

FN是行方向的误差(真实类别被漏判的数量)。对每个类别:

text

复制代码
FN = 该类别真实样本数 - 正确预测数(TP)
1. 类别 0
  • 真实样本数:2个(索引1和4)

  • 正确预测数(TP):2个(都被预测为0)

  • FN₀ = 2 - 2 = 0

2. 类别 1
  • 真实样本数:1个(索引5)

  • 正确预测数(TP):0个(未被预测为1)

  • FN₁ = 1 - 0 = 1

    (真实为1的样本被错误预测为2)

3. 类别 2
  • 真实样本数:3个(索引0、2、3)

  • 正确预测数(TP):2个(索引2和3被正确预测为2)

  • FN₂ = 3 - 2 = 1

    (真实为2的样本被错误预测为0)

2.准确率

**准确率(Accuracy)**准确率是最直观的评估指标,它表示模型预测正确的样本占总样本的比例。计算公式为:

复制代码
from sklearn.metrics import confusion_matrix,accuracy_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 假设我们有以下真实标签和预测结果
y_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])

# 计算准确率
accuracy = accuracy_score(y_true, y_pred)
print("准确率:", accuracy)

3.精确率(Precision)

精确率衡量模型预测为正类的实例中,实际为正类的比例。计算公式为:

对应多分类问题,采样宏平均精确率是每个类别的精确率的平均值,不考虑每个类别的样本数量。计算公式如下:

复制代码
from sklearn.metrics import confusion_matrix,accuracy_score,precision_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 假设我们有以下真实标签和预测结果
y_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])

# 计算精确率
precision = precision_score(y_true, y_pred, average='macro')
print("精确率:", precision)

4.召回率(Recall)

召回率衡量所有实际为正类的样本中,模型预测为正类的比例。计算公式为:

召回率关注的是模型捕捉正类样本的能力。在某些领域,如医疗诊断,召回率尤其重要,因为漏诊(假负例)的后果可能非常严重。

复制代码
from sklearn.metrics import confusion_matrix,accuracy_score,precision_score,recall_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 假设我们有以下真实标签和预测结果
y_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])

# 计算召回率
recall = recall_score(y_true, y_pred, average='macro')
print("召回率:", recall)

5.F1 分数(F1-Score)

F1分数是精确率和召回率的调和平均值,它平衡了这两个指标。计算公式为:

F1分数在精确率和召回率都较高的算法上表现出色。它是一个综合指标,特别适用于那些对精确率和召回率都同样重视的场景。

复制代码
from sklearn.metrics import confusion_matrix,accuracy_score,precision_score,recall_score,f1_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 假设我们有以下真实标签和预测结果
y_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])

# 计算准确率
accuracy = accuracy_score(y_true, y_pred)
print("准确率:", accuracy)

# 计算精确率
precision = precision_score(y_true, y_pred, average='macro')
print("精确率:", precision)

# 计算召回率
recall = recall_score(y_true, y_pred, average='macro')
print("召回率:", recall)

# 计算F1分数
f1 = f1_score(y_true, y_pred, average='macro')
print("F1分数:", f1)

6.混淆矩阵

混淆矩阵是评估分类问题的基础工具,它是一个表格,显示了分类算法的预测结果与真实标签之间的关系。对于二分类问题,混淆矩阵包含真正例(TP)、真负例(TN)、假正例(FP)和假负例(FN)。这些值是计算其他评估指标的基础。混淆矩阵不仅提供了一个直观的视觉表示,还允许我们深入了解模型在各个类别上的表现,特别是当处理不平衡数据集时,混淆矩阵可以揭示模型是否倾向于错误地将一个类别分类为另一个类别。

复制代码
from sklearn.metrics import confusion_matrix,accuracy_score,precision_score,recall_score,f1_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

y_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])

cm = confusion_matrix(y_true, y_pred)
plt.figure(figsize=(10,7))
sns.heatmap(cm, annot=True,fmt = "d",cmap = "Blues")
plt.xlabel('Predicted')
plt.ylabel('Truth')
plt.show()

7.ROC曲线和AUC值

ROC曲线是一个性能度量,显示了在不同阈值设置下模型的真正例率(召回率)和假正例率的关系。AUC值表示ROC曲线下的面积,用于衡量模型的整体性能,AUC值越高,模型性能越好。ROC曲线和AUC值是评估模型区分不同类别能力的重要工具,尤其在二分类问题中非常实用

复制代码
from sklearn.metrics import roc_curve,roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import numpy as np
import matplotlib.pyplot as plt

X = np.array([[0,0],[1,1],[2,0],[2,2],[0,1]])
y = np.array([1,1,0,1,0])

plt.scatter(X[y==0,0],X[y==0,1],color = "red",label = "Class 0")
plt.scatter(X[y==1,0],X[y==1,1],color = "blue",label = "Class 1")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.legend()
plt.title("Data Points by Class")
plt.grid(True)
plt.show()

x_train,x_test,y_train,y_test = train_test_split(X,y,test_size = 0.4,random_state = 42)
print("------训练样本------")
print(x_train,y_train)
print("------测试样本------")
print(x_test,y_test)

clf = RandomForestClassifier(n_estimators = 100,max_depth = 2,random_state = 42)
clf.fit(x_train,y_train)

y_scores = clf.predict_proba(x_test)[:,1]
fpr,tpr,thresholds = roc_curve(y_test,y_scores)
auc = roc_auc_score(y_test,y_scores)

plt.figure()
plt.plot(fpr,tpr,color = "darkorange",lw = 2,label = "ROC curve (area = %0.2f)" % auc)
plt.plot([0,1],[0,1],color = "navy",lw = 2,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')
plt.legend(loc="lower right")
plt.show()

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| | |

相关推荐
小关会打代码2 分钟前
Python编程进阶知识之第五课处理数据(matplotlib)
开发语言·python·机器学习·matplotlib·绘图
可涵不会debug21 分钟前
AI浪潮涌,数据库“融合智能”奏响产业新乐章
数据库·人工智能
wei_shuo27 分钟前
融合与智能:AI 浪潮驱动下数据库的多维度进化与产业格局重塑新范式
数据库·人工智能·金仓数据库
洛华3631 小时前
初识opencv04——图像预处理3
人工智能·python·opencv·计算机视觉
才聚PMP1 小时前
如何借助AI工具?打赢通信设备制造的高风险之战?(案例分享)
人工智能·制造
猎板小张1 小时前
厚铜板载流革命与精密压合工艺——高可靠性PCB批量制造的新锚点
人工智能
2zcode3 小时前
基于Matlab图像处理的水果分级系统
图像处理·人工智能·matlab
青云交3 小时前
Java 大视界 -- Java 大数据机器学习模型在金融衍生品市场波动特征挖掘与交易策略创新中的应用(363)
java·大数据·机器学习·量化交易·金融衍生品·交易策略·波动率预测
wh_xia_jun3 小时前
基于深度学习的胸部 X 光图像肺炎分类系统(四)
人工智能·深度学习·分类
cwn_8 小时前
Sequential 损失函数 反向传播 优化器 模型的使用修改保存加载
人工智能·pytorch·python·深度学习·机器学习