《百面机器学习》学习笔记 1、特征工程

前言

对于一个机器学习问题,数据和特征往往决定了结果的上限,而模型、算法的选择及优化则是在逐步接近这个上限。

定义

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

常见数据类型

  • 结构化数据:可以使用关系型数据库的表结构进行存储,每行数据代表一个样本信息,包括数值型和类别型
  • 非结构化数据:无法用简单数值表示,也没有清晰的类别定义,每条数据大小不同,包括文本、图像、音频、视频等

1、特征归一化

问题:为什么需要对数值类型的特征做归一化?难度:★☆☆☆☆

解答:

为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。否则,分析出来的结果显然会倾向于数值差别比较大的特征。想要得到更为准确的结果,就需要进行特征归一化(Normalization)处理,使各指标处于同一数值量级,以便进行分析

对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。

常用方法:

(1)线性函数归一化(Min-Max  Scaling):它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。

X_{norm} = \frac{X - X_{norm}}{X_{max} - X_{min}}

其中X为原始数据,X_{max}X_{min}分别为数据最大值和最小值。

(2)零均值归一化(Z-Score Normalization)。它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ。

z = \frac{x - \mu }{\sigma }

注:此处书上说分的这两种方法,就是对应平常我们所说的归一化和标准化。

1)归一化:

①把数据变成[0,1]或者[-1,1]之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。

②把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。

优点:

①提升模型(梯度下降)的收敛速度。

②提升模型的精度,在涉及到一些距离计算的算法时效果显著,可以让各个特征对结果做出的贡献相同,特征具有可比性。

③深度学习中数据归一化可以防止模型梯度爆炸。

2)标准化:在机器学习中,我们可能要处理不同种类的资料,例如,音讯和图片上的像素值,这些资料可能是高维度的,资料标准化后会使每个特征中的数值平均变为0(将每个特征的值都减掉原始资料中该特征的平均)、标准差变为1,这个方法被广泛的使用在许多机器学习算法中(例如:支持向量机、逻辑回归和类神经网络)。

优点:
z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。该种标准化方式要求原始数据的分布可以近似为高斯分布,否则效果会变得很糟糕。

归一化和标准化的区别:

归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1,1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种。标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。归一化是为了消除不同数据之间的量纲,方便数据比较和共同处理,比如在神经网络中,归一化可以加快训练网络的收敛性;标准化是为了方便数据的下一步处理,而进行的数据缩放等变换,并不是为了方便与其他数据一同处理或比较,比如数据经过零-均值标准化后,更利于使用标准正态分布的性质,进行处理。

①在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

②在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种Min-Max 方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

应用场景:

通过梯度下降求解模型通常需要归一化,包括线性回归、逻辑回归、支持向量机、神经网络等。但对于决策树模型不适用,决策树需要计算数据集在特征x的信息增益比,而信息增益比与归一化无关,是否归一化不改变信息增益的值。

2、类别型特征

离散值特征,如性别(男、女)、血型(A、B、O、AB)等,除了决策树等少数模型可以直接处理字符串输入,对于大多数如逻辑回归、SVM等需要把特征转换为数值型再输入。

问题:在对数据进行预处理时,应该怎样处理类别型特征?难度:★★☆☆☆

解答:

(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)使用稀疏向量来节省空间。

2)配合特征选择来降低维度。

(3)二进制编码(Binary Encoding)

二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。二进制编码本
质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,且维数少于独热编码,节省了存储空间。
除了以上三种编码方式,还有Helmert  Contrast、Sum  Contrast、Polynomial  Contrast、Backward Difference Contrast等。

3、高维组合特征的处理

问题:什么是组合特征?如何处理高维组合特征?难度:★★☆☆☆
解答:

