分类特征是重要的一类特征。分类特征是离散的,非连续的。
本文将针对小型分类和大型分类介绍5种主流的编码方式。以及各自的优缺点。
什么是分类(类别)特征?
分类特征是用来表示分类的,他不像数值类特征是连续的,分类特征是离散的。
比如:
- 性别
- 城市
- 颜色
- IP地址
- 用户的账号ID
有些分类特征也是数值,比如账号ID,IP地址。但是这些数值并不是连续的。
连续的数字是数值类特征,离散的数字是分类特征。
关于连续和离散的解释可以看看这篇文章:《关于连续和离散的理解》
小型分类特征的编码方式
自然数编码/序列编码-Ordinal Encoding
某些分类本来就有一定的排序,这种情况下就可以使用简单的自然数编码。
例如学位:
学士-0
硕士-1
博士-2
独热编码-One-Hot Encoding
对于城市、颜色、品牌、材质…这些特征就不适合用自然数编码,因为这些特征是没有排序关系的。
使用独热编码可以让不同的分类处在「平等的地位」,不会因为数值的大小而对分类造成影响。
例如颜色分类(假设只有3种颜色):
红色-100
黄色-010
蓝色-001
跟独热编码类似还有「虚拟编码-Dummy Encoding」和「效果编码-Effect Encoding」。
实现方式比较相似,不过有一些略微的差别,并且适用在不同的场景。
感兴趣的可以看看这篇文章:
大型分类特征的编码方式
目标编码-Target Encoding
目标编码是表示分类列的一种非常有效的方法,并且仅占用一个特征空间,也称为均值编码。该列中的每个值都被该类别的平均目标值替代。这可以更直接地表示分类变量和目标变量之间的关系。
目标编码的扩展阅读:《目标编码简介》
散列编码-Hash encoding
散列函数也是大家常听到的哈希函数。散列函数是一个确定性函数,它映射一个潜在的无界整数到有限整数范围[1,m]。
假如有一个分类有1万个值,如果使用独热编码,编码会非常长。而使用了散列编码,不管分类有多少不同的值,都会转换成长度固定的编码。
分箱计数-Bin-Counting
分箱计数的思维有点复杂:他不是用分类变量的值作为特征,而是使用目标变量取这个值的条件概率。
换句话说,我们不对分类变量的值进行编码,而是要计算分类变量值与要预测的目标变量之间的相关统计量。
不同编码的优缺点总结
独热编码-One-Hot Encoding
优点:
- 容易实现
- 分类很精确
- 可用于在线学习
缺点:
- 计算效率不高
- 不能适应可增长的类别
- 只适用于线性模型
- 对于大数据集,需要大规模的分布式优化
散列编码-Hash encoding
优点:
- 容易实现
- 模型训练成本更低
- 容易适应新类别
- 容易处理稀有类
- 可用于在线学习
缺点:
- 只适合线性模型或核方法
- 散列后的特征无法解释
- 精确度难以保证
分箱计数-Bin-Counting
优点:
- 训练阶段的计算负担最小
- 可用于基于树的模型
- 容易适应新的类别
- 可使用back-off方法或最小计数图处理稀有类
- 可解释
缺点:
- 需要历史数据
- 需要延迟更新,不完全适合在线学习
- 很可能导致数据泄露
上面内容摘自:《精通特征工程》
总结
分类特征是离散的特征,数值类特征是连续的。
对于小型分类,常用的编码方式有:
- 自然数编码/序列编码-Ordinal Encoding
- 独热编码-One-Hot Encoding
- 虚拟编码-Dummy Encoding
- 效果编码-Effect Encoding
对于大型分类,常用的编码方式有:
- 目标编码-Target Encoding
- 散列编码-Hash encoding
- 分箱计数-Bin-Counting
相关文章推荐: