评估前先说明正类是什么、漏报和误报分别意味着什么。指标不是模型训练结束后随手挑一个最漂亮的数字。

从混淆矩阵开始

二分类中,TP 是正确识别的正类,FN 是漏掉的正类,FP 是误报,TN 是正确识别的负类。准确率看全部样本的正确比例;召回率看正类中找回多少;精确率看报出的正类中多少是真的。类别比例和错误代价会影响指标选择。Google 机器学习课程:准确率、精确率与召回率

下面用人工标签说明“全猜多数类”的问题,不代表真实业务效果。

import numpy as np
from sklearn.metrics import accuracy_score, confusion_matrix, recall_score

truth = np.array([0] * 99 + [1])
prediction = np.zeros_like(truth)
matrix = confusion_matrix(truth, prediction, labels=[0, 1])
tn, fp, fn, tp = matrix.ravel()
assert (tn, fp, fn, tp) == (99, 0, 1, 0)
assert accuracy_score(truth, prediction) == 0.99
assert recall_score(truth, prediction, zero_division=0) == 0
print("accuracy=0.99, positive recall=0.00")

零分母的处理也属于评估约定,不能悄悄换一个设置让结果好看。多分类还要说明 Macro、Micro 或加权平均;它们对小类和大类的权重不同。scikit-learn 指标接口

概率、阈值与排序分别检查

一个模型可以先输出分数,再通过阈值得到类别。改变阈值会改变误报、漏报和工作量。阈值应依据训练内验证或独立验证集确定,不能看测试集后反复调整。

ROC-AUC、PR 曲线或 AP 侧重排序,固定阈值的 Precision、Recall、F1 侧重具体决策。排序好不等于概率校准好,也不保证某个默认阈值适合部署。

我会保存的评估记录

每次实验记录划分单位、各类样本数、正类定义、主指标及平均方式、阈值来源、混淆矩阵和不确定性。对回归任务则另行选择误差指标,不套用分类准确率;R² 也不是“预测正确的比例”。

选择模型、缺失处理方法和阈值,都属于训练内决策。先用测试结果挑方案,再把这个结果称作独立测试,会高估性能。一个数字再高,也不能替代数据边界检查。

来源与核验边界

本篇结合疏锦行机器学习基础班《机器学习简单流程》的模型评估部分,整理成指标选择与阈值检查笔记。人工标签示例已运行,没有复现课程业务项目成绩。视频口头内容尚未逐节核验,原课件不公开。