机器学习笔记—特征工程

特征工程

特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。从本质上来讲,特征工程是一个表示和展现数据的过程。在实际工作中,特征工程旨在去除原始数据中的杂质和冗余,设计更高效的特征以刻画求解的问题与预测模型之间的关系。

常用的两种数据类型

  1. 结构化数据。结构化数据类型可以看作关系型数据库的一张表,每列都有清晰的定义,包含了数值型、类别性两种基本类型;每一行数据表示一个样本的信息。
  2. 非结构化数据。非结构化数据主要包括文本、图像、音频、视频数据,其包含的信息无法用一个简单的数值表示,也没有清晰的类别定义,并且每条数据的大小各不相同。

特征归一化

目的:消除数据特征之间的量纲影响,需要对特征进行归一化处理,使得不同指标之间具有可比性。

数值型特征

对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。最常用的方法主要有以下两种:

  1. 线性函数归一化(Min-Max Scaling)
    它对原始数据进行线性变换,使得结果映射到[0,1]的范围,实现对原始数据的等比缩放。归一化公式如下: X n o r m = X X m i n X m a x X m i n X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}} 其中X为原始数据, X m a x X_{max} X m i n X_{min} 分别为数据最大值和最小值。

  2. 零均值归一化(Z-Score Normalization)
    它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,那么归一化公式定义为 z = x μ σ z=\frac{x-\mu}{\sigma}
    以梯度下降中的归一化为例:
    ALT

上图中 x 1 x_1 的取值范围大于 x 2 x_2 的取值范围,梯度下降过程中,学习速率相同的情况下, x 1 x_1 的更新速度大于 x 2 x_2 ,需要较多的迭代才能找到最优解。如果将 x 1 x_1 x 2 x_2 归一化到相同的数值区间后,优化目标的等值图会变成图(b)中的圆形, x 1 x_1 x 2 x_2 的更新速度会变得更为一致,更容易通过梯度下降找到最优解。
当然,数据归一化并不是万能的。在实际应用中,通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但对于决策树模型则并不适用,以C4.5为例,决策树在进行节点分裂时主要依据数据集D关于特征x的信息增益比,而信息增益比跟特征是否经过归一化是无关的,因为归一化并不会改变样本在特征x上的信息增益。

类别型特征

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

  1. 序号编码(Ordinal Encoding)
    序号编码通常用于处理类别间具有大小关系的数据。例如成绩,可以分为低、中、高三档,并且存在“高>中>低”的排序关系。序号编码会按照大小关系对类别型特征赋予一个数值ID,例如高表示为3、中表示为2、低表示为1,转换后依然保留了大小关系。
  2. 独热编码(One-hot Encoding)
    独热编码通常用于处理列别见不具有大小关系的特征。例如血型,一共有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.因此可以利用向量的稀疏表示有效地节省空间,并且日前大部分的算法均接受系数向量的输入形式。
    2)、配合特征选择来降低维度。高维度特征会带来几方面的问题。一是在K近邻算法中,高维空间下两点之间的距离很难得到有效的衡量;二是在逻辑回归模型中,参数的数量会随着维度的增高而增加,容易引起过拟合问题;三是通常只有部分维度是对分类、预测有帮助,因此可以考虑配合特征选择来降低维度。
  3. 二进制编码(Binary Encoding)
    二进制编码主要分为两步,先用先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。以A、B、AB、O血型为例,表1.1是二进制编码的过程。A型血的ID为1,二进制表示为001;B型血的ID为2,二进制表示为010;以此类推可以得到AB型血和O型血的二进制表示。可以看出,二进制编码本质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,且维数少于独热编码,节省了存储空间。

高维组合特征的处理

为了提高复杂关系的非线性映射能力,在特征工程中通常会把一阶离散特征两两组合,构成高阶组合特征。
以逻辑回归为例,假设数据的特征向量为

未完待续。。。

猜你喜欢

转载自blog.csdn.net/qq_29317617/article/details/88143660