当前位置: 首页 > news >正文

机器学习实践项目(二)- 房价预测增强篇 - 额外知识

本来想把本项目结束掉的,在看代码的过程中发现没讲清楚StratifedKFold和KFold的区别,所以另开一贴讲讲,来,让爱老师上场总结。

涉及代码:

y_bins = pd.qcut(y_log, q=10, labels=False, duplicates="drop")
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
stratified_splits = list(skf.split(X, y_bins))

🧩 一、KFold 与 StratifiedKFold 的核心区别总结

对比项KFoldStratifiedKFold
🔹 目标随机平均划分数据保持每折中目标分布一致
🔹 适用场景一般任务(尤其是特征较平衡的回归)分类任务,或回归中目标分布极不均匀
🔹 是否考虑目标分布❌ 否,只按样本顺序或随机划分✅ 是,确保每折目标的比例/分布近似一致
🔹 连续目标能否直接用✅ 可以直接用❌ 不行,要先通过 pd.qcut() 分层(转成伪类别)
🔹 优点简单、速度快更稳定、泛化更公平
🔹 缺点各折目标分布可能差异大需要额外的“分层”步骤(qcut)

🧠 二、用“房价预测”例子来说明

假设我们有 10 套房子(房价单位:万元):

[50, 60, 70, 80, 100, 150, 200, 300, 400, 500]

房价显然分布不均
大部分房子集中在 50–150 万,只有少量豪宅。


🧱 (1) 普通 KFold 的做法

比如 5 折划分(每折 2 套房):

Fold1: [50, 60]     → 都是低价房
Fold2: [70, 80]     → 仍是低价房
Fold3: [100, 150]   → 中价
Fold4: [200, 300]   → 稍高价
Fold5: [400, 500]   → 豪宅

问题:

  • 不同折的房价分布差异非常大;
  • 模型在低价房上训练,在豪宅上验证,误差必然偏大;
  • 每折验证结果差距大 → 模型评估不稳定。

📉 结果:CV 分数波动大,模型泛化性难判断。


🌈 (2) StratifiedKFold 的做法

第一步:pd.qcut() 按房价分层

import pandas as pd
y = [50, 60, 70, 80, 100, 150, 200, 300, 400, 500]
y_bins = pd.qcut(y, q=5, labels=False)
print(y_bins)

输出:

[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]

含义:

房价分层(bin)
50, 600(最低价)
70, 801
100,1502
200,3003
400,5004(最高价)

第二步:用 StratifiedKFold 按层均衡切分

from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
for fold, (tr_idx, va_idx) in enumerate(skf.split(range(len(y)), y_bins)):print(f"Fold{fold+1} -> val_idx:", va_idx)

StratifiedKFold 会保证:

每一折中,都有一个“低价”“中价”“高价”“豪宅”的样本。

例如(示意):

折号验证集(含各价位)
Fold1[50, 150, 400] → 低+中+高
Fold2[60, 100, 500] → 低+中+高
Fold3[70, 200] → 中价+高价

这样每折都包含了不同价格层的样本,房价分布均衡。

📈 结果:每折验证误差更接近真实泛化误差。


⚙️ 三、StratifiedKFold 的“均衡”原理

可以理解为三步:

  1. 先分层(Stratify)
    把目标变量划分成若干层(bins)。
    回归任务需要手动 pd.qcut() 实现。

  2. 再切分(KFold)
    在每个层中平均分配样本到 K 折。

  3. 组合折
    每一折都由各层样本拼接而成。
    → 每一折中,目标分布都与总体分布相似。

📊 就像一盒混合水果(苹果🍎、香蕉🍌、橘子🍊、葡萄🍇),
KFold 可能随机拿到全是苹果,
而 StratifiedKFold 保证每盒都有一点苹果、香蕉、橘子、葡萄。


✅ 四、一张表总结 KFold vs StratifiedKFold

特性KFoldStratifiedKFold
是否随机切分
是否保持目标分布是(按分层信息)
是否适用于连续目标可以,但不分层可以,需先分层(qcut)
各折样本分布可能不均衡分布尽量接近总体
验证结果稳定性波动大稳定、可靠
Kaggle 房价项目推荐❌ 普通 KFold✅ StratifiedKFold(分层K折)

💬 五、一句话总结

