1. 特征生成介绍¶
- 简述:特征生成用于扩展或者整理特征列,平台整理了两种方法,特征编码和独热编码;
- 举个简单的例子:职业:[“警察”,”消防员”,”医生”]
使用特征编码产生结果,职业:[1,2,3]
使用独热编码产生结果,职业:[001,010,100]
- 两者直观比较:”警察”,”消防员”,”医生”三个职业,两两之间的职业间隔应该为1;
使用特征编码产生的结果造成”警察”与”医生”的职业间隔为2,显然是不合适的;
使用独热编码产生的结果各个职业之间的间隔为sqrt( 1^2 + 1^2 ),显然更符合实际。
当然两种方法各有优劣,下面进行比较:
- 比较:
- 独热编码
优点:解决了分类器不好处理分类数据的问题,在一定程度上也起到了扩充特征的作用。它的值只有0和1,不同的类型存储在垂直的空间。
缺点:当类别的数量很多时,特征空间会变得非常大,容易造成维度灾难。
- 特征编码
优点:解决了分类编码的问题,可以自由定义量化数字。但其实也是缺点,因为数值本身没有任何含义,只是排序。如大中小编码为123,也可以编码为321,即数值没有意义。
缺点:可解释性比较差。比如有[dog,cat,dog,mouse,cat],我们把其转换为[1,2,1,3,2],这里就产生了一个奇怪的现象:dog和mouse的平均值是cat。因此,Label encoding编码其实并没有很宽的应用场景。
- 两种编码该如何区分和使用:
- 对于定类类型的数据,建议使用one-hot encoding。
定类类型就是纯分类,不排序,没有逻辑关系。比如性别分男和女,男女不存在任何逻辑关系,我们不能说男就比女好,或者相反。再者,中国各省市分类也可以用独热编码,同样各省不存在逻辑关系,这时候使用one-hot encoding会合适些。但注意,一般会舍去一个变量,比如男的对立面肯定是女,那么女就是重复信息,所以保留其中一个变量即可。
- 对于定序类型的数据,建议使用label encoding。
定序类型也是分类,但有排序逻辑关系,等级上高于定类。比如,学历分小学,初中,高中,本科,研究生,各个类别之间存在一定的逻辑,显然研究生学历是最高的,小学最低。这时候使用Label encoding会显得更合适,因为自定义的数字顺序可以不破坏原有逻辑,并与这个逻辑相对应。
- 对数值大小敏感的模型必须使用one-hot encoding。
典型的例子就是LR和SVM。二者的损失函数对数值大小是敏感的,并且变量间的数值大小是有比较意义的。而Label encoding的数字编码没有数值大小的含义,只是一种排序,因此对于这些模型都使用one-hot encoding。
- 对数值大小不敏感的模型(如树模型)不建议使用one-hot encoding。
一般这类模型为树模型。如果分类类别特别多,那么one-hot encoding会分裂出很多特征变量。这时候,如果我们限制了树模型的深度而不能向下分裂的话,一些特征变量可能就因为模型无法继续分裂而被舍弃损失掉了。因此,此种情况下可以考虑使用Label encoding。