机器学习实践项目(二)- 房价预测增强篇 - 特征工程四 - 教程

news/2025/12/10 0:05:54/文章来源:https://www.cnblogs.com/ljbguanli/p/19320808

机器学习实践项目(二)- 房价预测增强篇 - 特征工程四 - 教程

好的,上一篇文章我们提到了独热编码(One-Hot)是一个非常妙的对于分类类型字段的处理方式,它把模型不能识别的字符型的类别字段,转换成了0/1为值的新列,既解决了模型不能识别分类值的问题,又不去“错误暗示”分类之间有大小关系。但是妙则妙矣,这么多0/1值,其实也挺难理解的,而且多了n个字段,其中只有一个字段是1,其余全部为0,有点傻傻的。

解决这个问题的方法之一就是分层目标编码。老规矩,解释知识让AI来:

「目标编码(Target Encoding)」的安全实现版本(带 OOF + 平滑)

我们来一步步拆解,让你完全理解它的作用、原理

一句话解释:

它用目标值(SalePrice)的平均水平来数值化一个类别特征,并且通过 K 折分层来避免“信息泄漏”。

换句话说:
这个函数的任务就是把一个类别型变量(如 Neighborhood)
转换成一个与房价相关的数值特征(类别对应的平均房价)
并保证这个过程不会在训练中“偷看答案”。


一、目标编码(Target Encoding)是啥?

假设我们有一个类别特征:

NeighborhoodSalePrice
CollgCr200000
CollgCr220000
OldTown120000
NridgHt320000

传统的 One-Hot 会生成三列 0/1 矩阵,而目标编码更聪明:

用该类别的目标平均值代替它。

得到新特征:

NeighborhoodSalePriceNeighborhood_te
CollgCr200000210000
CollgCr220000210000
OldTown120000120000
NridgHt320000320000

这就让模型直接“知道”:某个社区的平均房价水平。
对于高基数特征(比如上百个类别),比 One-Hot 更高效、解释性更强。


二、问题:这样会“偷看答案”

如果我们直接用全量 y 算均值(比如上面 210000),
那模型在训练时已经看到了目标 SalePrice ——
这就是数据泄漏(data leakage)
会让交叉验证看起来分数高,但在真实预测中掉分。


三、解决方案:Out-Of-Fold(OOF)编码

这个函数做的就是 OOF Target Encoding
原理是:

1️⃣ 把训练集分成 n_splits(默认 5 折)。
2️⃣ 每次只用“训练折”的数据去计算类别均值。
3️⃣ 再把均值应用到“验证折”。

这样每一行的编码都来自模型未见过的折,就不会泄漏目标信息。


四、代码逻辑逐行解释

y_log = np.log1p(y)
global_mean = y_log.mean()

对房价取对数(Kaggle 房价比赛的标准做法),
在 log 空间计算类别平均价格,稳定性更高。
global_mean 是全局平均房价,用作平滑与缺失的兜底值。


kf = KFold(n_splits=n_splits, shuffle=True, random_state=42)
te = pd.Series(index=X.index, dtype=float)

初始化 5 折交叉验证 + 存放结果的空列。


for tr_idx, va_idx in kf.split(X):
tr, va = X.iloc[tr_idx], X.iloc[va_idx]
y_tr = y_log.iloc[tr_idx]

进入每一折:

  • tr 是“训练折”;
  • va 是“验证折”;
  • 只在训练折上计算编码,避免泄漏验证折的 y

means = tr.groupby(col).apply(lambda d: y_tr[d.index].mean())
counts = tr[col].value_counts()

在训练折中:

  • means 是每个类别的平均 log(房价);
  • counts 是每个类别出现次数(用于平滑)。

enc = (means * counts + global_mean * smooth) / (counts + smooth)

平滑公式
当类别样本数小(如只出现一次),直接取均值会不稳定;
通过加上全局均值 global_mean 按比例混合,稳定效果。
smooth 越大,越偏向全局均值。


te.iloc[va_idx] = X.iloc[va_idx][col].map(enc).fillna(global_mean)

把这一折的验证数据用训练折的编码映射;
未见过的类别用全局均值代替。

