ML 学习站
跳到正文

如何评估模型

训练/测试集划分、交叉验证、回归与分类常用指标。

30 分钟4 / 61,570
加载中...

如何评估模型

训练完一个模型,你怎么知道它好不好? 这一章讲评估的核心方法。

为什么不能直接用训练数据评估?

一个最常见的错误:在训练数据上算准确率,觉得"99% 准了,完美!"

这是大错特错。模型可能只是把训练数据"背下来了"——遇到新数据就抓瞎。这种现象叫做过拟合(下一章会详细讲)。

正确做法:把数据分成两份,一份训练,一份测试,只在测试集上评估

训练集 / 验证集 / 测试集

最规范的划分是三七开:

数据集比例用途
训练集60%训练模型参数
验证集20%调超参数(学习率、正则化强度)
测试集20%最终评估,只准看一次

交叉验证(Cross-Validation)

数据少的时候,把数据切成 7:3 可能太奢侈了。K 折交叉验证用更少的数据浪费做更可靠的评估:

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression

model = LinearRegression()
scores = cross_val_score(model, X, y, cv=5, scoring='r2')
print(f"5 折交叉验证的 R^2: {scores.mean():.3f} +/- {scores.std():.3f}")

原理:把数据切成 5 份,轮流用 4 份训练、1 份测试,跑 5 次取平均。

第1折: [验证][训练][训练][训练][训练]
第2折: [训练][验证][训练][训练][训练]
第3折: [训练][训练][验证][训练][训练]
第4折: [训练][训练][训练][验证][训练]
第5折: [训练][训练][训练][训练][验证]

回归任务常用指标

指标公式直观含义
MSE(1/n) * sum((y_hat - y)^2)误差的平方平均,对大误差敏感
RMSEsqrt(MSE)跟 y 同量级,容易解释
MAE(1/n) * sum(|y_hat - y|)误差的绝对值平均,对异常值稳健
R^21 - sum((y_hat - y)^2) / sum((bar_y - y)^2)解释了多少方差,1=完美,0=跟均值一样差

分类任务常用指标

准确率(Accuracy)是最直白的:预测正确的比例。但在类别不平衡时会骗人。

假设 100 个邮件里 95 个是正常邮件,5 个是垃圾邮件。一个"全部预测为正常"的傻模型,准确率高达 95%!但它一个垃圾邮件都没抓出来。

这时候要看精确率(Precision)、召回率(Recall)和 F1 分数:

指标公式关注点
PrecisionTP / (TP + FP)我说是垃圾的有多少真垃圾(查准)
RecallTP / (TP + FN)真的垃圾有多少被我抓出来了(查全)
F12PR / (P+R)P 和 R 的调和平均,综合看待
from sklearn.metrics import classification_report

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

会输出类似:

              precision    recall  f1-score   support
     正常       0.98      1.00      0.99        95
     垃圾       1.00      0.80      0.89         5
   accuracy                          0.98       100

小结

  • 评估模型必须在没见过的数据上,训练集评估毫无意义
  • 数据少时优先用交叉验证,比单次 train/test 划分更稳健
  • 回归看 RMSE 或 R^2,分类看 F1(类别不平衡时尤其重要)
  • 测试集只能"看一次"——它是模型的"期末考试"

练习思考

  1. 为什么"5 折交叉验证"的评估结果,通常比"单次 8:2 划分"更稳定?
  2. 在一个癌症筛查系统里,误诊(把健康人判成癌症)和漏诊(把癌症判成健康),哪个更不能接受?对应到 P/R 上意味着什么?
  3. 用 sklearn cross_val_score 跑一遍你之前写的线性回归,对比 R^2 的均值和单次划分的 R^2。

章末小测验

检验你对《如何评估模型》的掌握程度。

1

为什么要把数据分成训练集和测试集?

2

K 折交叉验证相比单次 train/test 划分,优势是?

3

癌症筛查中,漏诊(把癌症判成健康)通常比误诊(把健康判成癌症)更不能接受,这对应:

讨论区(0)

加载评论中...