跳到主要内容

模型评估

问题

如何评估一个机器学习模型的好坏?

答案

分类模型评估指标

指标公式适用场景
Accuracy正确预测数 / 总数类别均衡
PrecisionTP / (TP + FP)关注"预测为正的准确率"
RecallTP / (TP + FN)关注"正样本的覆盖率"
F12 × P × R / (P + R)P 和 R 的调和均值
AUCROC 曲线下面积综合评估,不受阈值影响
混淆矩阵
预测正预测负
实际正TP(真正)FN(假负)
实际负FP(假正)TN(真负)
from sklearn.metrics import (
classification_report, roc_auc_score, confusion_matrix
)

# 完整评估
y_pred = model.predict(X_test)
y_prob = model.predict_proba(X_test)[:, 1]

print(classification_report(y_test, y_pred))
print(f'AUC = {roc_auc_score(y_test, y_prob):.4f}')
print(f'混淆矩阵:\n{confusion_matrix(y_test, y_pred)}')

回归模型评估指标

指标说明
MAE平均绝对误差,直观好理解
RMSE均方根误差,对大误差惩罚更重
决定系数,模型解释了多少方差
MAPE平均绝对百分比误差,百分比表达

交叉验证

from sklearn.model_selection import cross_val_score

# 5 折交叉验证
scores = cross_val_score(model, X, y, cv=5, scoring='roc_auc')
print(f'AUC: {scores.mean():.4f} ± {scores.std():.4f}')

过拟合判断

信号说明
训练集指标远高于测试集模型记住了训练数据的噪声
测试集指标波动大模型不稳定
特征数远多于样本数高维"维度灾难"

应对策略:

  • 减少模型复杂度(降低树深度、正则化)
  • 增加训练数据
  • 特征选择,减少冗余特征
  • 使用交叉验证

常见面试问题

Q1: AUC 是什么?为什么比 Accuracy 好?

答案: AUC(Area Under ROC Curve)衡量模型区分正负样本的能力:

  • AUC = 0.5:随机猜测
  • AUC = 1.0:完美区分
  • 优势:不受类别不均衡影响,不依赖阈值选择

例如:在 1% 正样本的场景中,预测全为负也有 99% Accuracy,但 AUC 只有 0.5。

Q2: Precision 和 Recall 怎么取舍?

答案

场景优先理由
垃圾邮件检测Precision不能把正常邮件误判为垃圾
疾病筛查Recall不能漏诊
欺诈检测Recall宁可多查不能漏掉
推荐系统Precision推荐不准影响体验

相关链接