机器学习初级篇8——数据的编码方式
机器学习初级篇8——数据的编码方式
类别型特征( Categorical Feature ) 主要是指性别 (男、女)、血型( A 、 B、 AB 、 0 ) 等只在高限选I页内取值的特征。 类别型特征原始输入通常是字符串形式,除7决策树等少 数模型能直接处理字符串形式的输入 3 对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。
一.变量的编码方式
1.序号编码
序号编码通常用于处理类别间具有大小关系的数据。 例如成绩可以分为低、中、高三挡,并且存在“高 > 中 > 低”的排序关系。 序号编码会按照大小关系对类别型特征赋予一个数值 ID ,例如高表示为 3 、中表示为 2 、低表示为 1 ,转换后依然保留了大小关系 。
2.独热编码
1虫热编码通常用于处理类别间不具有大小关系的特征。 例如血型,一共有 4 个取值( A 型血、 B 型血、 AB 型血、 0 型血) ,独热编码会把血型变成一个 4 维稀疏向量, A 型血表示为( 1, 0, 0, 0 ) , B 型血表示为( 0, I, 0, 0 ) , AB 型表示为( 0, 0, I, 0 ) , 0 型血表示为( 0, 0,
0, I ) 。 对于类别取值较多的情况下使用独热编码需要注意以下问题。
( I )使用稀疏向量来节省空间。 在独热编码下,特征向量只有某一维取值为 1 ,真他位置取值均为 0。 因此可以利用向量的稀疏表示有效地节省空间,并且目前大部分的算法均接受稀疏向量形式的输入 。
( 2 )配合特征选择来降低维度。 高维度特征会带来几方面的问题。一是在 K近邻算法中,高维空间下两点之间的距离很难得到高效的衡量;二是在逻辑回归模型中,参数的数量会随着维度的增高而增加,容易引起过拟合问题;三是通常只高部分维度是对台类、预测有帮助,因此可
以考虑配合特征选择来降低维度。
3.二进制编码
二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID ,然后将类别 ID 对应的二进制编码作为结果。 以 A、 B 、 AB 、 0血型为例,表 I. I 是二进制编码的过程。 A 型血的 ID 为 l ,二进制表示为 001; B 型血的 ID 为 2 ,二进制表示为 010,以此类推可以得到AB 型血和 0 型血的二进制表示。 可以看出,二进制编码本质上是利用二进制对 ID 进行哈希映射,最终得到 0/1 特征向量 ,且维数少于独热编码,节省了存储空间。
3.哑变量编码方式
哑变量编码直观的解释就是任意的将一个状态位去除。还是拿上面的例子来说,我们用3个状态位就足够反应上述4个类别的信息,也就是我们仅仅使用前三个状态位 [0,0,0] 就可以表达O型血了。
血型 哑变量编码
A 1 0 0
B 0 1 0
AB 0 0 1
O 0 0 0
二.哑变量编码与独热编码的区别与联系
通过上面的例子,我们可以看出它们的“思想路线”是相同的,只是哑变量编码觉得one-hot编码太罗嗦了(一些很明显的事实还说的这么清楚),所以它就很那么很明显的东西省去了。这种简化不能说到底好不好,这要看使用的场景。下面我们以一个例子来说明:
假设我们现在获得了一个模型
,这里自变量满足
(因为特征是one-hot获得的,所有只有一个状态位为1,其他都为了0,所以它们加和总是等于1),故我们可以用x3=1-x2-x1,表示第三个特征,将其带入模型中,得到:
这时,我们就惊奇的发现(a0,a1,a2,a3)和(a0+a3,a1-a3,a2-a3,0)是等价的,那么我们模型的稳定性就成了一个待解决的问题。这个问题这么解决呢?有三种方法:
(1)使用L2正则化手段,将参数的选择上加一个限制,就是选择参数元素值小的那个作为最终参数,这样我们得到的参数就唯一了,模型也就稳定了。
(2)把偏置项β0去掉,这时我们发现也可以解决同一个模型参数等价的问题。
因为有了bias项,所以和我们去掉bias项的模型是完全不同的模型,不存在参数等价的问题。
(3)再加上bias项的前提下,使用哑变量编码代替one-hot编码,这时去除了X3,也就不存在之前一种特征可以用其他特征表示的问题了。
总结:我们使用one-hot编码时,通常我们的模型不加bias项 或者 加上bias项然后使用L2正则化手段去约束参数;当我们使用哑变量编码时,通常我们的模型都会加bias项,因为不加bias项会导致固有属性的丢失。
选择建议:建议最好是选择正则化 + one-hot编码;哑变量编码也可以使用,不过最好选择前者。虽然哑变量可以去除one-hot编码的冗余信息,但是因为每个离散型特征各个取值的地位都是对等的,随意取舍未免来的太随意。
三.连续值的离散化为什么会提升模型的非线性能力?
简单的说,使用连续变量的LR模型,模型表示为公式(1),而使用了one-hot或哑变量编码后的模型表示为公式(2)
式中X1表示连续型特征,θ1、θ2、θ3分别是离散化后在使用one-hot或哑变量编码后的若干个特征表示。这时我们发现使用连续值的LR模型用一个权值去管理该特征,而one-hot后有三个权值管理了这个特征,这样使得参数管理的更加精细,所以这样拓展了LR模型的非线性能力。
这样做除了增强了模型的非线性能力外,还有什么好处呢?这样做了我们至少不用再去对变量进行归一化,也可以加速参数的更新速度;再者使得一个很大权值管理一个特征,拆分成了许多小的权值管理这个特征多个表示,这样做降低了特征值扰动对模型为稳定性影响,也降低了异常数据对模型的影响,进而使得模型具有更好的鲁棒性。