机器学习第十九讲:交叉验证 → 用五次模拟考试验证真实水平

资料取自《零基础学机器学习》
查看总目录:学习大纲

关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南


交叉验证是模型考试的防作弊系统,通过多次划分考卷验证真实能力1。通过驾校考试案例详解:

一、核心原理(驾照科目模拟考)

假设驾校有100名学员的考试数据,采用5折交叉验证:

flowchart LR
    总数据集 --> 分5份试卷 --> 轮流出题 --> 成绩取平均

考试流程

  1. 将100人分5组(每组20人)
  2. 4组当题库,1组当考题 → 五轮考试不重复 [参考材料3]
  3. 最终成绩 = (88%+85%+90%+92%+87%)/5 = 88.4%
类比说明:就像高考前五套模拟卷覆盖全部知识点,比单次考试更客观2

二、操作步骤(心脏病预测案例)

数据集:300例患者数据(200例患病,100例健康)

graph TD
    A[原始数据300例] --> B[拆成5份各60例]
    B --> C1[训练集240例] --> D1[模型1成绩85%]
    B --> V1[验证集60例]
    B --> C2[训练集240例] --> D2[模型2成绩83%]
    B --> V2[验证集60例]
    B --> C3[...] --> D5[模型5成绩88%]

代码实现

from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5)
print("平均准确率:", scores.mean())  # 输出:86.2%
关键优势:避免因单次抽题偏差(如考题全是疑难病例)影响评估2

三、分场景应用(不同考试模式对比)

验证方式特点适用场景[参考材料3]
简单划分验证快速但成绩波动大大数据集初步筛选
5折交叉验证均衡效率与准确性中小数据集标准流程
10折交叉验证更精准但耗时增加10倍精细调参研究

案例对比

  • 单次验证成绩:92%(可能抽到简单题)
  • 5次交叉验证:88.4%(反映真实水平)
  • 实际考试结果:86%(接近交叉验证均值)3

四、注意事项(防止无效验证)

  1. 数据打乱:需先随机排序,避免时间顺序干扰 [参考材料3]

    from sklearn.utils import shuffle
    X, y = shuffle(X, y, random_state=0)
  2. 分层抽样:保持正负样本比例相同,如每组保持2:1病患健康比例2
  3. 避免泄漏:预处理步骤(如标准化)应在每次训练时重新计算4

典型错误

graph LR
    错误流程 --> 全数据标准化 --> 后分割训练集测试集 --> 分数虚高
    正确流程 --> 先分割训练测试 --> 训练集统计 --> 应用到测试集

目录:总目录
上篇文章:机器学习第十八讲:混淆矩阵 → 诊断模型在医疗检查中的误诊情况
下篇文章:机器学习第二十讲:网格搜索 → 像尝试所有密码组合找最佳解锁方式


324《零基础学机器学习》第八章第三节验证方法
1《零基础学机器学习》第八章第三节验证方法


  1. 8-2
  2. 3
  3. 2
  4. 5

kovli
13 声望8 粉丝