特征工程(完)

2019年第 19 篇文章,总第 43 篇文章 本文大约 9600 字,建议收藏慢慢阅读

机器学习入门系列(2)--如何构建一个完整的机器学习项目

第六篇

该系列的前五篇文章:

这也是特征工程系列最后一篇文章,介绍特征提取、特征选择、特征构建三个工作,通常特征工程被认为分为这三方面的内容,只是我将前面的数据&特征预处理部分都加入到这个系列。

实际上,特征工程其实是非常需要通过实践才能更好掌握这个技能的,单纯看理论,理解不够深入,实际应用到项目或者比赛中的时候,才会有更深入的理解。

由于微信公众号不支持外链,可以点击文末"阅读原文"来访问外部链接。


3.4 特征选择

定义:从给定的特征集合中选出相关特征子集的过程称为特征选择(feature selection)。

1.对于一个学习任务,给定了属性集,其中某些属性可能对于学习来说很关键,但有些属性意义就不大。

  • 对当前学习任务有用的属性或者特征,称为相关特征(relevant feature);
  • 对当前学习任务没用的属性或者特征,称为无关特征(irrelevant feature)。

2.特征选择可能会降低模型的预测能力,因为被剔除的特征中可能包含了有效的信息,抛弃这部分信息一定程度上会降低模型的性能。但这也是计算复杂度和模型性能之间的取舍:

  • 如果保留尽可能多的特征,模型的性能会提升,但同时模型就变复杂,计算复杂度也同样提升;
  • 如果剔除尽可能多的特征,模型的性能会有所下降,但模型就变简单,也就降低计算复杂度。

3.常见的特征选择分为三类方法:

  • 过滤式(filter)
  • 包裹式(wrapper)
  • 嵌入式(embedding)
3.4.1 特征选择原理

1.采用特征选择的原因:

  • 维数灾难问题。因为属性或者特征过多造成的问题,如果可以选择重要的特征,使得仅需要一部分特征就可以构建模型,可以大大减轻维数灾难问题,从这个意义上讲,特征选择和降维技术有相似的动机,事实上它们也是处理高维数据的两大主流技术。
  • 去除无关特征可以降低学习任务的难度,也同样让模型变得简单,降低计算复杂度

2.特征选择最重要的是确保不丢失重要的特征,否则就会因为缺少重要的信息而无法得到一个性能很好的模型。

  • 给定数据集,学习任务不同,相关的特征很可能也不相同,因此特征选择中的不相关特征指的是与当前学习任务无关的特征
  • 有一类特征称作冗余特征(redundant feature),它们所包含的信息可以从其他特征中推演出来。
  • 冗余特征通常都不起作用,去除它们可以减轻模型训练的负担;
  • 但如果冗余特征恰好对应了完成学习任务所需要的某个中间概念,则它是有益的,可以降低学习任务的难度。

3.在没有任何先验知识,即领域知识的前提下,要想从初始特征集合中选择一个包含所有重要信息的特征子集,唯一做法就是遍历所有可能的特征组合。

但这种做法并不实际,也不可行,因为会遭遇组合爆炸,特征数量稍多就无法进行。

一个可选的方案是:

  • 产生一个候选子集,评价出它的好坏。
  • 基于评价结果产生下一个候选子集,再评价其好坏。
  • 这个过程持续进行下去,直至无法找到更好的后续子集为止。

这里有两个问题:如何根据评价结果获取下一个候选特征子集?如何评价候选特征子集的好坏?

3.4.1.1 子集搜索

1.子集搜索方法步骤如下:

  • 给定特征集合 A={A1,A2,…,Ad} ,首先将每个特征看作一个候选子集(即每个子集中只有一个元素),然后对这 d 个候选子集进行评价。 假设 A2 最优,于是将 A2 作为第一轮的选定子集。
  • 然后在上一轮的选定子集中加入一个特征,构成了包含两个特征的候选子集。 假定 A2,A5 最优,且优于 A2 ,于是将 A2,A5 作为第二轮的选定子集。
  • ….
  • 假定在第 k+1 轮时,本轮的最优的特征子集不如上一轮的最优的特征子集,则停止生成候选子集,并将上一轮选定的特征子集作为特征选择的结果。

