1. 特征编码的必要性
当拿到的数据比较脏乱,带有各种非数字特殊符号,如中文。而实际上机器学习模型需要的数据是数字型的,因为只有数字类型才能进行计算。因此,对于各种特殊的特征值,都需要对其进行相应的编码,也是量化的过程。
2. 特征编码的类型
2.1 分类型特征的编码方式
对于分类型数据的编码,通常会使用两种方式来实现,分别是:one-hot encoding 和 label-encoding。下面我们先介绍一下这两种编码
2.1.1 one-hot encoding独热编码
one-hot encoding也就是我们常常听到的独热编码(哑变量),独热编码就是将原始特征变量转换成以原始特征值分类的多维度的变量,并用是否(0,1)这种方式的新特征值替代和量化。
优点:解决了分类器不好处理分类数据的问题,在一定程度上也起到了扩充特征的作用。它的值只有0和1,不同的类型存储在垂直的空间。
缺点:当类别的数量很多时,特征空间会变得非常大,容易造成维度灾难。
2.1.2 label-encoding 标签编码
Label encoding就是将原始特征值编码为自定义的数字标签完成量化编码过程。
优点:解决了分类编码的问题,可以自由定义量化数字。但其实也是缺点,因为数值本身没有任何含义,只是排序。如大中小编码为123,也可以编码为321,即数值没有意义。
缺点:可解释性比较差。比如有[dog,cat,dog,mouse,cat],我们把其转换为[1,2,1,3,2],这里就产生了一个奇怪的现象:dog和mouse的平均值是cat。因此,Label encoding编码其实并没有很宽的应用场景。
2.2 离散型特征的编码
而对于连续型的变量,如果需要编码首先需要进行离散化(分箱),然后再使用上述编码方式编码。
2.2.1 连续值的离散化方法
3. 两种编码区分使用(经验之谈)
明白这两种编码方式并不难,难的是如何区分和使用。该使用哪种编码方式最为合适,有以下两点需要考量:
(1)特征的数据类型
(2)所要使用的模型
特征数据类型:
(1)对于定类类型的数据,建议使用one-hot encoding。定类类型就是纯分类,不排序,没有逻辑关系。比如性别分男和女,男女不存在任何逻辑关系,我们不能说男就比女好,或者相反。再者,中国各省市分类也可以用独热编码,同样各省不存在逻辑关系,这时候使用one-hot encoding会合适些。但注意,一般会舍去一个变量,比如男的对立面肯定是女,那么女就是重复信息,所以保留其中一个变量即可。
(2)对于定序类型的数据,建议使用label encoding。定序类型也是分类,但有排序逻辑关系,等级上高于定类。比如,学历分小学,初中,高中,本科,研究生,各个类别之间存在一定的逻辑,显然研究生学历是最高的,小学最低。这时候使用Label encoding会显得更合适,因为自定义的数字顺序可以不破坏原有逻辑,并与这个逻辑相对应。
所使用的模型:
(1)对数值大小敏感的模型必须使用one-hot encoding。典型的例子就是LR和SVM。二者的损失函数对数值大小是敏感的,并且变量间的数值大小是有比较意义的。而Label encoding的数字编码没有数值大小的含义,只是一种排序,因此对于这些模型都使用one-hot encoding。
(2)对数值大小不敏感的模型(如树模型)不建议使用one-hot encoding。一般这类模型为树模型。如果分类类别特别多,那么one-hot encoding会分裂出很多特征变量。这时候,如果我们限制了树模型的深度而不能向下分裂的话,一些特征变量可能就因为模型无法继续分裂而被舍弃损失掉了。因此,此种情况下可以考虑使用Label encoding。





