分类评估方法-混淆矩阵、精确率、召回率、F1值

本文会介绍机器学习中分类模型的评估方法
提问:分类模型能用准确率来评测吗?
答案:可以,但是结果不准确,拿逻辑回归模型进行举例,其主要用于二分类,即:A类还是B类,弱准确率是97%;不能说97%A类,3%的B类
所以要通过混淆矩阵来测评,即:精确率,召回率,F1,ROC,AUC

一、混淆矩阵的定义

真实结果 \ 预测结果 正例 假例
正例 真正例TP 伪反例FN
假例 伪正例FP 真反例TN

混淆矩阵四个指标

  • 真实值是正例的样本中,被分类为正例的样本数量,叫做真正例(TP,True Positive)
  • 真实值是正例的样本中,被分类为假例的样本数量,叫做伪反例(FN,False Negative)
  • 真实值是假例的样本中,被分类为正例的样本数量,叫做伪正例(FP,False Positive)
  • 真实值是假例的样本中,被分类为假例的样本数量,叫做真反例(TN,True Negative)

二、精确率(Precision)的定义

  • 查准率,对正例样本的预测准确率。比如:把恶性肿瘤当做正例样本,想知道模型对恶性肿瘤的预测准确率。
  • 计算方法:

\[P = \frac{TP}{TP+FP} \]

三、召回率(Recall)的定义

  • 也叫查全率,指的是预测为真正例样本占所有真实正例样本的比重。
    例如:恶性肿瘤当做正例样本,则我们想知道模型是否能把所有的恶性肿瘤患者都预测出来。
  • 计算方法:

\[\text{Recall} = \frac{TP}{TP+FN} \]

四、F1-score的定义

  • 若对模型的精确率、召回率都有要求,希望知道模型在这两个评估方向的综合预测能力,可以使用F1分数。
  • 计算方法:

\[F1 = \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision}+\text{Recall}} \]

五、代码实现

加载相应的库

import pandas as pd
from sklearn.metrics import confusion_matrix, precision_score, f1_score, recall_score

1. 定义变量,记录:样本数据

y_train = ["恶性", "恶性", "恶性", "恶性", "恶性", "恶性", "良性", "良性", "良性", "良性"]

2. 定义变量,记录:模型A的预测结果

y_pred_A = ["恶性", "恶性", "恶性", "良性", "良性", "良性", "良性", "良性", "良性", "良性"]

3.标签正例和反例

label = ['恶性','良性']
df_label = ['恶性(正例)','良性(反例)']

4. 针对于 真实值(y_train)和模型A的预测结果(y_pred_A),搭建混淆矩阵

cm_A = confusion_matrix(y_train, y_pred_A)
print(f'混淆矩阵A:\n{cm_A}')

5.为了测试结果更好看,吧上述的混淆矩阵转换成DataFrame

df_A = pd.DataFrame(cm_A,index=df_label,columns=df_label)
print(f'混淆矩阵的DataFrame形式:\n{df_A}')

6. 计算A模型的精确率,召回率,F1值

print(f'模型A精确率:{precision_score(y_train,y_pred_A,pos_label='恶性')}')
print(f'模型A召回率:{recall_score(y_train,y_pred_A,pos_label='恶性')}')
print(f'模型A F1值:{f1_score(y_train,y_pred_A,pos_label='恶性')}')
posted @ 2026-06-25 18:09  王新文  阅读(5)  评论(0)    收藏  举报