news 2026/5/1 10:03:31

【大白话数据分析】搞懂这三种神仙编码(OE/QE/LOOE) + 随机森林,模型精度直接起飞![特殊字符]

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【大白话数据分析】搞懂这三种神仙编码(OE/QE/LOOE) + 随机森林,模型精度直接起飞![特殊字符]

🌞欢迎来到数据分析的世界
🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🌠本阶段属于练气阶段,希望各位仙友顺利完成突破

📆首发时间:🌹2025年12月20日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

引入

为什么不能直接填数字?

🍌 选手一:OE (Ordinal Encoder) —— 简单粗暴的“排号员”

📊 选手二:QE (Quantile Encoder) —— 看人下菜碟的“分段王”

🔥 选手三:LOOE (Leave-One-Out Encoder) —— 防作弊的“超级翻译”

🌲 最佳搭档:RF (Random Forest 随机森林)

💻 代码实战(Python版)

📝 总结

引入

做数据挖掘或者机器学习的同学都知道,模型(Model)其实是个“偏科生”。它数学很好,但语文

极差——它只认识数字,根本不认识汉字或英文单词!

所以,当我们拿到一份包含“性别(男/女)”、“城市(北京/上海)”、“原料(猪粪/秸秆)”这样的数

据时,第一步必须做的事就是:当翻译官!

把这些文字“翻译”成数字,这个过程就叫编码(Encoding)

今天我们就用最接地气的方式,聊聊三种超好用的编码方式:OEQELOOE,以及它们的好搭档随机森林(RF)


1. 为什么不能直接填数字?

很多人想:“这还不简单?男=1,女=2;北京=1,上海=2,广州=3。”

这就引出了第一种编码方式。

🍌 选手一:OE (Ordinal Encoder) —— 简单粗暴的“排号员”

就是给每个类别发个号牌。

比如:[小学, 初中, 高中, 大学]

OE编码后变成:[1, 2, 3, 4]

这种方式非常的简单,省内存。非常适合有“等级关系”的数据(比如学历、尺码 S/M/L)。因为

4>3>2>1,正好对应 大学>高中>初中>小学,模型能理解这种“越来越大”的关系。但是对于没有等

级关系的数据,它会“误导”模型。比如:[苹果, 香蕉, 西瓜] 变成 [1, 2, 3]。模型会以为“西瓜(3) 比

苹果(1) 大/高级”,但其实它们只是不同的水果而已。这时候用 OE 就不太好了。

📊 选手二:QE (Quantile Encoder) —— 看人下菜碟的“分段王”

这个稍微高级一点。它不是随便给个号,而是根据这个特征对应的**目标值(Target,也就是你

要预测的结果)的表现来打分。假设我们要预测”房价”,特征是“地段”。

OE做法:一环=1,二环=2...

QE做法:它不看你是几环,它看这里的房子大部分卖多少钱。

它会把所有地段按房价排序。

房价最低的那一拨地段(比如后25%),编码为 1。

房价中等的那一拨(中间50%),编码为 2。

房价最高的那一拨(前25%),编码为 3。

它的核心逻辑:“我不关心你叫什么名字,我只关心你属于哪个档次。”这能很好地处理异常值,把

数据变得更平滑。

🔥 选手三:LOOE (Leave-One-Out Encoder) —— 防作弊的“超级翻译”

这是很多高分论文(包括很多 Kaggle 比赛)里的秘密武器。

它也是一种目标编码(Target Encoding),也就是用“结果”来代表“特征”。

我们要预测一个学生期末考试能考多少分,特征是“所在的班级”。

如果直接用这个班的平均分来代表这个班级,行不行?

比如 1班平均分90,那就把“1班”编码成 90。

问题:如果在训练的时候,你把这个学生自己的分数也算进平均分里了,这不就是作弊吗?(模型

会直接“记住”答案,而不是学习规律)。

LOOE 的神操作(Leave-One-Out = 留一法):

计算“1班”的编码值时,把你(当前样本)的分数拿掉,只算1班其他所有人的平均分,作为你的

编码值。优点:既利用了“这个类别通常很强”的高级信息,又完美避开了“自己预测自己”的作弊嫌

疑。准确率通常比 OE 高一大截!


🌲 最佳搭档:RF (Random Forest 随机森林)

把数据用上面三种方法编码好(变成数字)后,就可以喂给模型了。在这个组合里,随机森林

是个绝佳的选择。随机森林就是“三个臭皮匠,顶个诸葛亮”的究极版。

它种了很多棵决策树(Expert)。来了一个新数据,每棵树都通过上面的编码数字进行判断,给出

自己的预测。最后,随机森林把所有树的结果取平均(回归问题)或者投票(分类问题)。

为什么它和编码是绝配?

刚才 OE 编码里提到的“苹果(1) vs 西瓜(3)”的误导问题,随机森林通过大量的树和随机性,能一

