Math-09.特征预处理与变换-04.类别特征编码

本页讲解类别特征编码——将离散取值映射为模型可用的数值向量。

段末注释One-Hot 编码(one-hot encoding)为 $K$ 个类别构造 $K$ 维 0/1 向量,恰一类为 1;Target Encoding(目标编码)用训练集目标统计量(如类别均值)替代类别 ID。

系列入口00.系列规划 | 前置:02/10 分类变量相关


1. 编码方式(D2–D3)

图 1 One-Hot vs Target

方法 输出维 适用
Label / Ordinal 1 维整数 有序类别(低/中/高)
One-Hot $K$ 维 $K$ 小(通常 $< 20$)
Target Encoding 1 维实数 高基数、表格树模型
Hash 固定 $h$ 维 极高基数、内存受限
Embedding $d$ 维可学 深度模型(20

2. Target Encoding 与泄漏(D6–D7)

图 2 CV 内 Target Encoding

类别 $c$ 的编码:

$$
\hat{\mu}c = \frac{\sum{i: x_i = c} y_i + \alpha \bar{y}}{n_c + \alpha}
$$

$\alpha$ 为平滑(向全局均值收缩)。必须在 CV 每一 fold 的 train 上算 $\hat{\mu}_c$,再 apply 到 val(08/06)。


3. 跨领域应用(D7)

图 3 编码场景

领域 类别示例 编码
电商 城市、品牌(高基数) Target / Embedding
医疗 ICD 诊断码 Embedding 或分组 One-Hot
金融 行业板块 One-Hot / Ordinal 等级
NLP 词类型 子词 BPE ID → Embedding
基因组 基因 ID、通路 Embedding
汽车 车型年款 Ordinal + One-Hot 混合
蛋白 氨基酸、二级结构 整数索引 + Embedding

4. 局限(D8)

图 4 编码陷阱

陷阱 说明
无序 Label 编码 引入虚假顺序
One-Hot 维数爆炸 高基数稀疏
Target 泄漏 用全数据均值编码
测试新类别 未见类 → 未知 token 策略
树 + One-Hot 可分裂但不如原生类别支持

6. sklearn 示例(D12)

1
2
3
4
5
6
7
import pandas as pd
from sklearn.preprocessing import OneHotEncoder

df = pd.DataFrame({"city": ["A", "B", "A", "C"], "y": [1, 0, 1, 0]})
ohe = OneHotEncoder(sparse_output=False, handle_unknown="ignore")
X = ohe.fit_transform(df[["city"]])
print(ohe.get_feature_names_out(), X)

7. 小结

低基数 One-Hot;高基数 Target/Embedding;有序用 Ordinal。下一篇:05 缺失与异常

系列导航10 Pipeline | 20 领域特化

-------------本文结束感谢您的阅读-------------