一、特征处理
1.1 类别型特征
类别型特征(Categorical Feature)主要是指性别(男、女)、血型(A、B、 AB、O)等只在有限选项内取值的特征。类别型特征原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。
序号编码:通常用于处理类别间具有大小关系的数据。例如成绩,可以分为 低、中、高三档,并且存在“高>中>低”的排序关系。序号编码会按照大小关系对类别型特征赋予一个数值ID,例如高表示为3、中表示为2、低表示为1,转换后依 然保留了大小关系。
独热编码:通常用于处理类别间不具有大小关系的特征。例如血型,一共有4个 取值(A型血、B型血、AB型血、O型血),独热编码会把血型变成一个4维稀疏向量,A型血表示为(1, 0, 0, 0),B型血表示为(0, 1, 0, 0),AB型表示为(0, 0, 1, 0),O型血表示为(0, 0, 0, 1)。
注意(类别取值较多的情况下使用独热编码 ):
(1)使用稀疏向量来节省空间。在独热编码下,特征向量只有某一维取值为 1,其他位置取值均为0 ;因此可以利用向量的稀疏表示有效地节省空间,并且目 前大部分的算法均接受稀疏向量形式的输入。
v=[0,0,0,0,1,0,3,0,0,0]
(10,[4,6],[1,3])
(2)配合特征选择来降低维度。高维度特征会带来几方面的问题。一是在K 近邻算法中,高维空间下两点之间的距离很难得到有效的衡量;二是在逻辑回归模型中,参数的数量会随着维度的增高而增加,容易引起过拟合问题;三是通常只有部分维度是对分类、预测有帮助,因此可以考虑配合特征选择来降低维度 。
二进制编码:二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。以A、B、AB、O血型为例,表1.1是二进制编码的过程。A型血的ID为1,二进制表示为001;B型血的ID为2,二进制表示为 010;以此类推可以得到AB型血和O型血的二进制表示。可以看出,二进制编码本 质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,且维数少于独热编码,节省了存储空间。
1.2 数值型特征
线性函数归一化(Min-Max Scaling):它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。
其中X为原始数据,Xmax、Xmin分别为数据最大值和最小值。
零均值归一化(Z-Score Normalization):它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,那么归一化公式定义为:
为什么一定要进行归一化:
1、为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。例如,身高和体重的量级不同,身高有80~200cm,体重为20~200kg。
2、如果将x1和x2归一化到相同的数值区间后,优化目标的等值图从椭圆形变成圆形,x1和x2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解。
1.3 缺失值处理
(1)将包含缺失值得整行或者整列直接丢弃,然而这样可能会丢失很多有价值的数据。
(2)一个更好的办法是补全缺失值,也就是从已知的部分数据推断出未知的数据。基本策略: 使用一行或者一列的均值,中值,出现次数最多的值来补全,该类也允许不同缺失值得编码。
2、特征组合
2.1 什么是组合特征
为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。以广告点击预估问题为例,原始数据有语言和类型两种 离散特征,表1.2是语言和类型对点击的影响。为了提高拟合能力,语言和类型可 以组成二阶特征,表1.3是语言和类型的组合特征对点击的影响。
2.2 如何有效找到组合特征
a、一种基于决策树的特征组合寻找方法 :
以点击预测问题为例,假设原始输入特征包含年龄、性别、用户 类型(试用期、付费)、物品类型(护肤、食品等)4个方面的信息,并且根据原始输入和标签(点击/未点击)构造出了决策树,如图1.2所示
于是,每一条从根节点到叶节点的路径都可以看成一种特征组合的方式。具体来说,就有以下4种特征组合的方式。
(1)“年龄<=35”且“性别=女”。
(2)“年龄<=35”且“物品类别=护肤”。
(3)“用户类型=付费”且“物品类型=食品”。
(4)“用户类型=付费”且“年龄<=40”。
下表是两个样本信息,那么第1个样本按照上述4个特征组合就可以编码为 (1, 1, 0, 0),因为同时满足(1)(2),但不满足(3)(4)。同理,第2个样 本可以编码为(0, 0, 1, 1),因为它同时满足(3)(4),但不满足(1)(2)。
给定原始输入该如何有效地构造决策树呢?
可以采用梯度提升决策树(GBDT),该方法的思想是每次都在之前构建的决策树的残差上构建下一棵决策树。
2.3 如何处理高维组合特征
若用户的数量为m、物品的数量为n,那么需要学习的参数的规模为m×n。
在互联网环境下,用户数量和物品数量都可以达到千万量级,几乎无法学习m×n规模的参数。在这种情况下,一种行之有效的方法是将用户和物品分别用k维的低维向量表示(k<<m,k<<n)进行降维。
降维后需要学习的参数的规模变为m×k+n×k ,熟悉推荐算法的同学很快可以看出来, 这其实等价于矩阵分解 。
3、特征选择
3.1 为什么要进行特征选择?
在现实生活中,一个对象往往具有很多属性(以下称为特征),这些特征大致可以被分成三种主要的类型:
相关特征:对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果;
无关特征:对于我们的算法没有任何帮助,不会给算法的效果带来任何提升;
冗余特征:不会对我们的算法带来新的信息,或者这种特征的信息可以由其他的特征推断出;
但是,对于一个特定的学习算法来说,哪一个特征是有效的是未知的。因此,需要从所有特征中选择出对于学习算法有益的相关特征。而且在实际应用中,经常会出现维度灾难问题,尤其是在文本处理中。例如,可以把一篇文档表示成一个词向量,但是往往会使用所有的单词作为字典,因此对于一篇可能仅仅包含100或者200个单词的文档,可能需要上万的维度(也就是特征)。如果可以从中选择一部分相关特征构建模型,这个问题就可以得到一定程度的解决。所以,特征选择和降维有一定的相似之处。另外,从上面的例子中可以发现,如果只选择所有特征中的部分特征构建模型,那么可以大大减少学习算法的运行时间,也可以增加模型的可解释性。
3.2 特征选择的目的?
- 降维
- 降低学习任务的难度
- 提升模型的效率
3.3 特征选择定义
从N个特征中选择其中M(M<N)个子特征,并且在M个子特征中,判别函数可以达到最优解。
特征选择想要做的是:选择尽可能少的子特征,模型的效果不会显著下降,并且结果的类别分布尽可能的接近真实的类别。
常用的方法:PCB和LDA
3.4 特征选择评价方法:
评价函数主要用来评价选出的特征子集的好坏,一个特征子集是最优的往往指相对于特定的评价函数来说的。评价函数主要用来度量一个特征(或者特征子集)可以区分不同类别的能力。根据具体的评价方法主要有三类:
- 过滤式(filter): 先进行特征选择,然后去训练学习器,所以特征选择的过程与学习器无关。相当于先对于特征进行过滤操作,然后用特征子集来训练分类器;
- 包裹式(wrapper):直接把最后要使用的分类器作为特征选择的评价函数,对于特定的分类器选择最优的特征子集;
- 嵌入式(embedding):把特征选择的过程与分类器学习的过程融合一起,在学习的过程中进行特征选择。最常见的使用L1正则化进行特征选择。