想象你是一位高三班主任,明天就要高考了。班里有个学生平时很认真,但你手里只有一本“练习题册”用来评估他的真实水平。最糟糕的做法是把练习题让他先做一遍、对答案背下来,再拿同一本练习册考他——分数一定虚高得吓人,因为“背答案”不等于“会解题”。聪明的做法是:把练习册切成几份,分几轮考。每轮用一部分题目当“考前模拟”,剩下的当“正式考试”,考完一轮换一批题再考。 几轮下来取平均分,才敢说摸清了这个学生的真实实力。 模型训练与评估,和这出考场故事如出一辙。机器学习模型同样会“背答案”——它在训练数据上记住了太多细节,拿同一批数据测它,成绩永远漂亮,但一到真实世界就露馅。学界和工业界最主流的应对策略,就是今天的主角:K折交叉验证(K-Fold Cross-Validation)。这篇文章将以“考试命题组”为贯穿比喻,带你从考场规则到代码实现,彻底吃透这套评估模型泛化能力的黄金标准。
对 AI 从业者而言,交叉验证是从“只会跑通代码”迈向“可靠交付模型”的必修课。掌握它,你才能真正分辨一个模型是“实力过硬”还是“背题侥幸”,在技术选型与架构决策中避开无数暗坑。
可视化演示
可视化K折数据分割轮流验证流程、K值选择的偏差-方差权衡及分层K折类别平衡保障,滑块调节K值观察评估稳定性变化。
本节配有交互动效(进入视口后自动加载,约 3KB)。
K折流程:数据均分K份轮流验证 训练折(K-1份):蓝色,用于模型训练 验证折(1份):红色,用于性能评估 当前轮次:自动轮转,每折恰好验证一次 CV = (1/K)×Σ Acc(k_i) K次结果取均值作为泛化性能估计
验证的核心矛盾
回到考场故事。班主任手里只有一本练习册,如果让学生做完再背一遍,然后用原题考他,分数能说明真实水平吗?显然不能——模型(学生)在训练时“见过”了这些样本(题目),测试时再用同批样本,等于开卷考背答案,成绩虚高。 这个现象在机器学习里叫“数据泄漏”的雏形,是最天真的错误。于是最简单的方案出现了:把数据划成训练集和测试集两部分,训练集当“复习资料”,测试集当“真题试卷”,模型从没见过测试集的答案。 听起来完美,但天下没有免费的午餐——划走 30% 做测试,意味着训练时少用了 30% 的珍贵数据。
少用数据会怎样?想想看:一个学生复习时间被压缩,知识漏洞必然变多,模型学不到足够规律,这叫“欠拟合”。更糟的是,每划一次数据都像掷骰子:如果这次划分恰好把难题都分进了测试集,模型得分就惨淡;如果恰好把简单题分进测试集,得分又虚高。同一个小伙子,运气好考 90,运气差考 60,单次划分的结果就像彩票开奖,方差大得让人心慌。固定划分一次定生死,既浪费了数据,又听天由命。
那怎么办?班主任的智慧在于:既然一次考试说明不了问题,那就多考几次,每次换一批题、取平均分。 这正是交叉验证的朴素动机——把“一次定生死”变成“K次取均值”,既要榨干每一道题的利用价值,又要让分数稳定可复现。
- 单次划分的评估偏差这是总目标——我们想估计模型在真实世界的表现,但任何一次评估都有偏差。
- 模型真实误差这是“学生真实实力”,是隐藏的、永远无法直接观测的量,只能通过多次考试逼近。
- 划分随机性噪声因为每次只用了部分数据训练、部分数据测试,抽到什么样本像抽签一样随机,造成了分数波动。
K折验证原理解析
班主任的进阶操作来了:他不再把练习册一分为二,而是把整本练习册均切成 K 份(比如 5 份)。第一轮,把第 1 份当“正式考卷”,剩下 4 份当“复习资料”;考完记下分数,然后把第 1 份卷子收回题库,换成第 2 份当考卷,其余 4 份复习。如此轮换,每份卷子都恰好当过一次“正式考卷”。机器学习的表述是:将数据集均分为 K 份互斥的子集,轮流取 1 份作验证集、其余 K-1 份作训练集,训练并验证 K 次,最后把 K 次验证指标求平均。
这个流程的精妙之处有三点。第一,每一份数据既当过“复习资料”也当过“考题”,参与训练的机会是 100%,没有任何样本被浪费;第二,K 次考试覆盖了所有可能的“运气组合”,均值把随机噪声削掉了一大截;第三,它给出的是一个分数区间而不只是一个孤点——班主任可以看见学生是“稳定在 85 分上下”还是“时好时坏波动 20 分”,后者即使均值高,也不敢放心让他上考场。
轮番考试的方案,本质是用“多轮平均”对抗“单次偶然”。就像班主任给学生的最终评语不会基于一次月考,而是综合期中考、模拟考、随堂测的均值——单次成绩可能有超常发挥或意外失手,但均值不会撒谎。
- K 次求和取平均把每一轮考试成绩加起来,除以轮数 K,得到最终估分。
- 第 k 折验证分数第 k 轮中,用除第 k 份外的 K-1 份训练模型,然后用第 k 份计算指标。
- 下角标 -k表示“排除第 k 份”的训练数据,是交叉验证符号体系里的核心记号。
完整流程拆解
现在我们把班主任的整套操作,拆成可以照做的四步流程。第一步,洗牌:把练习册里的题目(样本)顺序彻底打乱,绝不能按原始排列切分——因为原始数据常有隐含规律(比如前 100 条都是同一个类别),不打乱会导致某些折全是难题或全是简单题。
第二步,编号分组:把洗好的数据均匀切分成 K 份,给每份贴上编号标签 1 到 K,如同把题目装进 K 个标号信封。第三步,循环验证:执行 K 轮训练-验证交替——第 1 轮拿第 1 号信封当考卷、其余 K-1 个信封复习,第 2 轮拿第 2 号信封当考卷……直到每个信封都当过考卷。第四步,汇总报告:把 K 次验证指标收集起来,计算均值和标准差,形成一份“成绩分析报告”。
整套流程的核心纪律是“考卷绝不出现在复习资料里”——每一轮的验证集在当轮训练中必须完全隐形。一旦违反,比如洗牌前切分导致同一条样本既在训练集又在验证集,就等同于把考卷答案提前给了学生,评估分数瞬间失真。
D \setminus D_k 表示“从全部数据中挖掉第 k 份”,剩下的部分用于训练。循环 K 次后返回平均分。- 循环 K 次每一次循环对应一轮“换卷考试”,考试轮数与数据份数相等。
- 挖掉第 k 份训练把第 k 份数据从全集里剔除,剩下的 K-1 份作为本轮训练集,保证“考题”不提前泄露。
- 在留出的第 k 份上打分用本轮训练好的模型,对第 k 份数据做预测并计算指标,模拟“在真考场答卷”。
- 返回平均分K 次打分求均值,并额外计算标准差,作为最终评估报告。
评估指标讨论
K 轮考试结束后,班主任手里有了 K 个分数。怎么解读?均值代表水平:如果 5 轮分数是 82、83、84、83、85,均值 83.4,可以说“这学生稳在 83 分左右”。方差(或标准差)反映稳定度:如果是 60、95、70、88、99,均值也是 82.4,但这样的学生你敢放心让他上高考考场吗?现实中的模型也一样——均值高但方差大,说明模型在某些数据划分下表现极差,泛化能力堪忧。
由此引出两条判读铁律。铁律一:优先看均值,但别只看均值。 均值是模型整体水平的估计,方差是这份估计的可信度——方差大时均值只是“纸面平均”,掩盖了模型在特定数据分布上的崩溃风险。铁律二:同指标才可比。 交叉验证的 K 轮必须使用完全一致的指标(如统一用准确率或统一用 F1),否则 5 轮分数混用不同量纲,均值毫无意义。
用“均值±方差”汇报交叉验证结果,是工业界最标准的姿势。一份机器学习模型评估报告,若只写“准确率 85%”而不写波动范围,好比班主任只报平均分不报排名波动——听起来不错,但信息量砍了一半。
- 均值±标准差这是汇报交叉验证结果的国际惯例写法,前半段是水平,后半段是稳定性。
- 均值K 轮分数的算术平均,代表模型的期望表现。
- 标准差K 个分数围绕均值的离散程度,越小越稳定,越大说明模型“时灵时不灵”。
分层K折策略
班主任遇到一个新麻烦:班级里男女比例是 8:2,如果随机把题目装进 5 个信封,某个信封可能全是理科难题,另一个信封全是文科送分题,每一轮考试的难度方差拉满,评估自然失真。分层 K 折(Stratified K-Fold)就是为解决这一痛点而生:切分时保证每一折中各类别样本的比例,与原始数据集一致。 8:2 的男女比例,切出来的每个信封也保持 8:2,绝不出现某折“全是男生”或“全是女生”的极端情况。
这在分类任务中至关重要,尤其当数据不平衡时——比如 99% 是“正常交易”、1% 是“欺诈交易”,随机切分后,有些折可能 0 条欺诈样本,模型在这些折上“没学过欺诈长什么样”,验证分数自然崩盘。分层 K 折通过显式控制每折类别比例,让“考题分布”始终贴近真实考纲分布。 这也解释了为什么数据科学竞赛和工业实战中,分层版本远比朴素版本流行——它的评估结论更稳健、更具可操作价值。
分层策略给班主任的启示是:考卷结构必须代表真实考纲结构。 如果总复习时难题占 30%,那么每轮试卷里难题也应约占 30%,这样考出来的分数才不是“侥幸避开难题”的水分。在 imbalanced dataset(类别极不平衡的数据)上做评估,分层 K 折几乎是从业者的默认选择。
- 任一类别 c遍历数据集中所有类别,逐个检查它们的占比是否一致。
- 第 k 折中类别占比第 k 折数据中类别 c 的样本数,除以第 k 折总样本数。
- 全量中类别占比整个数据集中类别 c 的样本占比,这是分层要复刻的目标比例。
- 近似相等由于样本量限制可能无法做到精确相等,但算法会尽量逼近。
留一法变体
把 K 折的逻辑推向极致:如果 K 等于样本总数 N,会怎样? 每次只留出 1 个样本做验证,其余 N-1 个全部用于训练。这就是 留一法(Leave-One-Out, LOO),堪称“最疯狂的轮考”:班主任把练习册拆到每一道题都是一个独立信封,每轮用除这道题外的所有题复习,只考这一道题,循环 N 轮。
留一法的优势极其诱人:几乎用上了所有数据训练,评估结果近似于模型真实水平,方差最小,且过程完全确定——因为每次只留一个样本,不受随机划分影响,结果可复现性 100%。但代价同样惊人:需要训练 N 个模型。假设数据集有 10 万条样本,就要训练 10 万个模型,计算开销是普通 5 折的 2 万倍。对于深度学习和动辄几小时的训练任务,这是近乎不可承受的代价。
现实中的留一法更像一种“理论标杆”。学有余力时,它可以用在小数据集(几百条以内)或单次训练秒级的模型上;绝大多数场景里,K=10 与留一法的评估精度相差无几,计算成本却低了几个数量级——班主任很快会发现,考 10 次和考 100 次得出的平均分差距微乎其微,何必付出十倍的监考精力。
- K 等于 N留一法是 K 折的极端特例,折数等于样本数。
- 每折只留 1 个样本验证每一轮验证集只有一个样本,其余 N-1 个全部训练。
- 计算成本训练 N 次模型的总开销,随样本数线性增长。
常见细节与价值
班主任要拍板了:K 到底取几?经验法则给出两个数值——K=5 和 K=10。 当 K=5 时,训练集占比 80%,方差略大但计算快;当 K=10 时,训练集占比 90%,评估结果更接近全量训练的上限,偏差更小,计算量翻倍。绝大多数文献和工业实践默认选用 10 折,形成了一种事实标准。注意,K 并不是越大越好:K 增大到接近 N 时退化为留一法,方差虽小但计算爆炸,且各折训练集高度相似,K 次评估结果之间不再独立,均值方差估计反而可能失效。
还有一条红线:严防数据泄漏,即洗牌和划分必须发生在特征工程、归一化等任何“偷看数据”步骤之前。 标准做法是仅在训练折上计算均值和标准差后再应用到验证折。这种“考卷绝不提前流入复习资料”的纪律,直接决定交叉验证结果可信与否。
最后说说工业应用价值。在真实业务中,交叉验证是模型选型的裁判:当你在两个候选模型间犹豫(比如决策树 vs 逻辑回归),对两者做相同的 10 折交叉验证,谁的均值高、方差小,谁就上生产线;它也是超参数调优的安全网,配合网格搜索让每组超参数都经受 K 轮轮考,彻底告别“在某次划分上碰运气”的局部最优假象。班主任用这一套方法,终于可以说出那句掷地有声的话:“这个模型不是背题家,是真学霸。”
“防泄漏 + 合理选 K + 分层兜底”这三板斧,构成了工业界使用交叉验证的完整纪律。理解这些细节,你就不再是机械调用 cross_val_score 的调包侠,而是能根据业务场景自由设计评估方案的工程师。
- K=5 适用场景当模型训练时间长、样本量大,5 折可以节省近一半的计算时间。
- K=10 默认首选训练折占总数据 90%,偏差很小,同时计算量尚可接受。
- 偏差-方差权衡K 过小,训练数据不足导致偏差大;K 过大,计算量大且折间数据重叠高。
AI 应用场景
场景一:医疗影像模型的选型评审
阶段:模型评估与选型
解决的问题:某三甲医院要部署一个肺炎 X 光片分类模型。传统做法是随机切一次训练集/测试集,导致两次实验的准确率波动高达 8 个百分点,无法确定哪个候选模型真的更好。采用 10 折分层交叉验证后,每轮评估都覆盖全部数据,且每折的“肺炎/正常”比例与全院数据一致,结果稳如磐石。
具体案例:算法团队在 ResNet 与 DenseNet 两个候选架构间犹豫。对二者执行相同的 10 折分层交叉验证,ResNet 的 AUC 均值 0.921(标准差 0.015),DenseNet 为 0.918(标准差 0.032)。虽然均值接近,但 DenseNet 方差过大,最终选型 ResNet,部署后线上指标与验证结果高度吻合。
场景二:信贷风控模型的超参数调优
阶段:超参数搜索与最终评估
解决的问题:信贷违约预测中类别极度不平衡(违约率仅 3%)。若使用随机 K 折,某些折可能完全没有违约样本,导致该折模型“没有见过正例”。使用分层 K 折后每折违约率均稳定在 3% 左右,配合网格搜索评估不同正则化强度下的模型稳定性,避免因单次划分运气选错参数。
具体案例:风控团队用 5 折分层交叉验证配合 GridSearch 调参,对逻辑回归的正则化系数 C 和 XGBoost 的 max_depth 做联合搜索。最终模型在保留测试集(hold-out)上的 KS 值 0.41,与交叉验证均值 0.40 相差无几,验证了评估流程的可靠性。
场景三:电商推荐系统的离线评估
阶段:离线评估与 AB 测试前的把关
解决的问题:推荐算法迭代频繁,若每次改动都用单次离线切分评估,结果受用户分布随机性影响大,难以判断指标提升是“算法改进”还是“切分运气”。交叉验证让每次算法迭代都在相同的 K 轮数据上公平 PK。
具体案例:推荐团队对候选召回模型进行 5 折交叉验证,每折计算 Precision@10 与 Recall@10,并汇报“均值±标准差”作为上线评审依据。某次改进 Recall 均值提升 2.1%,但标准差增大 3 倍,评审会上被否决——因为不稳定意味着对部分用户群体可能失效,这正是交叉验证的防守价值。
Python 演示
"""K-Fold 交叉验证:从原理到 sklearn 实践"""import numpy as npfrom sklearn.datasets import make_classificationfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score # 步骤1:生成模拟分类数据集,样本数 600,特征数 5X, y = make_classification( n_samples=600, n_features=5, n_informative=4, n_redundant=0, random_state=42) # ========== 手写实现 K-Fold ==========def manual_kfold(X, y, k=5): """手写K折交叉验证:把数据均分k份,轮流留一份验证。""" n = len(X) indices = np.random.permutation(n) # 洗牌打乱 fold_size = n // k scores = [] for i in range(k): val_idx = indices[i * fold_size: (i + 1) * fold_size] train_idx = np.concatenate([ indices[: i * fold_size], indices[(i + 1) * fold_size:] ]) model = LogisticRegression(max_iter=200) model.fit(X[train_idx], y[train_idx]) pred = model.predict(X[val_idx]) scores.append(accuracy_score(y[val_idx], pred)) return np.mean(scores), np.std(scores) mean_score, std_score = manual_kfold(X, y, k=5)print("手写K-Fold 平均准确率:", round(mean_score, 4), "+-", round(std_score, 4)) # ========== sklearn 标准实现 ==========from sklearn.model_selection import StratifiedKFold, cross_val_score skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)sk_scores = cross_val_score( LogisticRegression(max_iter=200), X, y, cv=skf, scoring="accuracy")print("sklearn 分层K折 平均准确率:", round(sk_scores.mean(), 4), "+-", round(sk_scores.std(), 4))
StratifiedKFold 一行完成工业级实现,对照学习原理与工具。indices = np.random.permutation(n)洗牌打乱样本顺序,避免原始排列中的隐式规律干扰划分。for i in range(k)外层循环执行 K 轮“轮考”,每一轮对应一个验证折。val_idx = indices[i * fold_size: (i + 1) * fold_size]取出本轮的验证集索引,当作“本轮考卷”。train_idx = np.concatenate(...)将除验证折外的所有索引拼接起来,构成训练集。model.fit(X[train_idx], y[train_idx])每轮都训练一个全新模型,保证“考卷”从未在训练中出现。scores.append(accuracy_score(...))记录本轮验证分数,等待最终平均。np.mean(scores), np.std(scores)输出“均值±标准差”,这是交叉验证结果的规范汇报格式。StratifiedKFold(n_splits=5, shuffle=True)创建分层 K 折对象,自动保证每折类别比例一致。cross_val_score(...)sklearn 封装好的交叉验证 API,内部自动完成训练-验证-打分全流程。
常见误区
误区我以为交叉验证就是把同一个测试集跑好几遍,取个平均就算完事。后来发现这样做和原来没区别,分数还是虚高的。
正解交叉验证的核心不是“多次测试同一份数据”,而是每一轮都换一份全新的验证集,且这份验证集绝不出现在当轮训练中。它的本质是“多个互不重叠的考卷轮流上场”,每份数据都参与训练且都参与验证,最终均值才能逼近真实泛化能力。用同一份考卷测三遍,只是把背答案的分数平均了三遍,毫无意义。
为何常见:初学者容易被“K 次取平均”这几个字误导,以为关键在“平均”而非“轮流换卷”,忽略了训练集与验证集严格隔离才是交叉验证的灵魂。
误区既然留一法训练数据最多、评估最稳定,那干脆所有项目都用留一法,反正模型也不差那点训练时间。
正解K 增大并非没有代价。当 K 接近 N 时,每折训练集之间高度重叠(共享了 N-2 个样本),K 次评估结果不再是独立样本,“均值的方差”估算反而失真;且训练 N 个模型的计算成本随样本量线性爆炸。留一法只适合小数据集或评估成本极低的模型,业界默认用 K=10 是因为它在偏差、方差、计算三方面达成最佳平衡。
为何常见:人本能地觉得“用得数据越多越保险”,直觉上忽略了“折间独立性”和“计算成本”这两个同样重要的维度。
误区我觉得分层就是按标签类别比例切分,那回归任务中标签是连续数值,没有类别可分,分层肯定没用,直接随机 K 折就行。
正解分层思想在回归任务中同样有变体——按标签分位数分层。比如先把连续标签按数值大小分成若干桶,再在每个桶内按比例抽样到各折,保证每折的标签分布近似全局分布。这能避免某一折恰好全是高收入样本、另一折全是低收入样本的失衡情况。所以分层不是分类任务的专利,而是“让每折分布逼近全量分布”的通用原则。
为何常见:教材通常以分类举例讲解分层 K 折,初学者容易把“举例”误解为“适用边界”,忽略分层背后的统计学本质。
误区模型已经做了 10 折交叉验证,平均分 92%,这不就是最终部署效果吗?还需要留着测试集干嘛?
正解交叉验证是“用尽所有数据”的评估策略,但它依然是对模型泛化能力的一次估计,不是真实上线效果。真实业务中,数据分布会漂移、新样本会出现,交叉验证无法覆盖“未来”。标准的防线是双重验证:用交叉验证做模型选型和调参,再留一份从未参与任何划分的独立测试集做最终“终审”,防止在交叉验证上过拟合。
为何常见:交叉验证的“K 次平均”给人心理上的高可信度,让人误以为它等同于真实世界验证,而忘记任何离线评估都存在与线上环境的系统性偏差。
面试题
Q1. K折交叉验证的核心思想是什么?
- A.将数据切分成训练集与验证集各一次
- B.均分K份轮流留一份做验证取平均← 正确答案
- C.在多个测试集上重复测试同一模型
- D.用全部数据训练再在全量上评估
答案:B。K 折的核心在于把数据均分成 K 份,每轮留 1 份验证、K-1 份训练,轮换 K 次后取平均。A 是普通 train/test split,C 是误区一的错误做法,D 会造成严重的数据泄漏。
Q2. 交叉验证相比单次划分的最大优势是?
- A.训练速度显著提升
- B.验证集规模自动扩大
- C.数据利用率高且评估方差低← 正确答案
- D.完全消除模型偏差
答案:C。交叉验证让每份数据都参与训练又参与验证,榨干数据利用率;K 次平均又削平了单次划分的随机噪声,降低了方差。它不会加速训练,也不能消除模型自身偏差。
Q3. 在 K 折交叉验证中,第 k 轮的训练集由什么构成?
- A.全部 K 份数据共同组成
- B.从 K 份中随机抽取 K-1 份
- C.除第 k 份以外的所有 K-1 份数据← 正确答案
- D.除第 k 份验证集外的任意组合
答案:C。第 k 轮训练集严格定义为“全集挖掉第 k 份”(D \ D_k),这样才能确保验证集与训练集严格隔离。B 的“随机抽取”破坏了交叉验证的确定性纪律,D 的“任意组合”则可能让验证样本泄漏进训练集。
Q4. 留一法(LOO)的本质是什么?
- A.只用一个样本训练模型其余验证
- B.折数等于样本数且每折仅留一例验证← 正确答案
- C.与 K=5 的交叉验证结果完全相同
- D.仅适用于图像生成任务
答案:B。留一法是 K 折的极端特例:K 等于样本总数,每轮验证集只有 1 个样本,训练集有 N-1 个样本。它与 K=5 结果不同,也非图像任务专属。
Q5. 分层 K 折(Stratified K-Fold)要保证的是什么?
- A.每一折数据量完全相同
- B.每一折类别比例近似于全集← 正确答案
- C.每轮验证集样本互不重复
- D.训练集样本按时间排序
答案:B。分层核心是“每折各类样本比例约等于全集比例”,尤其在不平衡分类数据上,防止某折缺失少数类导致评估失真。A 是普通 K 折的要求,C 是所有 K 折的共性,D 是时间序列切分而非分层。
Q6. K 值从 5 增大到 10,主要带来什么变化?
- A.偏差减小而计算成本上升← 正确答案
- B.偏差增大且计算成本下降
- C.方差与偏差同步大幅下降
- D.训练集总规模成倍缩小
答案:A。K 增大意味着每折训练集占比从 80% 提升到 90%,模型获得更多数据,评估偏差减小;但训练次数翻倍,计算成本上升。方差并非同步下降,因为折间数据重叠度升高,各折结果独立性和可解释性都在减弱。
Q7. 下列哪种做法最可能造成数据泄漏?
- A.在代码中设置随机种子
- B.对全部数据先归一化再做切分← 正确答案
- C.对每折训练集单独归一化
- D.使用分层切分处理不平衡类
答案:B。先对全部数据归一化,再切分训练/验证折,相当于验证集样本的均值和方差已“泄漏”进归一化参数中,让验证分数虚高。正确做法是只在训练折上拟合缩放器再应用到验证折。A、C、D 都是安全正确操作。
Q8. 关于 K 折交叉验证的说法,正确的是?
- A.每一份数据只参与一次验证← 正确答案
- B.每一份数据最终都参与过训练← 正确答案
- C.最终结果应汇报均值±标准差← 正确答案
- D.洗牌步骤可以安全省略
答案:ABC。K 折共 K 轮,每轮验证集不同,故 A 正确;每份数据在 K-1 轮中参与训练,B 正确;“均值±标准差”是规范汇报格式,C 正确。D 错误——省略洗牌可能让原始排列中的类别聚集导致划分失衡。
Q9. 下列哪些任务适合优先使用分层 K 折?
- A.信用卡欺诈检测(正例仅占 1%)← 正确答案
- B.医疗影像罕见病分类(患病样本极少)← 正确答案
- C.各折类别比例完全均衡的数据
- D.样本均匀分布的五分类任务
答案:AB。在严重不平衡数据(欺诈、罕见病)中,随机切分可能让某折完全没有正例,分层 K 折可保证类别比例稳定。对于本身分布均衡的数据,分层与随机结果差异不大,谈不上“优先使用”。
Q10. 关于留一法与 10 折交叉验证的比较,正确的有?
- A.留一法训练更充分但其结果方差更大
- B.留一法每次训练集高度重合导致独立性差← 正确答案
- C.10 折交叉验证计算开销通常远低于留一法← 正确答案
- D.留一法结果完全不受数据分布影响
答案:BC。留一法中任意两折的训练集共享 N-2 个样本,K 次评估强相关、独立性差,B 正确;10 折只需训练 10 个模型,而留一法要训练 N 个,C 正确。A 错误——留一法偏差小但折间相关性高;D 错误——留一法同样受数据分布影响,只是不受随机划分影响。