2.这种逐渐增加相关特征的策略称作前向 forward搜索

类似地,如果从完整的特征集合开始,每次尝试去掉一个无关特征,这种逐渐减小特征的策略称作后向backward搜索

3.也可以将前向和后向搜索结合起来,每一轮逐渐增加选定的相关特征(这些特征在后续迭代中确定不会被去除),同时减少无关特征,这样的策略被称作是双向bidirectional搜索

4该策略是贪心的,因为它们仅仅考虑了使本轮选定集最优。但是除非进行穷举搜索,否则这样的问题无法避免。

3.4.1.2 子集评价

1.子集评价的做法如下:

给定数据集 D,假设所有属性均为离散型。对属性子集 A,假定根据其取值将 D 分成了 V 个子集:

可以计算属性子集 A 的信息增益:

其中,|•|表示集合大小,

表示熵。

信息增益越大,表明特征子集 A 包含的有助于分类的信息越多。所以对于每个候选特征子集,可以基于训练集 D 来计算其信息增益作为评价准则。

2.更一般地,特征子集 A 实际上确定了对数据集 D 的一个划分规则。

  • 每个划分区域对应着 A 上的一个取值,而样本标记信息 y 则对应着 D 的真实划分。
  • 通过估算这两种划分之间的差异,就能对 A 进行评价:与 y 对应的划分的差异越小,则说明 A 越好。
  • 信息熵仅仅是判断这个差异的一种方法,其他能判断这两个划分差异的机制都能够用于特征子集的评价

3.将特征子集搜索机制与子集评价机制结合就能得到特征选择方法

  • 事实上,决策树可以用于特征选择,所有树结点的划分属性所组成的集合就是选择出来的特征子集。
  • 其他特征选择方法本质上都是显式或者隐式地结合了某些子集搜索机制和子集评价机制。

4.常见的特征选择方法分为以下三种,主要区别在于特征选择部分是否使用后续的学习器。

  • 过滤式(filter):先对数据集进行特征选择,其过程与后续学习器无关,即设计一些统计量来过滤特征,并不考虑后续学习器问题
  • 包裹式(wrapper):实际上就是一个分类器,它是将后续的学习器的性能作为特征子集的评价标准。
  • 嵌入式(embedding):实际上是学习器自主选择特征。

5.最简单的特征选择方法是:去掉取值变化小的特征

假如某特征只有 0 和 1 的两种取值,并且所有输入样本中,95% 的样本的该特征取值都是 1 ,那就可以认为该特征作用不大。

当然,该方法的一个前提是,特征值都是离散型才使用该方法;如果是连续型,需要离散化后再使用,并且实际上一般不会出现 95% 以上都取某个值的特征的存在。

所以,这个方法简单,但不太好用,可以作为特征选择的一个预处理,先去掉变化小的特征,然后再开始选择上述三种类型的特征选择方法。

3.4.2 过滤式选择

该方法先对数据集进行特征选择,然后再训练学习器。特征选择过程与后续学习器无关。

也就是先采用特征选择对初始特征进行过滤,然后用过滤后的特征训练模型。

  • 优点是计算时间上比较高效,而且对过拟合问题有较高的鲁棒性
  • 缺点是倾向于选择冗余特征,即没有考虑到特征之间的相关性。
3.4.2.1 Relief 方法

1.Relief:Relevant Features是一种著名的过滤式特征选择方法。该方法设计了一个相关统计量来度量特征的重要性

  • 该统计量是一个向量,其中每个分量都对应于一个初始特征。特征子集的重要性则是由该子集中每个特征所对应的相关统计量分量之和来决定的
  • 最终只需要指定一个阈值 k,然后选择比 k 大的相关统计量分量所对应的特征即可。 也可以指定特征个数 m ,然后选择相关统计量分量最大的 m 个特征。

