Earyant的技术博客

欢迎来到Earyant的技术博客,在这里我将与你分享新技术。

2. 怎样处理类别型特征

1、如何处理类别型特征
类别特征(Categorical Feature)主要是指性别(男、女)、血型(A、B、AB、O)等只在有限选项内取值的特征。类别型特征的原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型才能正确工作。
在处理类别型特征,可以通过各种方式的编码来处理。比如序号编码、 独热编码、二进制编码等

2、常用编码方法
2.1 序号编码
序号编码通常用于处理类别间具有大小关系的数据。例如成绩,一般分为不及格、及格、良好、优秀,并且存在“不及格 < 及格 < 良好 < 优秀”的排序关系。序号编码会按照大小关系对类别型特征赋值一个数值ID,例如不及格表示为0、及格表示为1、良好表示为2、优秀表示为3,转换后依然保留大小关系。

2.2 独热编码
独热编码通常用于处理类别间具备大小关系的特征。例如血型,一共有四个取值,独热编码会把血型变成一个四维稀疏矩阵,A型血表示为(1,0,0,0),B血型为(0,1,0,0),AB表示为(0,0,1,0),O型血表示为(0,0,0,1)。

对于类别取值较多的情况下使用独热编码需要注意以下问题:

  1. 使用稀疏向量来节省空间

  2. 配合特征选择来降低维度

2.3 二进制编码
二进制编码主要分为两步,先用序号编码给每一个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。

血型 类别 ID(序号编码) 独热编码 二进制编码
A 1 1 0 0 0 0 0 1
B 2 0 1 0 0 0 1 0
AB 3 0 0 1 0 0 1 1
O 4 0 0 0 1 1 0 0

为什么能使用One-Hot Encoding?
使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,也是基于的欧式空间。

将离散型特征使用one-hot编码,可以会让特征之间的距离计算更加合理。比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,计算出来的特征的距离是不合理。那如果使用one-hot编码,显得更合理。

独热编码优缺点
优点:独热编码解决了分类器不好处理属性数据的问题,在一定程度上也起到了扩充特征的作用。它的值只有0和1,不同的类型存储在垂直的空间。

缺点:当类别的数量很多时,特征空间会变得非常大。在这种情况下,一般可以用PCA(主成分分析)来减少维度。而且One-Hot Encoding+PCA这种组合在实际中也非常有用。

One-Hot Encoding的使用场景
独热编码用来解决类别型数据的离散值问题。将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码,比如,该离散特征共有1000个取值,我们分成两组,分别是400和600,两个小组之间的距离有合适的定义,组内的距离也有合适的定义,那就没必要用one-hot 编码。

基于树的方法是不需要进行特征的归一化,例如随机森林,bagging 和 boosting等。对于决策树来说,one-hot的本质是增加树的深度,决策树是没有特征大小的概念的,只有特征处于他分布的哪一部分的概念。

欢迎关注我的其它发布渠道