这样得到的 te 是一个与原训练集行数相同的新特征,
但它的每一行值都来自“别的折”的均值 → 完全避免泄漏。


五、测试集的处理

means_full = X.groupby(col).apply(lambda d: y_log[d.index].mean())
counts_full = X[col].value_counts()
enc_full = (means_full*counts_full + global_mean*smooth) / (counts_full + smooth)
te_test = X_test[col].map(enc_full).fillna(global_mean)

对测试集可以安全地用全量训练数据来算编码,因为测试集没有目标泄漏风险。


六、最后一步:加新列

X[f"{col}_te"] = te.values
X_test[f"{col}_te"] = te_test.values
return X, X_test

这一步生成一个新的特征列,比如 Neighborhood_te
表示该样本所在社区的“平均 log 房价水平”。


✅ 七、效果总结

特征转换前转换后
NeighborhoodCollgCr / OldTown / …数值(代表类别平均房价)
技术点作用
log1p(y)稳定波动,贴合 RMSE 评测
KFold OOF避免目标泄漏
平滑防止稀有类别导致过拟合
训练/测试分别编码保证一致性与鲁棒性

举个直观例子

假设:

NeighborhoodSalePrice
A100000
A120000
B250000
C500000

全局均值(log1p 后)大约等于 log(242500)。
折分后:

训练集每一行都没看自己的真实价格。
最终模型能利用这些 *_te 特征捕捉“地区价格等级”,提升预测力。


八、总结一句话

oof_target_encode() 的作用是:

✅ 将类别特征数值化为“类别对应的平均目标值”;

✅ 使用 K 折 OOF 机制防止信息泄漏;

✅ 用平滑控制稀有类别稳定性;

✅ 最终输出训练/测试都包含的安全编码特征。


其实看到这里,什么是“目标编码”就很好理解了,但是我第一次看这个解释时,并没有明白何为“分层”,即K-Fold,那我们继续请教爱老师。


KFold(K 折交叉验证)其实一点都不复杂
我用生活比喻 + 图解的方式,帮你彻底搞懂它

一、直白解释:

KFold 就是“把训练集切成几块,轮流用一块来测试,其他几块来训练”的办法。

举个生活例子

你有一个蛋糕(数据集),要知道它的味道(模型好不好)。
如果你只尝一口,可能不准;
所以你把蛋糕切成 K 份(比如 5 份):

折数用来训练的部分用来验证的部分
第1折第2~5份第1份
第2折第1,3,4,5份第2份
第3折第1,2,4,5份第3份
第4折第1,2,3,5份第4份
第5折第1~4份第5份

然后你做 5 次实验,每次:

最后,把这 5 次的表现(比如 RMSE)取平均值
就得到了一个更稳定的结果。


二、图解理解(假设 K=5)

数据集索引: [1 2 3 4 5 6 7 8 9 10]
第1折:  训练=[3,4,5,6,7,8,9,10], 验证=[1,2]
第2折:  训练=[1,2,5,6,7,8,9,10], 验证=[3,4]
第3折:  训练=[1,2,3,4,7,8,9,10], 验证=[5,6]
第4折:  训练=[1,2,3,4,5,6,9,10], 验证=[7,8]
第5折:  训练=[1,2,3,4,5,6,7,8],   验证=[9,10]

你看,每一折都会轮流当一次“验证集”,
其他数据则都用来训练。
所以每个样本都被模型预测过一次,但不会参与预测自己。
这就能避免模型“作弊”看到答案。


三、为什么要这么麻烦?

如果你只随机分一次训练/验证:

  • 运气好:分得刚好平衡 → 分数看起来很好;
  • 运气差:验证集偏、含噪声多 → 分数很差。

而 KFold 多次轮流验证,就像:

“我不看一次考试成绩,而看五次平均分。”

这样更稳定、更可靠。
它能告诉你模型整体表现,而不是“某一次偶然分割”的结果。


四、在 oof_target_encode 里的作用

回想我们在做“目标编码”时:

  • 我们要用 y(房价)去算类别均值;
  • 但又不能“偷看自己”。

KFold 就帮我们做到这点

用来计算均值的行(训练折)被赋值的行(验证折)
1折2~5 的数据折1 的数据
2折1,3,4,5 的数据折2 的数据