KFold:只是把数据平均切成几份,不管目标分布。
StratifiedKFold:会先按目标的分布(比如房价高低)分层,再在每层里平均抽样,确保每一折都“高低价都有”。

👉 对于像 Kaggle 房价预测这种 目标值分布偏斜的回归任务
使用 pd.qcut() + StratifiedKFold 是更稳妥、更公平的做法。


最后,上一张图片来说明普通的KFold和StratiedKFold的区别。
在这里插入图片描述

我们来解析一下这张图。

🎯 整体思路

这张图是为了直观展示:
KFoldStratifiedKFold 在“划分房价数据”时的差别

图分两部分:

  • 左侧:KFold 随机划分(不均衡)
  • 右侧:StratifiedKFold 分层划分(均衡)

🧩 左边:KFold(普通随机划分)

你会看到左边有几条彩色的“条带”,每一条代表一折(fold)。

这些彩色块代表房价区间,比如:

  • 蓝色:低价房
  • 橙色:中价房
  • 红色:高价房

在左边的 KFold 部分:

  • 每一折颜色分布不一样,有的几乎全是蓝色(低价房),
  • 有的全是红色(高价房),
  • 有的中间掺一点橙色。

这表示:

KFold 是随机切分,不管高价还是低价样本,
所以不同折之间房价分布差异非常大。

📉 结果:验证结果波动大,模型稳定性差。


🌈 右边:StratifiedKFold(分层均衡划分)

右边同样也有几条“条带”,表示 5 折。

但每一折都呈现:

蓝 + 橙 + 红 都有,比例差不多。

这表示:

StratifiedKFold 会在切分前先按房价区间(通过 qcut)分层
确保每一折都有相似比例的低价、中价、高价房。

📈 结果:
模型每折训练/验证的数据分布更均匀,
→ 验证分数更稳定,模型泛化能力更可信。


📊 用文字总结图中的含义

对比点KFold 随机切分StratifiedKFold 分层切分
切分依据仅按样本数量按目标值(房价)分层
每折分布随机、可能偏均衡、接近总体分布
适用于平衡数据集分类任务、偏斜回归任务
房价预测效果可能波动大稳定、评估更可靠

🧠 一句话总结

这张图展示的是:
KFold 是“随机切片蛋糕”,有的全是奶油有的全是水果;
StratifiedKFold 是“每片都切一点奶油一点水果”,口味更均衡。


好啦,到了这里,大家应该对两者的区别有了认识了吧。

http://www.dtcms.com/a/598087.html

相关文章:

  • 商城建站站长工具seo综合查询引流
  • 百度上面如何做网站网站设计报价单
  • git rebase 合并分支,保持 git history 记录线性、干净、清晰
  • 让人做网站 需要准备什么寿光网站建设m0536
  • AI智能体落地:Agent-Assist vs 全自动化完整决策指南
  • 邱县seo整站排名中国铁建企业门户网站
  • 网络营销网站建设诊断报告福田蒙派克
  • LangChain `OutputParser` 输出 JSON 的核心原理
  • SpingBoot-循环依赖与三级缓存
  • Step-Audio-EditX - 智能音频编辑助手,支持说话音频情感编辑、语音克隆、音频降噪 支持50系显卡 一键整合包下载
  • 浏览器的打印功能,如果通过HTML5,控制样式
  • 无锡手机网站怎样做像绿色和平组织类似的网站
  • 服务端测试面试题集锦
  • 宿州网站建设设计公司国外做论坛网站
  • invalidate(),postInvalidate()和requestLayout()区别
  • 【03】SIFT算法解析:两张图片的关键点匹配
  • 电子商务网站预算模板wordpress分类目录优化
  • 【Docker】Compose
  • win2003 建设网站wordpress自定义登陆页面
  • 基于单片机的正弦波与方波峰峰值与频率测量系统设计
  • 爱站网关键词搜索成都网站建设新网创想
  • Vivado2018.3——BRAM Generator和BRAM Controller的深度设置小坑
  • ​CUDA C++编程指南(3.2.8)——异步并发执行
  • 论坛网站建设视频教程手机上做app的软件
  • RabbitMQ 从入门到实战:核心特性、应用场景与高级用法全解析
  • 止盈和止损(二)
  • 婚纱摄影网站建站wordpress 获取标签所有文章
  • Vue主要版本的差异
  • 厦门有什么网站制作公司信誉比较好的商家可做网站
  • 做网站带吗百度店铺怎么入驻