· Xiaojing Yang · Machine Learning · 3 min read

EN

用于模型评估的交叉验证

为什么一次划分很脆弱,K-fold 如何工作,以及交叉验证什么时候会在 NLP 中误导我们。

核心观点

交叉验证通过轮换验证集,估计模型表现是否依赖某一次划分。

1. 为什么一次划分很脆弱

一次 train/validation split 可能很倒霉。验证集可能异常简单、异常困难,或者缺少重要子群体。交叉验证可以降低结果对一次划分的依赖。

K-fold 交叉验证
分成 K 折
每一折是一个数据块
训练 K 次
每次留出一折
每折打分
得到 K 个验证分数
求平均
估计表现和波动

2. 常见变体

变体适用情况
KFold回归或比较均衡的数据
StratifiedKFold分类且类别不平衡
GroupKFold样本共享用户、文档、说话人或来源
TimeSeriesSplit未来不能泄漏到过去
Nested CV调参和性能估计都重要

3. sklearn 例子

from sklearn.model_selection import cross_val_score, StratifiedKFold
from sklearn.linear_model import LogisticRegression

cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(LogisticRegression(max_iter=1000), X, y, cv=cv, scoring="f1_macro")
print(scores.mean(), scores.std())

4. 什么时候 CV 会误导 NLP

交叉验证默认 split 结构和真实泛化问题匹配。但 NLP 里,随机折可能泄漏近重复文档、同一模板、同一说话人、同一话题或同一来源语料。

好的 NLP CV

使用 group-aware、document-aware、time-aware 或 domain-aware folds。

坏的 NLP CV

当文档或来源有重叠时,仍然随机拆句子级样本。

总结

交叉验证不只是一个函数调用,而是在问:评估结果能否经受住不同数据视角的检验。

面试回答模板

如果面试问到这个概念,我会分四层回答:

  1. 先给短定义;
  2. 再讲直觉;
  3. 指出常见失败模式;
  4. 最后连接到真实评估或部署决策。

参考资料

Share:
Back to Blog

Related Posts

View All Posts »