定程度上消化掉这种误差。你不需要把数字缩放到 0-1 之间,随机森林不挑食,直接喂刚才编码好

的 1, 90, 513 这种数字,它照样吃得香。


💻 代码实战(Python版)

import pandas as pd from sklearn.ensemble import RandomForestRegressor from category_encoders import OrdinalEncoder, LeaveOneOutEncoder, QuantileEncoder from sklearn.model_selection import train_test_split # 1. 准备数据 (假装这是你的实验数据) data = pd.DataFrame({ '底物类型': ['猪粪', '秸秆', '餐厨', '猪粪', '餐厨', '秸秆'], # 分类特征 '温度': [35, 37, 55, 35, 55, 37], '产气量': [100, 120, 500, 110, 520, 130] # 目标变量 (y) }) X = data[['底物类型', '温度']] y = data['产气量'] # 2. 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # ================= 核心:编码三剑客 ================= # --- 方式 A: OE (简单排号) --- # oe = OrdinalEncoder(cols=['底物类型']) # X_train_enc = oe.fit_transform(X_train) # X_test_enc = oe.transform(X_test) # --- 方式 B: LOOE (留一法,推荐!) --- # 注意:LOOE 训练时必须传入 y_train,因为它要算平均值! looe = LeaveOneOutEncoder(cols=['底物类型']) X_train_enc = looe.fit_transform(X_train, y_train) X_test_enc = looe.transform(X_test) # 测试集直接用训练集算好的规则 print("编码后的数据长这样:") print(X_train_enc) # ================= 核心:随机森林建模 ================= # 3. 召唤随机森林 rf = RandomForestRegressor(n_estimators=100, random_state=42) # 4. 训练 (喂入编码后的数据) rf.fit(X_train_enc, y_train) # 5. 预测 preds = rf.predict(X_test_enc) print(f"预测结果: {preds}")
📝 总结
编码方式核心逻辑适合场景比喻
OE按顺序编号有等级关系的数据 (大/中/小)排队发号牌
QE按目标值的分布分档需要减少噪音、处理异常值划分“优良中差”等级
LOOE用除去自己外的平均目标值类别之间差异大,想提升精度“看看大家都考多少分” (但不准看自己的)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 10:31:07

Open-AutoGLM怎么用才能发挥最大效能?答案在这里

第一章:Open-AutoGLM怎么使用?Open-AutoGLM 是一个开源的自动化通用语言模型工具,专为简化大模型任务流程而设计。它支持自然语言理解、代码生成、数据清洗等多种场景,通过声明式配置即可完成复杂任务链的构建与执行。环境准备 在使用 Open-…

作者头像 李华
网站建设 2026/5/1 6:57:31

3D打印模型飞机的实战探索与优化

3D打印模型飞机的实战探索与优化 在航模圈里,“这架飞机没灵魂”这句话我们听得太多了。尤其是当一台全FDM打印的模型摆在面前时,总会有人摇头:塑料感太重、层纹明显、飞起来像块会动的积木。可问题是——如果连我们自己都嫌弃打印件&#x…

作者头像 李华
网站建设 2026/5/1 5:46:59

Yarn Lockfile 分析与依赖管理

Yarn Lockfile 分析与依赖管理 在现代前端开发中,一个看似不起眼的文本文件,往往决定了整个项目能否稳定运行——yarn.lock 就是这样一个“幕后英雄”。它不像 package.json 那样显眼,也不参与代码执行,但一旦缺失或损坏&#xff…

作者头像 李华
网站建设 2026/4/30 8:32:58

折叠屏手机形态多样化,轻薄耐用成市场竞争新焦点

现如今,当消费者于选择折叠屏手机之际,所面临的选项正日益变得丰富起来。从那种横向进行翻折的大屏旗舰手机,到竖向翻折的、颇为精致的机型,不同形态的产品,其目的在于满足多元化的使用需求。在横向折叠屏手机这个领域…

作者头像 李华
网站建设 2026/5/1 9:31:50

C4D结合Rizom UV实现UDIM多象限UV流程

让 LoRA 微调像搭积木一样简单:lora-scripts 实战指南 你有没有过这样的经历?手头有一堆风格独特的图片,想训练一个专属的 AI 绘画模型,但一想到要写数据预处理脚本、配置训练参数、调试显存溢出问题,就直接打退堂鼓了…

作者头像 李华
网站建设 2026/5/1 6:57:40

初级渗透测试师一周日常:挖测漏洞、完善报告、与开发扯皮推进

初级渗透测试工程师的一周:测漏洞、写报告、跟开发扯皮 很多人以为渗透测试工程师 “每天就是找漏洞、拿服务器权限”,实际工作里 ——30% 时间测漏洞,40% 时间写报告,20% 时间跟开发掰扯 “这到底算不算漏洞”,还有 1…

作者头像 李华