所以对于每个样本,它得到的编码值,
都来自其它样本,而不是自己那一折的目标值。
这就完全避免了“信息泄漏”。

简单说:KFold 让我们“用别人家的答案算平均”,
而不是“用自己的答案作弊”。


五、为什么叫 “Out-Of-Fold” (OOF)

  • “Fold” = 折。
  • “Out-Of-Fold” = 不在这一折里的数据。

即:

每个样本的预测/编码,来自于它不在的那几折的模型或均值。
所以叫 Out-of-Fold 编码


六、类比理解

场景类比
你考试 5 次,每次都换不同试卷(验证集)。→ KFold
老师不让你看自己卷子的答案,但可以看同学们的平均分来推测难度。→ Out-of-Fold Target Encoding
最后你拿 5 次考试的平均分作为期末成绩。→ 平均 RMSE 作为模型得分

七、总结一句话

KFold 就是反复切分数据,让模型在“看不到自己”的情况下多次验证,从而得到稳健、无泄漏的结果。


好了,那到此为止,大家明白什么是分层目标编码了吧?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/992521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年氧化铝陶瓷定制厂家最新推荐榜,技术实力与市场口碑深度解析的优质企业甄选99 氧化铝陶瓷,95 氧化铝陶瓷,绝缘陶瓷,氧化铝绝缘陶瓷公司推荐

引言 当前高端装备制造、医疗设备、新能源等领域对氧化铝陶瓷的需求日益攀升,但其行业痛点显著:部分厂家缺乏核心技术,产品难以适配高端场景;定制化能力不足,无法满足特殊工况需求;交付周期不稳定、售后支持薄弱…

链路追踪--使用nginx-ingress-controller记录后端pod真实ip

前言 常见的nginx做反向代理架构,nginx转发到后端的多台服务┌─────────┐│backend-1│└─────────┘┌─────────┐ ┌─────┐ │backend-2│ │nginx│ ────► └…

2025 年 12 月食堂送菜服务商权威推荐榜:新鲜直达、高效配送与智慧供应链管理口碑之选

2025 年 12 月食堂送菜服务商权威推荐榜:新鲜直达、高效配送与智慧供应链管理口碑之选 随着企事业单位、学校、医院等机构后勤社会化改革的深入,以及社会对食品安全、营养均衡与运营效率要求的不断提升,食堂食材配送…

AO3401-ASEMI低压控制领域核芯组件AO3401

AO3401-ASEMI低压控制领域核芯组件AO3401编辑:ll AO3401-ASEMI低压控制领域核芯组件AO3401 型号:AO3401 品牌:ASEMI 封装:SOT-23 批号:最新 漏源电流:4.2A 漏源电压:30V 引脚数量:3 特性:N沟道MOS管 工作温度…

基于BP_Adaboost分类器与RBF神经网络的回归实现

一、BP_Adaboost分类器实现 核心原理:将BP神经网络作为弱分类器,通过Adaboost迭代调整样本权重,最终组合成强分类器。每个弱分类器的错误率影响其权重,同时样本权重动态调整以关注难分类样本。 1. 数据准备与初始化…

高考教育信息智能助手 API 接口

高考教育信息智能助手 API 接口 教育/高考 高考教育信息智能问答助手 智能问答 / 知识库检索 / 多轮对话 AI / 高考 / 高考录取 / 高等教育1. 产品功能RAG 智能体,强大的 AI 问答能力,支持高校基础信息查询、招生政策…

理解 netstat

分享学习和经验,欢迎指正。 含 AI 告知信息。 简单描述一下 netstat,就是可以查看本机网络服务状况,如监听哪些网络端口、端口向哪些网络开放、与其他设备的通信连接状态等等。 笔者平时调试一般都是用到 netstat -…

2025 年 12 月东莞食材配送公司权威推荐榜:生鲜食材、食堂配送服务口碑之选,精选源头直供与高效冷链

2025 年 12 月东莞食材配送公司权威推荐榜:生鲜食材、食堂配送服务口碑之选,精选源头直供与高效冷链 随着东莞城市化进程的加速和餐饮服务业的蓬勃发展,食材配送行业已成为连接田间地头与餐桌的关键纽带。尤其在大型…