为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。m个特征x1和n个特征X2,组合特征数量为m×n(可能为千万量级),需要分别用k维的低维向量表示(k<

4、组合特征

简单两两组合依然存在参数过多、过拟合问题,且并非组合特征都有意义。

问题:怎样有效地找到组合特征?难度:★★☆☆☆
解答:

基于决策树的特征组合寻找方法,采用梯度提升决策树。

5、文本表示模型

问题:有哪些文本表示模型?它们各有什么优缺点?难度:★★☆☆☆
解答:

(1)词袋模型(Bag  of  Words)和N-gram模型

将文章以词/词组为单位切分开,每个词赋予权重(TF-IDF,Term  Frequency-Inverse  Document Frequency),忽略每个词出现的顺序

(2)主题模型(Topic Model)

主题模型用于从文本库中发现有代表性的主题(得到每个主题上面词的分布特性),并且能够计算出每篇文章的主题分布。

(3)词嵌入模型(Word Embedding)
将每个词都映射成低维空间(通常K=50~300维)上的一个稠密向量(Dense  Vector)。K维空间的每一维也可以看作一个隐含的主题。

6、Word2Vec

谷歌2013年提出,一种浅层神经网络,有两种网络结构,分别是CBOW(Continues  Bag of Words)和Skip-gram。

问题:Word2Vec是如何工作的?它和隐狄利克雷模型LDA有什么区别与联系?难度:★★★☆☆
解答:

CBOW的目标是根据上下文出现的词语来预测当前词的生成概率。

Skip-gram是根据当前词来预测上下文中各词的生成概率。

word2vec改进:Hierarchical  Softmax和负采样Negative Sampling

LDA是利用文档中单词的共现关系来对单词按主题聚类,也可以理解为对“文档-单词”矩阵进行分解,得到“文档-主题”和“主题-单词”两个概率分布。而Word2Vec其实是对“上下文-单词”矩阵进行学习,其中上下文由周围的几个单词组成,由此得到的词向量表示更多地融入了上下文共现的特征。也就是说,如果两个单词所对应的Word2Vec向量相似度较高,那么它们很可能经常在同样的上下文中出现。需要说明的是,上述分析的是LDA与Word2Vec的不同,不应该作为主题模型和词嵌入两类方法的主要差异。

主题模型和词嵌入两类方法最大的不同其实在于模型本身,主题模型是一种基于概率图模型的生成式模型,其似然函数可以写成若干条件概率连乘的形式,其中包括需要推测的隐含变量(即主题);而词嵌入模型一般表达为神经网络的形式,似然函数定义在网络的输出之上,需要通过学习网络的权重以得到单词的稠密向量表示。

7、图像数据不足时的处理方法

问题:在图像分类任务中,训练数据不足会带来什么问题?如何缓解数据量不足带来的问题?难度:★★☆☆☆
解答:

数据量少容易过拟合。对应处理方法:

一是基于模型的方法,包括简化模型(如将非线性模型简化为线性模型)、添加约束项以缩小假设空间(如L1/L2正则项)、集成学习、Dropout超参数等。

二是基于数据的方法,主要通过数据扩充(Data  Augmentation),即根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。

  • 生成对抗网络
  • 迁移学习(Transfer  Learning)、微调(fine-tune)
  • 上采样
  • 数据扩充
  • 图像处理、图像变换

 

说明对于不同的特征该如何进行特征工程?

(特征类型:结构化与非结构化、数值型与类别型、离散型与连续型、低维与高维、低阶与高阶)

(不同特征类型预处理方法)

通过梯度下降法求解的模型中(线性回归、逻辑回归、支持向量机、神经网络等),结构化数据中的数值型特征需要先归一化处理(线性函数归一化、零均值归一化)。但决策树模型(C4.5)则不需要归一化。

而结构化数据中的类别型特征除了决策树可以直接处理外,一般情况下必须经过处理转换成数值型。方法有多种,序号编码(处理具有大小关系的数据),独热编码(处理不具有大小关系的数据),二进制编码(先序号编码赋予ID,再对ID二进制处理)。

为提高复杂关系的拟合能力,特征工程会把一阶离散特征构成高阶组合特征,再通过降维减少高维特征需要学习的参数。基于决策树能有效找到组合特征(GBDT)。

非结构化数据:

  • 词袋模型
  • N-gram模型
  • 主题模型(LDA:是利用文档中单词的共现关系来对单词按主题聚类, 也可以理解为对“文档-单词”矩阵进行分解, 得到“文档-主题”和“主题-单词”两个概率分布)
  • 词嵌入模型(word2vec:CBOW / skip-gram、glove)

特征数据量不足:

一是基于模型的方法,包括简化模型(如将非线性模型简化为线性模型)、添加约束项以缩小假设空间(如L1/L2正则项)、集成学习、Dropout超参数等。

二是基于数据的方法,主要通过数据扩充,即根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。

  • 生成对抗网络
  • 迁移学习(Transfer  Learning)、微调(fine-tune)
  • 上采样
  • 数据扩充
  • 图像处理、图像变换

你可能感兴趣的:(机器学习)