2.Relief 是为二分类问题设计的,其拓展变体 Relief-F 可以处理多分类问题。

3.4.2.2 方差选择法

使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。

3.4.2.3 相关系数法

使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的 P 值。

3.4.2.4 卡方检验

经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于 i 且因变量等于 j 的样本频数的观察值与期望的差距,构建统计量:

不难发现,这个统计量的含义简而言之就是自变量对因变量的相关性。

3.4.2.5 互信息法

经典的互信息也是评价定性自变量对定性因变量的相关性的,互信息计算公式如下:

为了处理定量数据,最大信息系数法被提出。

3.4.3 包裹式选择

1.相比于过滤式特征选择不考虑后续学习器,包裹式特征选择直接把最终将要使用的学习器的性能作为特征子集的评价原则。其目的就是为给定学习器选择最有利于其性能、量身定做的特征子集。

  • 优点是直接针对特定学习器进行优化,考虑到特征之间的关联性,因此通常包裹式特征选择比过滤式特征选择能训练得到一个更好性能的学习器
  • 缺点是由于特征选择过程需要多次训练学习器,故计算开销要比过滤式特征选择要大得多

2.LVW:Las Vegas Wrapper是一个典型的包裹式特征选择方法。它是Las Vegas method 框架下使用随机策略来进行子集搜索,并以最终分类器的误差作为特征子集的评价标准。

3.由于 LVW 算法中每次特征子集评价都需要训练学习器,计算开销很大,因此它会设计一个停止条件控制参数 T。

但是如果初始特征数量很多、T 设置较大、以及每一轮训练的时间较长, 则很可能算法运行很长时间都不会停止。即:如果有运行时间限制,则有可能给不出解

5.递归特征消除法:使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。

3.4.4 嵌入式选择

1.在过滤式和包裹式特征选择方法中,特征选择过程与学习器训练过程有明显的分别。

嵌入式特征选择是将特征选择与学习器训练过程融为一体,两者在同一个优化过程中完成的。即学习器训练过程中自动进行了特征选择

常用的方法包括:

  • 利用正则化,如L_1, L_2 范数,主要应用于如线性回归、逻辑回归以及支持向量机(SVM)等算法;
  • 使用决策树思想,包括决策树、随机森林、Gradient Boosting 等。

2.引入 L_1 范数除了降低过拟合风险之外,还有一个好处:它求得的 w 会有较多的分量为零。即:它更容易获得稀疏解

于是基于 L_1 正则化的学习方法就是一种嵌入式特征选择方法,其特征选择过程与学习器训练过程融为一体,二者同时完成。

3.常见的嵌入式选择模型:

  • Lasso 中,λ 参数控制了稀疏性:
  • 如果 λ 越小,则稀疏性越小,被选择的特征越多;
  • 相反 λ 越大,则稀疏性越大,被选择的特征越少;
  • SVM 和 逻辑回归中,参数 C 控制了稀疏性:
  • 如果 C 越小,则稀疏性越大,被选择的特征越少;
  • 如果 C 越大, 则稀疏性越小,被选择的特征越多。

3.5 特征提取

特征提取一般是在特征选择之前,它提取的对象是原始数据,目的就是自动地构建新的特征,将原始数据转换为一组具有明显物理意义(比如 Gabor、几何特征、纹理特征)或者统计意义的特征

一般常用的方法包括降维(PCA、ICA、LDA等)、图像方面的SIFT、Gabor、HOG等、文本方面的词袋模型、词嵌入模型等,这里简单介绍这几种方法的一些基本概念。

3.5.1 降维

1.PCA(Principal Component Analysis,主成分分析)

PCA 是降维最经典的方法,它旨在是找到数据中的主成分,并利用这些主成分来表征原始数据,从而达到降维的目的

PCA 的思想是通过坐标轴转换,寻找数据分布的最优子空间。

比如,在三维空间中有一系列数据点,它们分布在过原点的平面上,如果采用自然坐标系的 x,y,z 三个轴表示数据,需要三个维度,但实际上这些数据点都在同一个二维平面上,如果我们可以通过坐标轴转换使得数据所在平面和 x,y 平面重合,我们就可以通过新的 x'、y' 轴来表示原始数据,并且没有任何损失,这就完成了降维的目的,而且这两个新的轴就是我们需要找的主成分。

