一、模型评估方法论
1. 评估流程全景图

2. 数据划分策略对比
|
方法 |
适用场景 |
优缺点 |
|
留出法 |
大数据量(>100万样本) |
简单但浪费数据 |
|
K折交叉验证 |
中小数据集 |
结果稳定,计算成本高 |
|
时间序列划分 |
时序数据(如股票预测) |
避免未来信息泄漏 |
|
分层抽样 |
类别不平衡数据 |
保持各类别比例一致 |
二、Loss函数:模型训练的“指南针”
1. 常见Loss函数矩阵
|
任务类型 |
Loss函数 |
公式 |
特性 |
|
分类任务 |
交叉熵损失 |
对错误预测惩罚严厉 |
|
|
回归任务 |
均方误差(MSE) |
对异常值敏感 |
|
|
目标检测 |
Focal Loss |
解决类别不平衡 |
|
|
生成对抗 |
Wasserstein距离 |
训练更稳定 |
|
|
多任务学习 |
动态加权Loss |
随时间调整各任务权重 |
2. 进阶Loss设计技巧
▍Label Smoothing
- 作用:防止模型对标签过度自信
- 实现:
- def smooth_labels(y, alpha=0.1): return y * (1 – alpha) + alpha / y.shape
▍自定义Loss示例(MAE+MSE混合)
class HybridLoss(nn.Module):
def __init__(self, alpha=0.5):
super().__init__()
self.alpha = alpha
def forward(self, pred, target):
mse = F.mse_loss(pred, target)
mae = F.l1_loss(pred, target)
return self.alpha * mse + (1 - self.alpha) * mae
三、性能指标:模型能力的“标尺”
1. 分类任务指标
|
指标 |
公式/计算 |
适用场景 |
|
准确率 |
类别平衡时有效 |
|
|
准确率 |
重点关注假阳性(如垃圾邮件过滤) |
|
|
召回率 |
重点关注假阴性(如癌症筛查) |
|
|
F1 Score |
平衡准确率与召回率 |
|
|
AUC-ROC |
ROC曲线下面积 |
综合评估分类器性能 |
▍多分类指标扩展
from sklearn.metrics import classification_report
print(classification_report(y_true, y_pred, target_names=class_names))
2. 回归任务指标
|
指标 |
公式 |
特点 |
|
MAE |
绝对误差,解释性强 |
|
|
MSE |
放大大误差 |
|
|
R² Score |
解释方差比例,[0,1]区间 |
|
|
MAPE |
百分比误差,避免量纲影响 |
3. 计算机视觉特殊指标
|
指标 |
计算方式 |
适用任务 |
|
IoU |
目标检测/分割 |
|
|
mAP |
各类别AP的平均值 |
目标检测(COCO标准) |
|
PSNR |
图像重建质量评估 |
|
|
SSIM |
结构类似性(亮度/对比度/结构) |
图像生成任务 |
四、模型诊断与调优
1. 性能问题排查指南
|
现象 |
可能缘由 |
解决方案 |
|
训练Loss不下降 |
学习率设置不当 |
尝试LR range test |
|
验证集过拟合 |
模型复杂度高/数据量少 |
增加Dropout/数据增强 |
|
测试集性能骤降 |
数据分布偏移 |
检查数据预处理一致性 |
|
指标波动大 |
Batch Size太小 |
增大Batch Size或使用梯度累积 |
2. 指标冲突解决方案
场景:准确率90%但召回率仅50%
- 方案1:调整分类阈值(如从0.5→0.3)
- 方案2:使用Fβ Score(β>1侧重召回率)
- 方案3:过采样少数类或设计代价敏感Loss
五、前沿评估体系
1. 大模型特有评估
|
评估维度 |
方法 |
工具 |
|
指令跟随 |
HumanEval评分 |
OpenAI Evals |
|
安全性 |
对抗Prompt测试 |
Anthropic Red Teaming |
|
偏见检测 |
StereoSet数据集 |
HuggingFace Evaluate |
2. 自动化评估平台
- Weights & Biases:可视化跟踪实验指标
- MLflow:端到端指标管理与模型比对
- TensorBoard:实时监控Loss曲线
六、知识总结
- Loss函数是模型优化的导航标,需根据任务特性定制
- 性能指标选择应紧密对齐业务目标(如医疗重召回,金融重准确)
- 模型评估是迭代过程的指南针,需贯穿开发全生命周期
实战任务:
- 为类别不平衡数据集(1:100)设计加权交叉熵Loss
- 对比MSE与MAE在房价预测任务中的指标差异
- 用PyTorch实现Dice Loss用于医学图像分割