交叉验证把数据切成 K 份,轮流用其中 1 份做验证、其余 K-1 份做训练,重复 K 次取平均,从而用有限数据得到更稳健的泛化误差估计,同时支持超参数选择。K 常取 5 或 10。

常见变体:留一法(LOOCV,K 等于样本数,偏差小但计算贵、方差大);分层 K 折(每折保持类别比例,适合不平衡数据);时间序列用前向滚动验证,绝不能随机打乱,否则未来信息泄漏到过去;分组 K 折保证同一实体的样本不跨折,防止数据泄漏。

易错点:在全部数据上先做特征选择或标准化再交叉验证,会造成泄漏——正确做法是把预处理放进每折内部(如 sklearn 的 Pipeline)。追问方向:为什么交叉验证不能替代独立的测试集?调参后的乐观偏差如何纠正(嵌套交叉验证)?

from sklearn.model_selection import cross_val_score
scores = cross_val_score(pipe, X, y, cv=5, scoring='f1_macro')