AI技术百科
机器学习中的特征工程
特征工程,顾名思义,是对原始数据进行一系列工 程处理,将其提炼为特征,作为输入供算法和模型 使用。从本质上来讲,特征工程是一个表示和展现 数据的过程。在实际工作中,特征工程旨在去除原 始数据中的杂质和冗余,设计更高效的特征以刻画 求解的问题与预测模型之间的关系。
特征归一化
为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指 标之间具有可比性。例如,分析一个人的身高和体重对健康的影响,如果使用米( m) 和千克(kg)作为单位,那么身高特征会在1.6-1.8m 的数值范围内,体重特征会在 50~100kg的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。想要 得到更为准确的结果,就需要进行特征归一化( Normalization)处理,使各指标处于同 一数值量级,以便进行分析。
对数值类型的特征做归一化可以将所有的特征都统一到一个大致相 同的数值区间内。最常用的方法主要有以下两种。
( 1 )线性函数归一化( Min-Max Scaling)。 它对原始数据进行线性变换,使结果映射到[0,1][0, 1][0,1]的范围,实现对原始数据的等比缩放。 归一化公式如下:
Xnorm=X−XminXmax−XminX_{\mathrm{norm}}=\dfrac{X-X_{\mathrm{min}}}{X_{\mathrm{max}}-X_{\mathrm{min}}}Xnorm=Xmax−XminX−Xmin
其中XXX为原始数据,XmaxX_{max}Xmax. XminX_{min}Xmin 分别为数据最大值和最小值。
(2)零均值归一化( Z-Score Normalization) 。 它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ\muμ、标准差为σ\sigmaσ,那么归一化公式定义为:
z=x−μσz=\dfrac{x-\mu}{\sigma}z=σx−μ
为什么需要对数值型特征做归一化呢?我们不妨借助随机梯度下降的实例来说明归一化的重要性。假设有两种数值型特征, x1x_1x1的取值范围为[0,10][0, 10][0,10], x2x_2x2的取值范围为[0,3][0, 3][0,3],于是可以构造一个目标函数符合图 (a)中的等值图。
在学习速率相同的情况下,x1x_1x1的更新速度会大于x2x_2x2,需要较多的迭代才能找到最优解。如果将x1x_1x1和x2x_2x2归一化到相同的数值区间后,优化目标的等值图会变成图(b)中的圆形,x1x_1x1和x2x_2x2的更新速度变得更 为一致,容易更快地通过梯度下降找到最优解。
当然,数据归一化并不是万能的。在实际应用中,通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但对于决策树模型则并不适用,以决策树为例,决策树在进行节点分裂时主要依据数据集DDD关于特征xxx的信息增益比,而信息增益比跟特征是否经过归一化是无关的,因为归一化并不会改变样本在特征xxx上的信息增益。
类别型特征
类别型特征( Categorical Feature )主要是指性别(男、女)、血型(A、B、AB、O) 等只在有限选项内取值的特征。类别型特征原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。
序号编码
序号编码通常用于处理类别间具有大小关系的数据。例如成绩,可以分为低、中、高三档,并且存在“高>中>低”的排序关系。序号 编码会按照大小关系对类别型特征赋予一个数值ID,例如高表示为3、中表示为2、低表示为1,转换后依然保留了大小关系。
独热编码
独热编码通常用于处理类别间不具有大小关系的特征。例如血型, 一共有4个取值( A型血、B型血、AB型血、0型血),独热编码会 把血型变成一个4维稀疏向量,A型血表示为(1,0,0,0),B型血表示为(0, 1,0,0), AB型表示为(0,0,1,0),O型血表示为(0, 0, 0, 1)。对于类别取值较多的情况下使用独热编码需要注意以下问题。
( 1 )使用稀疏向量来节省空间。在独热编码下,特征向量只有某一维取值为1,其他位置取值均为0。因此可以利用向量的稀疏表示有 效地节省空间,并且目前大部分的算法均接受稀疏向量形式的输入。
(2 )配合特征选择来降低维度。高维度特征会带来几方面的问题。
一是在K近邻算法中,高维空间下两点之间的距离很难得到有效的衡量;
二是在逻辑回归模型中,参数的数量会随着维度的增高而增加,容易引起过拟合问题;
三是通常只有部分维度是对分类、预测有帮助,因此可以考虑配合特征选择来降低维度。
二进制编码
二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。以A. B、AB、O血型为例,下表是二进制编码的过程。A型血的ID为1,二进制表示为001; B型血的ID为2,二进制表示为010;以此类推可以得到AB型血和0型血的二进制表示。可以看出,二进制编码本质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,且维数少于独热编码,节省了存储空间。
高维组合特征的处理
为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。以广告点击预估问题为例,原始数据 有语言和类型两种离散特征,下表是语言和类型对点击的影响。
为了提高拟合能力,语言和类型可以组成二阶特征,下表是语言和类型的组合特征对点击的影响。
以逻辑回归为例,假设数据的特征向量为X=(x1,x2,...,xk)X=(x_1,x_2,...,x_k)X=(x1,x2,...,xk),则有
Y=sigmoid(∑i∑jwij(xi,xj))Y=\mathrm{sigmoid}(\sum_i\sum_j w_{ij}(x_i,x_j))Y=sigmoid(i∑j∑wij(xi,xj))
其中(xi,xj)(x_i,x_j)(xi,xj)表示xi,xjx_i,x_jxi,xj的组合特征。
很多实际问题中,我们常常需要面对多种高维特征。如果简单地两两组合,依然容易存在参数过多、过拟合等问题,而且并不是所有的特征组合都是有意义的。因此,需要一种有 效的方法来帮助我们找到应该对哪些特征进行组合。
本节介绍一种基于决策树的特征组合寻找方法"。以点击预测问题为例,假设原始输入特征 包含年龄、性别、用户类型(试用期、付费)、物品类型(护肤、食品等)4个方面的信息,并且根据原始输入和标签(点击/未点击)构造出了决策树,如图所示。
示例:SKLEARN.preprocessing
.最小最大缩放器
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
此变换通常用作零均值的替代, 单位差异缩放。