因此,PCA 的解法一般分为以下几个步骤:

  1. 对样本数据进行中心化处理;
  2. 求样本协方差矩阵;
  3. 对协方差矩阵进行特征值分解,将特征值从大到小排列;
  4. 取特征值前 n 个最大的对应的特征向量 W1, W2, …, Wn ,这样将原来 m 维的样本降低到 n 维。

通过 PCA ,就可以将方差较小的特征给抛弃,这里,特征向量可以理解为坐标转换中新坐标轴的方向,特征值表示在对应特征向量上的方差,特征值越大,方差越大,信息量也就越大。这也是为什么选择前 n 个最大的特征值对应的特征向量,因为这些特征包含更多重要的信息。

PCA 是一种线性降维方法,这也是它的一个局限性。不过也有很多解决方法,比如采用核映射对 PCA 进行拓展得到核主成分分析(KPCA),或者是采用流形映射的降维方法,比如等距映射、局部线性嵌入、拉普拉斯特征映射等,对一些 PCA 效果不好的复杂数据集进行非线性降维操作。

2.LDA(Linear Discriminant Analysis,线性判别分析)

LDA 是一种有监督学习算法,相比较 PCA,它考虑到数据的类别信息,而 PCA 没有考虑,只是将数据映射到方差比较大的方向上而已。

因为考虑数据类别信息,所以 LDA 的目的不仅仅是降维,还需要找到一个投影方向,使得投影后的样本尽可能按照原始类别分开,即寻找一个可以最大化类间距离以及最小化类内距离的方向。

LDA 的优点如下:

  • 相比较 PCA,LDA 更加擅长处理带有类别信息的数据;
  • 线性模型对噪声的鲁棒性比较好,LDA 是一种有效的降维方法。

相应的,也有如下缺点:

  • LDA 对数据的分布做出了很强的假设,比如每个类别数据都是高斯分布、各个类的协方差相等。这些假设在实际中不一定完全满足。
  • LDA 模型简单,表达能力有一定局限性。但这可以通过引入核函数拓展 LDA 来处理分布比较复杂的数据。

3.ICA(Independent Component Analysis,独立成分分析)

PCA特征转换降维,提取的是不相关的部分,ICA独立成分分析,获得的是相互独立的属性。ICA算法本质寻找一个线性变换 z = Wx,使得 z 的各个特征分量之间的独立性最大

通常先采用 PCA 对数据进行降维,然后再用 ICA 来从多个维度分离出有用数据。PCA 是 ICA 的数据预处理方法。

具体可以查看知乎上的这个问题和回答:

独立成分分析 ( ICA ) 与主成分分析 ( PCA ) 的区别在哪里?

https://www.zhihu.com/question/28845451

3.5.2 图像特征提取

图像的特征提取,在深度学习火起来之前,是有很多传统的特征提取方法,比较常见的包括以下几种。

1.SIFT 特征

SIFT 是图像特征提取中非常广泛应用的特征。它包含以下几种优点:

  • 具有旋转、尺度、平移、视角及亮度不变性,有利于对目标特征信息进行有效表达;
  • SIFT 特征对参数调整鲁棒性好,可以根据场景需要调整适宜的特征点数量进行特征描述,以便进行特征分析。

SIFT 对图像局部特征点的提取主要包括四个步骤:

  1. 疑似特征点检测
  2. 去除伪特征点
  3. 特征点梯度与方向匹配
  4. 特征描述向量的生成

SIFT 的缺点是不借助硬件加速或者专门的图像处理器很难实现。

2.SURF 特征

SURF 特征是对 SIFT 算法的改进,降低了时间复杂度,并且提高了鲁棒性。

它主要是简化了 SIFT 的一些运算,如将 SIFT 中的高斯二阶微分的模型进行了简化,使得卷积平滑操作仅需要转换成加减运算。并且最终生成的特征向量维度从 128 维减少为 64 维。

