《百面机器学习——学习笔记》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 }

扫描二维码关注公众号,回复: 5276322 查看本文章

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

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<<m,k<<n),学习参数降维为m×k+n×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)
  • 上采样
  • 数据扩充
  • 图像处理、图像变换

猜你喜欢

转载自blog.csdn.net/m511655654/article/details/86687124
今日推荐