之前的文章介绍了Numerical features,今天来介绍Categorical features。Categorical features 在我们的生活中也很常见,小到一年四季,一周七天,色彩颜色种类;大到用户id,CTR中的广告对象,这些都是属于Categorical features。
区别Numerical和Categorical的方法比较简单,那就是看数值的magnitude是否有意义,能否根据这个对数据进行排序。
我今天对categorical feature的介绍,也大致分为这么两类:普通的categorical features和大型的categorical features。
一. 普通的categorical features
(1) Label encode
对categorical feature编码最简单的想法就是,每一个类别分配一个整数。比如类别1分配1,类别2分配2,等等。
这种想法的问题在于,有些毫无关系的类别,在这种编码条件下,反而会得到一个本来不存在的大小关系。
以使用欧氏空间的模型为例,这种空间衡量相似度的一种方法就是通过距离。那显然3对于1的相似度就会小于2对于1的相似度。然而大部分情况下1,2,3这三种类别应该是相互独立的。所以这种编码方法在编码那些具有独立类别的特征时,会有一定问题。
在一些特定的情况下,我们还是可以使用这种编码方法,比如对年龄的编码。0~10岁为类别1, 11~20岁为类别2, 21~30岁为类别3。这里给这三个年龄范围赋予了三个存在大小关系的数字,事实上,他们确实存在着1<2<3这种大小关系。
(2)One-hot encode
独热编码,这种编码解决了label encode的一个问题。那就是免去了不同类别之间的相关性。
还是以欧式空间为例,我们衡量向量之间的相似度的方法是通过余弦相似度,余弦相似度的计算就要通过dot product,显然不同类别之间的one-hot vector点乘的结果是0,换而言之,其余弦相似度也是0,他们相互独立。
但是这种编码方法有一个问题,那就是它存在一个线性约束:对所有样本而言,老特征被独热编码后,产生所有新特征的值,加起来必定为1。