3.HOG 特征

方向梯度直方图(HOG)特征是 2005 年针对行人检测问题提出的直方图特征,它通过计算和统计图像局部区域的梯度方向直方图来实现特征描述。

HOG 特征提取步骤如下:

  1. 归一化处理。先将图像转为灰度图像,再利用伽马校正实现。这一步骤是为了提高图像特征描述对光照及环境变化的鲁棒性,降低图像局部的阴影、局部曝光过多和纹理失真,尽可能抵制噪声干扰;
  2. 计算图像梯度
  3. 统计梯度方向
  4. 特征向量归一化;为克服光照不均匀变化及前景与背景的对比差异,需要对块内的特征向量进行归一化处理。
  5. 生成特征向量

4.LBP 特征

局部二值模式(LBP)是一种描述图像局部纹理的特征算子,它具有旋转不变性和灰度不变性的优点。

LBP 特征描述的是一种灰度范围内的图像处理操作技术,针对的是输入为 8 位或者 16 位的灰度图像

LBP 特征通过对窗口中心点与邻域点的关系进行比较,重新编码形成新特征以消除对外界场景对图像的影响,因此一定程度上解决了复杂场景下(光照变换)特征描述问题。

根据窗口领域的不同分为两种,经典 LBP 和圆形 LBP。前者的窗口是 3×3 的正方形窗口,后者将窗口从正方形拓展为任意圆形领域。

更详细的可以参考这篇文章--

图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现

https://blog.csdn.net/wenhao_ir/article/details/52046569

当然上述特征都是比较传统的图像特征提取方法了,现在图像基本都直接利用 CNN(卷积神经网络)来进行特征提取以及分类。

3.5.3 文本特征提取

1.词袋模型

最基础的文本表示模型是词袋模型。

具体地说,就是将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,向量的每一个维度代表一个单词,而该维度的权重反映了该单词在原来文章中的重要程度。

通常采用 TF-IDF 计算权重,公式为 TF-IDF(t, d) = TF(t,d) × IDF(t)

其中 TF(t, d) 表示单词 t 在文档 d 中出现的频率,IDF(t) 是逆文档频率,用来衡量单词 t 对表达语义所起的重要性,其表示为:

直观的解释就是,如果这个单词在多篇文章都出现过,那么它很可能是比较通用的词汇,对于区分文章的贡献比较小,自然其权重也就比较小,即 IDF(t) 会比较小。

2.N-gram 模型

词袋模型是以单词为单位进行划分,但有时候进行单词级别划分并不是很好的做法,毕竟有的单词组合起来才是其要表达的含义,比如说 natural language processing(自然语言处理)computer vision(计算机视觉) 等。

因此可以将连续出现的 n 个词 (n <= N) 组成的词组(N-gram)作为一个单独的特征放到向量表示中,构成了 N-gram 模型。

另外,同一个词可能会有多种词性变化,但却具有相同含义,所以实际应用中还会对单词进行词干抽取(Word Stemming)处理,即将不同词性的单词统一为同一词干的形式。

3.词嵌入模型

词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成低维空间(通常 K=50~300 维)上的一个稠密向量(Dense Vector)

常用的词嵌入模型是 Word2Vec。它是一种底层的神经网络模型,有两种网络结构,分别是 CBOW(Continues Bag of Words) 和 Skip-gram。

CBOW 是根据上下文出现的词语预测当前词的生成概率;Skip-gram 是根据当前词来预测上下文中各个词的生成概率

词嵌入模型是将每个词都映射成一个 K 维的向量,如果一篇文档有 N 个单词,那么每篇文档就可以用一个 N×K 的矩阵进行表示,但这种表示过于底层。实际应用中,如果直接将该矩阵作为原文本的特征表示输入到模型中训练,通常很难得到满意的结果,一般还需要对该矩阵进行处理,提取和构造更高层的特征。

