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

one-hot编码

我来详细介绍一下one-hot 编码(独热编码)。

什么是 One-Hot 编码?

One-Hot 编码是一种将分类变量转换为二进制向量的技术,其中每个类别都表示为一个二进制向量,只有一个元素为1("热"),其余都为0。

工作原理

假设有一个颜色类别变量:["红", "绿", "蓝"]

原始数据:

text

红 绿 蓝 红

One-Hot 编码后:

text

红 → [1, 0, 0] 绿 → [0, 1, 0] 蓝 → [0, 0, 1] 红 → [1, 0, 0]

为什么要使用 One-Hot 编码?

  1. 消除类别间的序数关系:避免机器学习模型误以为类别之间有大小顺序关系

  2. 兼容算法:许多机器学习算法(如线性回归、神经网络)需要数值输入

  3. 保持类别独立性:每个类别都成为独立的特征维度

在 Python 中的实现

方法1:使用 pandas

python

import pandas as pd # 创建示例数据 df = pd.DataFrame({'颜色': ['红', '绿', '蓝', '红', '绿']}) # 进行 one-hot 编码 one_hot = pd.get_dummies(df['颜色'], prefix='颜色') print(one_hot)

方法2:使用 scikit-learn

python

from sklearn.preprocessing import OneHotEncoder import numpy as np # 创建示例数据 data = np.array(['红', '绿', '蓝', '红', '绿']).reshape(-1, 1) # 创建编码器 encoder = OneHotEncoder(sparse_output=False) # 拟合和转换 one_hot_encoded = encoder.fit_transform(data) print(one_hot_encoded)

One-Hot 编码的优缺点

优点:

  • ✅ 简单直观,易于实现

  • ✅ 消除了类别间的虚假序数关系

  • ✅ 与大多数机器学习算法兼容

缺点:

  • 维度灾难:如果类别很多,会创建大量稀疏特征

  • 稀疏矩阵:存储效率低

  • ❌ 丢失了类别之间的关系信息(如果有的话)

替代方案

  1. 标签编码(Label Encoding):将类别转换为数字(0, 1, 2...)

  2. 目标编码(Target Encoding):用目标变量的统计量编码

  3. 二进制编码(Binary Encoding):将类别先转换为数字,再转换为二进制

实用建议

  • 当类别数量较少(如<15)时,使用 One-Hot 编码

  • 当类别数量很多时,考虑其他编码方式或特征选择

  • 在神经网络中,One-Hot 编码通常用于输入层

  • 对于有序类别,可以考虑使用有序编码而不是 One-Hot

示例:完整代码

python

import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # 示例数据 data = pd.DataFrame({ '颜色': ['红', '绿', '蓝', '红', '绿', '蓝'], '尺寸': ['大', '中', '小', '中', '大', '小'], '价格': [100, 200, 150, 120, 180, 160] }) # One-Hot 编码分类变量 data_encoded = pd.get_dummies(data, columns=['颜色', '尺寸']) print("原始数据:") print(data) print("\nOne-Hot 编码后:") print(data_encoded)

One-Hot 编码是数据预处理中的基础且重要的技术,特别适用于处理名义型分类变量。

http://www.cnnetsun.cn/news/175170.html

相关文章:

  • 测试20个降AI率工具后,我找到了2个去ai痕迹效果好的网站,还有免费降AI额度。
  • Thinkphp和Laravel在线点餐系统的设计与实现vue
  • 现代cpp在传统内存分配上的改进
  • Java毕设项目:基于springboot的物业报修系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 【计算机毕业设计案例】基于springboot的物业报修系统的设计与实现线上化的报修管理平台(程序+文档+讲解+定制)
  • Java毕设选题推荐:基于springboot的社区团购系统的设计与实现、拼团下单、配送调度、资金结算【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java计算机毕设之基于springboot的幼儿园管理系统的设计与实现为幼儿园(含普惠园、民办园、连锁园)设计的 “家园共育 + 日常运营 + 安全监管(完整前后端代码+说明文档+LW,调试定制等)
  • I/O多路复用
  • 视频播放器PotPlayer下载安装教程:超详细图文步骤(PC+安卓)
  • Semantic Kernel 实战系列(六) - Memory与向量存储
  • 一个基于 .NET MAUI 的开箱即用的 UI 组件库,可快速搭建面向业务的应用程序界面!
  • Semantic Kernel 实战系列(七) - 高级主题 - Agents 与多代理系统
  • LeetCode每日一题——K个一组翻转链表
  • 大模型后训练:中美路径与商业闭环|附56页PDF文件下载
  • 震惊!选对云服务器代理商,这5个关键指标必须知道!
  • 2025年度复盘与总结
  • ESA正式授予Sivers波束成形技术开发合同
  • 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF
  • Java毕设项目:基于springboot的高校校园一卡通管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 2025年最实用的3个免费降ai率工具和免费ai查重工具,不用焦虑ai率过高!
  • 计算机Java毕设实战-基于springboot村委办公管理系统 基于SpringBoot的乡村事务综合服务平台的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Java毕设选题推荐:基于springboot的村务管理系统的设计与实现智慧村务管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 老派C++程式設計師 vs. 現代C++程式設計師:類型系統觀念的全面戰爭
  • 2025年论文去AI率工具合集:每天5次免费AIGC查重+1500字免费降AI!
  • MySQL 千万级表变更字段,要想不锁表,可以这么做!
  • 【毕业设计】基于springboot的校园零售管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 硬件自查自纠!十年前的电脑可能还可以再战十年
  • 一键配置 Web 前端开发环境(PowerShell 自动化脚本)
  • 程序员必备技能:AI Agent 9种设计模式深度解析,提升大模型应用效能(值得收藏)
  • 【python大数据毕设实战】哮喘患者症状数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习