什么样的特征是类别型特征?
类别型特征主要是指性别(男/女),体型(胖/瘦/适中)等只有在选项内取值的特征,类别型特征的原始输入通常是字符串形式,除了决策树等少数模型能够直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。
序号编码
序号编码通常用于处理类别间具有大小关系的数据,例如考试的成绩可以由好到坏分为(A、B、C、D)四档,序号编码会把他们按照大小关系表示为(1、2、3、4),这样变换完了之后依然保持着大小的关系。
然而当一组数据之间不再具有大小关系的时候,如血型(A、B、AB、O)四个属性值之间是没有大小关系的(此时可以认为是几个平行关系的属性,甚至是几个完全抽象的无法理解的数据),这样的数据是不可以使用序号编码的,此时就产生了下面的方法——独热编码。
独热编码
还是以上面的血型(A、B、AB、O)为例,可以表示为:
A:[1,0,0,0]
B:[0,1,0,0]
AB:[0,0,1,0]
O:[0,0,0,1]
独热编码的两个问题:
- 独热编码使用稀疏矩阵来节省空间,独热编码下特征向量只有某一维取值为1,其他的位置均取0,因此可以利用稀疏矩阵有效地节省空间,并且目前大部分算法都接受稀疏向量形式的输入。
- 在KNN算法中,高维空间中的两点之间的距离很难衡量;在逻辑回归中参数的数量会随着维度的增高而增加,容易引起过拟合的问题;维度过大的时候我们可以通过特征选择来降低维度。
二进制编码
二进制编码先给每个类别赋予一个类别ID,然后再将ID对应的二进制编码作为结果。依然用血型的例子可以得到如下的结果:
相对于独热编码,二进制编码更加紧凑,节省存储空间。(效果未必更好)
统计编码
统计各类别在训练集中出现的频率,并将频率作为新的特征。
在某些情况下,具有统计意义的统计编码也是一种值得尝试的技巧。