深度学习模型的出现正好提供了一种自动进行特征工程的方法,它的每个隐含层都相当于不同抽象层次的特征。卷积神经网络(CNN)和循环神经网络(RNN)在文本表示中都取得了很好的效果,这是因为它们可以很好地对文本进行建模,抽取出一些高层的语义特征。

3.5.4 特征提取和特征选择的区别

特征提取与特征选择都是为了从原始特征中找出最有效的特征。

它们之间的区别是特征提取强调通过特征转换的方式得到一组具有明显物理或统计意义的特征;

而特征选择是从特征集合中挑选一组具有明显物理或统计意义的特征子集

两者都能帮助减少特征的维度、数据冗余,特征提取有时能发现更有意义的特征属性,特征选择的过程经常能表示出每个特征的重要性对于模型构建的重要性。

3.6 特征构建

特征构建是指从原始数据中人工的构建新的特征。需要花时间去观察原始数据,思考问题的潜在形式和数据结构,对数据敏感性和机器学习实战经验能帮助特征构建。

特征构建需要很强的洞察力和分析能力,要求我们能够从原始数据中找出一些具有物理意义的特征。假设原始数据是表格数据,一般你可以使用混合属性或者组合属性来创建新的特征,或是分解或切分原有的特征来创建新的特征。

特征构建非常需要相关的领域知识或者丰富的实践经验才能很好构建出更好的有用的新特征,相比于特征提取,特征提取是通过一些现成的特征提取方法来将原始数据进行特征转换,而特征构建就需要我们自己人为的手工构建特征,比如组合两个特征,或者分解一个特征为多个新的特征。


小结

特征工程这个内容加上本文总共写了四篇文章,从数据预处理,处理缺失值、异常值,类别不平衡和数据扩充问题,到特征缩放、特征编码,以及本文的特征选择、特征提取和特征构造,基本包含了特征工程涉及的内容,当然可能还有少数内容没有包含。

实际上是在对于《hands-on-ml-with-sklearn-and-tf》第二章数据准备部分的总结,刚好涉及到特征工程内容,所以打算好好做个总结,没想到这部分内容真的不少,而对于特征工程,我的经验其实不算很丰富,之前只是参加过一次比赛,算是简单涉猎了其中的部分内容,所以这几篇文章的内容主要都是整理收集网上文章的内容,加上少部分个人的经验心得,写作起来确实有些费劲,很多内容都只能简单总结下基本概念和使用步骤,但很难再深入介绍了。

所以推荐大家看完后,可以找些实际的项目或者参加比赛,在实践中运用特征工程的理论和方法,会有更深的体会。

比赛的话,最有名的就是 Kaggle,国内的有天池、DataFountain等。

接下来会这个如何构建一个完整的机器学习项目就会进入算法模型选择和评估部分了,这里我也打算先简单总结机器学习比较常用的经典算法。

以及,如果觉得这个系列对你有帮助的,可以帮忙点个好看,或者转发分享支持下,谢谢!


参考:

  • 《百面机器学习》第一章 特征工程
  • https://blog.csdn.net/dream_angel_z/article/details/49388733#commentBox
  • https://www.cnblogs.com/sherial/archive/2018/03/07/8522405.html
  • https://gofisher.github.io/2018/06/22/%E6%95%B0%E6%8D%AE%E9%A2%84%E5%A4%84%E7%90%86/
  • https://gofisher.github.io/2018/06/20/%E6%95%B0%E6%8D%AE%E6%8E%A2%E7%B4%A2/
  • https://juejin.im/post/5b6a44f55188251aa8294b8c
  • https://www.zhihu.com/question/47716840
  • http://www.huaxiaozhuan.com/%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0/chapters/8_feature_selection.html
  • Scikit-learn介绍几种常用的特征选择方法](http://dataunion.org/14072.html)
  • https://www.cnblogs.com/wxquare/p/5484636.html
  • https://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html
  • https://www.zhihu.com/question/28845451
  • https://blog.csdn.net/wenhao_ir/article/details/52046569

原文发布于微信公众号 - 算法猿的成长(AI_Developer)

原文发表时间:2019-02-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券