sklearn中的OneHotEncoder

news/2025/11/24 17:13:07/文章来源:https://www.cnblogs.com/saulstavo/p/19264918

先不管 LightGBM,咱先把这段 FeatureEncoder 当成一个小黑盒,看看它的 fit 到底干了啥。你问“举例讲解”,那我就给你造个最小可复现样例,按行走一遍。


1. 先假设有这样一份原始数据 X

比如你的训练集里有这些列(随便举个 5 行的小表):

LeID   性别   地址-省市   Price    label
1001       男    北京       3999.0   1
1002       女    上海       2599.0   0
1003       女    北京       1999.0   1
1004       男    深圳       4999.0   0
1005       男    上海       2999.0   1

你在外面这样调用:

fe = FeatureEncoder()
fe.fit(df)      # df 就是上面的 DataFrame

现在开始走进 fit,一行一行看它做了什么。


2. 第一步:分离 label(y = X.pop("label")

y = X.pop("label")

pop("label") 有两个效果:

  1. 返回这一列的数据,赋值给 y
  2. 同时从 X 里删掉 "label" 这一列

所以此时:

  • y 长这样(Series,长度 5):

    0    1
    1    0
    2    1
    3    0
    4    1
    
  • X 被“减肥”成这样(只剩下特征,不含 label):

    LeID   性别   地址-省市   Price
    1001       男    北京       3999.0
    1002       女    上海       2599.0
    1003       女    北京       1999.0
    1004       男    深圳       4999.0
    1005       男    上海       2999.0
    

顺便一嘴:因为 pop 会修改原来的 DataFrame,如果你外面传进来的是 df 本体,它也会被删掉 label,所以实战中一般会传 df.copy() 进来,这样比较安全。


3. 第二步:区分类别特征和数值特征

self.cat_cols = [c for c in X.columns if X[c].dtype == "object"]
self.num_cols = [c for c in X.columns if X[c].dtype != "object"]

看当前的 X:

  • LeID:如果你读 CSV 时设成字符串,就是 object
  • 性别 :字符串 → object
  • 地址-省市 :字符串 → object
  • Price :浮点数 → float64

那么这两行执行后:

self.cat_cols = ["LeID", "性别", "地址-省市"]   # 3 个类别特征
self.num_cols = ["Price"]                         # 1 个数值特征

这俩列表后面会喂给 ColumnTransformer,告诉它哪些列走 OneHot,哪些列直接透传。


4. 第三步:构建列变换器 ColumnTransformer

self.preprocessor = ColumnTransformer(transformers=[("cat", OneHotEncoder(handle_unknown="ignore"), self.cat_cols),("num", "passthrough", self.num_cols)]
)

这一步相当于在说:

  • 名字叫 "cat" 的这一路:

    • 使用 OneHotEncoder(handle_unknown="ignore")
    • 只处理 self.cat_cols 里这三列:LeID, 性别, 地址-省市
  • 名字叫 "num" 的这一路:

    • 使用 "passthrough"(原样通过)
    • 处理 self.num_colsPrice

注意这里的关键点:

  • OneHotEncoder(handle_unknown="ignore") 会在 fit 的时候记住每一列中出现过的类别
  • 以后 transform 时,如果来了没见过的新类别,就会把那一列编码成全 0,而不是报错、也不会乱映射

5. 第四步:self.preprocessor.fit(X) 到底学了什么?

self.preprocessor.fit(X)

这里真正发生的是:

  1. 对类别那一路("cat"):

    • OneHotEncoder 会扫描每个类别列,统计所有出现过的类别

    • 比如:

      • LeID: ["1001", "1002", "1003", "1004", "1005"](一般不会这么用 ID 当类别,但只是举例)
      • 性别: ["女", "男"]
      • 地址-省市: ["北京", "上海", "深圳"]
    • 然后在内部建立一个类别 → one-hot index 的字典

    • 它会在属性里存下来,比如:

      encoder = self.preprocessor.named_transformers_["cat"]
      encoder.categories_
      # 可能是类似:
      # [
      #   array(['1001', '1002', '1003', '1004', '1005'], dtype=object),
      #   array(['女', '男'], dtype=object),
      #   array(['上海', '北京', '深圳'], dtype=object)
      # ]
      
  2. 对数值那一路("num"):

    • 因为是 "passthrough"fit 其实没啥要学的
    • 它只会记住“要把这一列原样接到输出后面去”

所以 fit 做完之后:

  • 模型本身没有生成新数据,只是学会了“以后要怎么变换”
  • self.preprocessor 里已经完整记录了每个类别列的类别集合和 one-hot 映射规则
  • 这就是“拟合编码器”的过程

6. 如果之后 transform,会出现什么结果?

虽然你问的是 fit,但补一句 transform,能帮你直观理解 fit 的价值。

X_enc = fe.transform(X)

此时输出的 X_enc 可能是一个稀疏矩阵,列大致是:

[LeID_1001, LeID_1002, ..., LeID_1005,性别_女, 性别_男,地址-省市_上海, 地址-省市_北京, 地址-省市_深圳,Price]

行数还是 5 行,对应每一条样本。

如果未来有一条新样本:

LeID = 9999
性别 = 男
地址-省市 = 杭州
Price = 3999.0

执行 fe.transform(new_X) 时:

  • LeID=9999:没在训练集出现过 → 这一块 one-hot 全 0
  • 地址-省市=杭州:也没见过 → 对应那几个省市的 one-hot 全 0
  • 性别=男:见过 → 正常 one-hot 编码到 "性别_男" 那一维
  • Price 直接原样放到最后一列

这就是 handle_unknown="ignore" 真正发挥作用的地方。


7. fit_transform 是个啥?

def fit_transform(self, X: pd.DataFrame):return self.fit(X).transform(X)

等价于:

  1. fit(X):学习类别 → 编好映射
  2. transform(X):用学到的映射把当前 X 变成 one-hot + 数值拼接的矩阵

用起来就是一行搞定:

fe = FeatureEncoder()
X_enc = fe.fit_transform(df)   # 得到可以直接丢给 LightGBM 的特征矩阵

总结一句:
fit 这一步的本质,就是看一眼你的全部训练特征,搞清楚每个类别列有哪些取值,并把“类别 → one-hot 下标”的规则记下来,再配上数值列“原样透传”的策略。以后所有训练集、验证集、测试集,都用这套规则统一编码,模型才不会训练一套、预测另一套乱套。

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

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

相关文章

AI 十大论文精讲(七):Switch Routing 如何破解 MoE 的路由、通信与稳定性三大痛点

《Switch Transformers:用简单高效的稀疏化实现万亿参数模型》论文解读 本文深入解析了Google提出的Switch Transformers架构,该论文通过创新的稀疏化设计解决传统MoE模型的路由复杂性和训练不稳定性问题。核心创新在…

怎么都在 AKIOI

[<难度> <省份> <初始人数>-<剩余人数>] <结局> <表现分> <第一个人知识分> <第二个人知识分> ...集训流一直集训,压力大了就放假。 接受所有能加钱的机会。简单模式…

合规为先 安全护航 — 专业医疗器械第三方公司推荐!

在医疗器械行业,合规性与安全性是产品成功的基石。随着医疗技术的不断进步和监管要求的日益严格,选择一家专业、可靠的第三方服务公司成为企业产品上市的关键。今天,我们首先聚焦于一家在医疗器械领域深耕多年的领军…

一文带你读懂“脉冲输入输出模块”

在自动化生产的世界里,传感器、执行器、控制器每天都在“对话”。可问题是,它们说的语言千奇百怪——有的输出电压信号,有的传输电流信号,还有的发出一连串高速脉冲。如果没有“翻译官”,系统就乱了套。 而“脉冲…

推歌/个人歌单 - Gon

mixeva 桜流し 残酷な天使のテーゼ One Last Kiss Beautiful World detective conan 渡月橋 君想ふ(Cover 倉木麻衣) Time after time ~花舞う街で~ きみと恋のままで終われない いつも夢のままじゃいられない/恋人…

高级语言程序第六次作业 - 102300317

这个作业属于哪个课程 2025高级语言程序设计 (福州大学)这个作业的要求在哪里 高级语言程序设计课程第六次个人作业学号 102300317姓名 李东阳(1)设计一个按值传递和按地址传递呈现不同效果的程序。(2)编写函数fun…

2025年11月刷宝游戏推荐:知名游戏榜单与选择指南

在当今游戏市场,刷宝类游戏以其独特的成长循环和装备收集乐趣吸引了大量玩家。这类游戏通常融合角色扮演与动作元素,玩家通过不断击败敌人获取更强大的装备,提升角色能力,挑战更高难度的内容。选择一款合适的刷宝游…

2025年11月暗黑游戏推荐:权威榜单与选择指南

在选择暗黑风格游戏时,许多玩家都希望找到一款能够满足长期游玩需求、具备深度养成系统且运行稳定的作品。这类玩家通常注重游戏的耐玩性、装备系统的丰富性以及剧情代入感,他们可能是已经接触过类似作品的中重度玩家…

微店商品详情接口深度挖掘:从多接口联动到数据全息重构

微店商品详情页的数据并非来自单一接口,而是通过多个接口协同返回,包括基础信息接口、库存接口、评价接口等。本文将突破传统的单接口调用思路,通过分析接口间的依赖关系,实现多接口联动采集,并创新性地提出 “数…

2025年四川电线电缆/中压/低压/高压厂家综合实力排行榜TOP5:专业技术与口碑的双重保障

摘要 随着我国新基建和新能源产业的快速发展,线缆行业迎来了新一轮增长机遇。成都作为西南地区重要的制造业基地,线缆生产企业数量众多,质量参差不齐。本文基于行业数据调研,为您呈现2025年成都地区线缆厂家的综合…

2025年工业吸尘器供应商权威推荐榜单:水浴式防爆除尘器/水浴式吸尘器/镁铝钛粉末吸尘器源头厂家精选

在工业生产和现代化厂房环境中,粉尘控制和清洁处理直接关系到生产安全、产品质量和员工健康。工业吸尘器作为关键清洁设备,其性能与可靠性对企业的成本控制和合规运营有着重要影响。 工业吸尘器已从简单的清洁工具发…

2025年绞吸式清淤船直销厂家权威推荐榜单:河道清淤船/清淤设备/绞吸式挖泥船源头厂家精选

在水环境治理与航道疏浚领域,绞吸式清淤船凭借其高效挖掘和输送能力,已成为河道清淤、湖泊整治、港口扩建及吹填造地工程的核心装备。 随着我国环保政策持续收紧及水利基建投入加大,绞吸式清淤船市场需求稳步增长,…

【C++】完美转发(转载)

【C++】完美转发 最新推荐文章于 2025-10-10 13:17:39 发布 原创 于 2025-09-10 15:01:29 发布 993 阅读2511 CC 4.0 BY-SA版权 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出…

2025年回转式清污机生产厂家权威推荐榜单:钢丝绳牵引清污机/抓斗清污机/除污机源头厂家精选

在水环境治理与水利设施建设持续投入的背景下,回转式清污机作为水处理系统的关键设备,其性能与可靠性直接影响着水质净化效率与工程运行成本。 据水利行业统计数据显示,我国每年新建和改造的水处理项目中对清污设备…

医疗器械第三方公司哪个靠谱?从资质到服务全解析!

在医疗器械行业,选择一家靠谱的第三方检测与研发服务公司至关重要。它不仅关乎产品的合规上市,更直接影响到企业的市场竞争力与品牌声誉。本文将为您深度解析几家在业内享有盛誉的医疗器械第三方公司,从资质到服务进…

深入解析:大数据:python药材数据可视化分析系统 中药数据分析 医药数据分析 Django框架 Echarts可视化 requests爬虫 ✅

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

C# 获取多个显示器信息、分辨率、缩放系数

在很多应用场景中,我们需要获取当前系统的显示器信息,特别是多显示器配置下的各个显示器的分辨率、缩放系数等。例如,在开发图形设计软件、游戏或需要全屏显示的应用时,了解显示器的物理和逻辑分辨率以及缩放系数至…

SELinux笔记-3-Android官方文档 - Hello

SELinux笔记-3-Android官方文档注:摘录自 Android 中的安全增强型 Linux: https://source.android.com/docs/security/features/selinux?hl=zh-cn Android 中的安全增强型 Linux 一、概述 作为 Android 安全模型的一…

2025年国内口碑好的GEO优化实力厂家哪家好,GEO优化AI工具排名/会展服务/短视频矩阵/节目内容策划制作GEO优化品牌排行榜单

评测背景 随着数字营销进入精细化运营时代,GEO优化作为提升广告投放精准度的关键技术,已成为企业营销战略的重要组成部分。本次评测选取了国内多家主流GEO优化服务商,从企业资质、技术实力、服务经验、行业资源等多…

哪个医疗器械第三方公司好?资质齐全口碑佳医疗器械公司推荐!

在医疗器械行业,选择一家资质齐全、口碑上佳的第三方服务公司,对于产品的合规上市与市场推广至关重要。今天,我们就来深入剖析几家在行业内享有盛誉的医疗器械第三方服务公司,其中重点介绍斯坦德医疗器械,同时还会…