2025年geo优化监控系统推荐:AI驱动下的流量突围利器

2025年,生成式引擎优化(GEO)已从数字营销的“加分项”升级为企业获客的“必选项”,伴随AI搜索用户规模突破15亿,geo优化与AI技术的深度融合彻底重构了流量逻辑。在这一背景下,geo优化服务商、AI优化服务商已成为…

2025 年 12 月精品包装盒,礼盒包装盒厂家最新推荐,产能、专利、环保三维数据透视!

引言​ 在品牌竞争白热化的当下,精品包装盒与礼盒包装盒已成为传递品牌价值、提升产品溢价的核心载体。然而市场上产品品质良莠不齐,选材不达标、工艺粗糙、环保不达标等问题频发。为精准筛选优质厂家,本次榜单由中…

MoonBit Pearls Vol.15: 启用 MoonBit 和 Wassette 构建安全的 WebAssembly 工具

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Gartner发布2026年战略趋势:当AI重塑一切,你的业务流程还跟得上吗?(附报告原文下载)

Gartner发布2026年战略趋势:当AI重塑一切,你的业务流程还跟得上吗?(附报告原文下载)我们无法替你打造AI超级计算平台,但能帮你先让流程"智能就绪" 近日,Gartner发布了2026年十大战略技术趋势,为我们描…

2025 年 12 月东莞生鲜食材配送权威推荐榜:新鲜果蔬/有机蔬菜/食堂大型配送,专业高效与品质保障口碑之选

2025 年 12 月东莞生鲜食材配送权威推荐榜:新鲜果蔬/有机蔬菜/食堂大型配送,专业高效与品质保障口碑之选 随着东莞城市化进程的加速和居民生活水平的持续提升,餐饮服务、企事业单位食堂、大型商超及家庭对高品质生鲜…

紧急!Next.js高危漏洞致服务器被黑,我已经中招了!附解决方案

刚刚,我的服务器因为一个高危漏洞被入侵了,沦为了矿机!把我的经历分享出来,希望更多程序员朋友们不要中招,抓紧预防处理。刚刚,我的服务器因为一个高危漏洞被入侵了,沦为了矿机!把我的经历分享出来,希望更多程…

2025英国出国留学中介排名

2025英国出国留学中介排名一、2025年如何选择英国留学中介作为从业12年的国际教育规划师,我经常被学生和家长问及:2025年申请英国留学,中介机构该如何筛选?事实上,选择中介需综合考量多个维度,而非单一依赖口碑或…

2025年GEO优化系统公司推荐:AI流量时代的掘金伙伴

2025年,生成式AI的爆发式增长彻底重构了流量规则,GEO优化(生成式引擎优化)已从企业营销的“加分项”变为生存发展的“必选项”。当DeepSeek优化排名、豆包优化排名、文心一言优化排名成为企业流量竞争的核心战场,…

2025英国留学中介机构排名上海

2025英国留学中介机构排名上海一、2025年上海地区英国留学中介如何选择?作为从业12年的国际教育规划师,我经常遇到学生和家长询问:"2025年上海地区有哪些靠谱的英国留学中介?"这个问题确实值得深入探讨。…

Transformer 详解:从架构到训练

Transformer 详解:从架构到训练的完整指南本文基于 Transformer Explainer 可视化工具,结合 GPT-2 (small) 模型,详细解释 Transformer 的完整工作流程,包括前向传播、损失计算和反向传播的数学推导。目录整体架构…

2025年东莞智能开关品牌权威推荐榜单:好光时代‌/轻智能品牌‌/智能家居‌‌品牌精选

随着智能家居向“简单稳定、即装即用”的方向迈进,传统开关的智能化改造成为市场焦点。据预测,到2025年,中国智能照明市场规模有望突破1500亿元。在这一浪潮中,一些深耕技术、精准解决用户痛点的品牌正在脱颖而出,…

CISA速通(二)IT治理与管理

CISA速通(二)IT治理与管理视频来源:五小时速通CISA考试_第一章_哔哩哔哩_bilibili、五小时速通CISA考试_第二章(1)_哔哩哔哩_bilibili、五小时速通CISA考试_第二章(2)_哔哩哔哩_bilibili、五小时速通CISA考试_第…