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 编码是数据预处理中的基础且重要的技术,特别适用于处理名义型分类变量。

相关推荐
Shockang5 小时前
llama.cpp 本地运行 9B 模型:部署、工具调用与微调数据
人工智能
Shockang5 小时前
n8n 智能体工作流实战:触发、工具、记忆与发布护栏
人工智能
冬奇Lab7 小时前
开源项目第241期:YuE2 —— 用符号乐谱当“白盒“接口的开源音乐生成模型,SongBench 超越 Suno v5/v6
人工智能
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源