决策树如何处理类别特征?
简化版
决策树处理类别特征可采用原生集合切分、one-hot,或谨慎的目标统计编码。原生切分能表达类别子集,但高基数搜索昂贵且易过拟合;one-hot 简单却可能需要多层才能组合多个类别,目标编码则必须防止泄漏。
详细版
-
无序类别不能直接按整数编码后的大小解释,编号 3 大于 1 没有语义。
-
二叉树可搜索
category ∈ S,但 K 个类别的子集候选呈指数增长。 -
one-hot 将每类变成指示变量,单次切分通常隔离一个类别。
-
有序类别可按真实顺序寻找 K-1 个阈值,前提是顺序由业务定义。
-
目标编码需在训练折外计算并平滑,未知类别还要有默认策略。
完整版教学
一、类别没有距离,切分必须尊重语义
连续特征的阈值依赖自然顺序,而颜色、城市等无序类别不存在统一的“小于”。
随意映射成 0、1、2 会人为限定只能切连续编号集合。
原生类别树直接寻找能降低不纯度的类别集合。
某些二分类损失下可先按类别目标均值排序再扫阈值,避免穷举,但这种排序本身仍应只由训练数据得到。
二、数学机制怎么落到节点上
unordered split: x_category in S ? left : right;number of non-duplicate binary partitions = 2^(K-1) - 1。
unordered split: x_category in S ? left : right
number of non-duplicate binary partitions = 2^(K-1) - 1
K=10 -> 511 possible partitions
三、带数字的推演
颜色有 {红,绿,蓝,黄}。
整数编码后用 x<2.5 只能按编号顺序分组;原生集合切分却能选择 {红,黄} 对 {绿,蓝}。
K=20 时朴素子集数超过 52 万,必须剪枝或排序近似。
四、方法对比
| 方法/对象 | 核心特点 | 代价或限制 |
|---|---|---|
| 原生类别切分 | 直接找类别集合 | 表达强,搜索和实现复杂 |
| One-hot | 转成多个 0/1 特征 | 稳妥但维度高 |
| 目标编码 | 类别映射为目标统计 | 紧凑但泄漏风险高 |
五、从训练到验证的执行链
识别有序/无序 -> 统计基数与稀有类别 -> 选择原生或编码
-> 仅用训练折拟合编码 -> 处理未知类别 -> 验证高基数过拟合
六、边界条件与工程代价
测试出现新类别时,one-hot 可落到全零或 unknown 列,原生算法也要定义 missing/other 分支。
若不预先设计,线上会直接报错或错误映射。
合并稀有类别能降低方差,但不能把具有重要风险含义的少数类别盲目归为 other;需要结合频数、目标差异和业务语义。
记忆钩子:先问类别有没有真实顺序,再问基数多高。
七、常见误区与追问
-
误区:LabelEncoder 后可直接当连续数切分。 无序编号会引入虚假的大小和邻近关系。
-
追问:原生类别切分为何昂贵? K 类的二分集合数量按指数增长。
-
误区:目标编码用全量训练数据算均值即可。 当前样本标签会泄漏进自身特征,必须折外计算。
-
追问:有序类别如何处理? 若顺序可靠,可保留顺序并扫描相邻阈值。
-
追问:线上未知类别怎么办? 预留 unknown/other 规则或使用算法支持的缺失方向。
八、加强记忆
先问类别有没有真实顺序,再问基数多高。
无序类别不能相信整数大小;原生集合切分表达强,one-hot 稳妥,目标编码紧凑但必须折外防泄漏。