【AI知识点】特征编码(Feature Encoding)

embedded/2025/2/6 10:38:56/

特征编码 是将数据集中的分类特征(Categorical Features)转换为数值特征(Numerical Features)的过程。分类特征是机器学习模型(尤其是数值模型,如线性回归、支持向量机等)无法直接处理的数据类型,必须通过特征编码进行转换。


特征编码的主要方法

1. One-Hot Encoding(独热编码

将分类变量的每个类别转换为一个独立的二进制特征。

特点

  • 每个类别都会变成一个新列。
  • 某样本属于某个类别时,该列值为 1,其他列值为 0。

适用场景

  • 类别数量较少(低基数特征)。
  • 特征之间没有大小顺序或关系。

示例
对于一个列 Color = ['Red', 'Green', 'Blue']

import pandas as pd
data = pd.DataFrame({'Color': ['Red', 'Green', 'Blue']})
one_hot = pd.get_dummies(data['Color'])
print(one_hot)

输出:

   Blue  Green  Red
0     0      0    1
1     0      1    0
2     1      0    0

2. Label Encoding(标签编码

将每个类别映射到一个整数值。

特点

  • 简单高效。
  • 但会引入类别的隐含顺序,可能会误导模型(尤其是线性模型)。

适用场景

  • 树模型(如决策树、随机森林、XGBoost 等),它们对数值的大小不敏感。
  • 类别数量较多时(比 One-Hot 更节省内存)。

示例

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data['Color_encoded'] = le.fit_transform(data['Color'])
print(data)

输出:

   Color  Color_encoded
0    Red              2
1  Green              1
2   Blue              0

3. Ordinal Encoding(有序编码)

对有序分类特征(如学历、评分等)按照指定顺序进行整数映射。

特点

  • 映射顺序需由领域知识决定。
  • 避免误导模型需要明确类别的大小关系。

适用场景

  • 分类特征具有明确的顺序(如“低、中、高”)。

示例

education_mapping = {'High School': 0, 'Bachelor': 1, 'Master': 2, 'PhD': 3}
data['Education_encoded'] = data['Education'].map(education_mapping)

4. Target Encoding(目标编码

将分类特征的每个类别替换为其对应目标变量(如回归中的目标值)的均值。

特点

  • 捕获特征和目标之间的统计关系。
  • 可能引入数据泄漏,需要结合交叉验证。

适用场景

  • 高基数分类特征(如商品 ID、用户 ID)。
  • 分类特征与目标变量强相关。

示例

from category_encoders import TargetEncoder
te = TargetEncoder()
data['Category_encoded'] = te.fit_transform(data['Category'], data['Target'])

5. Binary Encoding(二进制编码)

将类别转换为其对应整数值的二进制表示,再将二进制拆分为多个列。

特点

  • 适合中等基数特征。
  • 比 One-Hot 节省内存,但比 Label Encoding 更能捕捉关系。

示例
对于类别 [‘A’, ‘B’, ‘C’, ‘D’],其编码为:

  • A = 0 -> [0, 0]
  • B = 1 -> [0, 1]
  • C = 2 -> [1, 0]
  • D = 3 -> [1, 1]

代码实现

from category_encoders import BinaryEncoder
be = BinaryEncoder(cols=['Category'])
binary_encoded = be.fit_transform(data['Category'])

6. Frequency Encoding(频率编码)

用类别的出现频率代替类别值。

特点

  • 简单高效。
  • 适合类别出现次数与目标变量相关的情况。

适用场景

  • 高基数特征。
  • 频率信息与目标相关。

示例

data['Frequency_encoded'] = data['Category'].map(data['Category'].value_counts() / len(data))

7. Hashing Encoding(哈希编码)

通过哈希函数将类别映射到固定数量的列。

特点

  • 空间效率高,避免了 One-Hot 的爆炸性增长。
  • 存在哈希冲突,可能导致信息丢失。

适用场景

  • 超高基数特征(如数百万个类别)。

示例

from sklearn.feature_extraction import FeatureHasher
fh = FeatureHasher(n_features=10, input_type='string')
hashed = fh.fit_transform(data['Category'])

对比不同编码方法

编码方法是否引入顺序信息内存占用是否适用高基数适用模型
One-Hot Encoding所有模型
Label Encoding树模型(决策树等)
Ordinal Encoding对顺序敏感的模型
Target Encoding所有模型
Binary Encoding所有模型
Frequency Encoding所有模型
Hashing Encoding所有模型

选择合适的编码方法

  • 低基数特征(<10 类)
    • 推荐使用 One-Hot Encoding 或 Ordinal Encoding。
  • 中等基数特征(10-100 类)
    • 推荐使用 Target Encoding 或 Binary Encoding。
  • 高基数特征(100+ 类)
    • 推荐使用 Target Encoding、Frequency Encoding 或 Hashing Encoding。
  • 树模型
    • 使用 Label Encoding 或 Target Encoding。

通过合理选择编码方法,可以提升模型的效果和计算效率! 🚀


http://www.ppmy.cn/embedded/159999.html

相关文章

图像特征点提取与匹配

引入 视觉里程计根据两帧图像确定机器人的位姿变化。视觉里程计的算法主要分为两个大类&#xff1a;特征点法和直接法。特征点法长久以来&#xff08;直到现在&#xff09;被认为是视觉里程计的主流方法。而特征点法首先需要提取特征点并进行匹配。 1. 特征点 1.1特征点的定义…

Spring Boot统一异常拦截实践指南

Spring Boot统一异常拦截实践指南 一、为什么需要统一异常处理 在Web应用开发中&#xff0c;异常处理是保证系统健壮性和用户体验的重要环节。传统开发模式中常见的痛点包括&#xff1a; 异常处理逻辑分散在各个Controller中错误响应格式不统一敏感异常信息直接暴露给客户端…

【C语言】自定义类型讲解

文章目录 一、前言二、结构体2.1 概念2.2 定义2.2.1 通常情况下的定义2.2.2 匿名结构体 2.3 结构体的自引用和嵌套2.4 结构体变量的定义与初始化2.5 结构体的内存对齐2.6 结构体传参2.7 结构体实现位段 三、枚举3.1 概念3.2 定义3.3 枚举的优点3.3.1 提高代码的可读性3.3.2 防止…

《手札·开源篇》基于开源Odoo软件与Deepseek的智能企业管理系统集成方案

一、方案背景 随着企业数字化转型的深入&#xff0c;传统ERP系统需要结合AI技术实现智能化升级。本方案将开源ERP系统Odoo与深度求索&#xff08;Deepseek&#xff09;大模型能力深度整合&#xff0c;构建具备智能决策支持、自然语言交互和数据分析增强的企业管理平台。 二、…

C++:虚函数与多态性习题

题目内容&#xff1a; 构建一个车&#xff08;vehicle&#xff09;基类&#xff0c;包含Run、Stop两个纯虚函数。由此基类&#xff0c;派生出&#xff08;Car&#xff09;轿车类&#xff0c;&#xff08;truck&#xff09;卡车类&#xff0c;在这两个类中别分定义Run和Stop两个…

【字节青训营-9】:初探字节微服务框架 Hertz 基础使用及进阶(下)

本文目录 一、Hertz中间件Recovery二、Hertz中间件跨资源共享三、Hertz 响应四、Hertz请求五、Hertz中间件Session 一、Hertz中间件Recovery Recovery中间件是Hertz框架预置的中间件&#xff0c;使用server.Default()可以默认注册该中间件&#xff0c;为Hertz框架提供panic回复…

C语言:结构体

一&#xff0c;结构体 C语⾔已经提供了内置类型&#xff0c;如&#xff1a;char、short、int、long、float、double等&#xff0c;但是只有这些内置类型还是不够的&#xff0c;假设我想描述学⽣&#xff0c;描述⼀本书&#xff0c;这时单⼀的内置类型是不⾏的。 描述⼀个学⽣需…

无人机动力套(电机、电调)技术详解

无人机动力套技术主要涉及电机和电调两大核心组件&#xff0c;它们在无人机的飞行性能中起着至关重要的作用。以下是对无人机动力套技术的详细解析&#xff1a; 一、电机技术详解 1. 电机的作用&#xff1a; 电机是将电能转化为机械能的关键部件&#xff0c;其主要作用是产生…