百面机器学习01-特征工程

1:特征归一化

场景描述:
为了消除数据特征之间的量纲影响,咱们须要对特征进行归一化处理,使得不一样指标之间具备可比性。例如,分析一我的的身高和体重对健康的影响,若是使用米(m )和千克(kg)做为单位,那么身高特征会在 1.6 1.8m 的数值范围内,体重特征会在50 100kg 的范围内,分析出来的结果显然会倾向于数值差异比较大的体重特征。想要获得更为准确的结果,就须要进行特征归一化 (Normalization)处理,使各指标处于同一数值量级,以便进行分析。
算法

问题1:为何须要对数值类型的特征作 归一化?
对数值类型的特征作归一化能够将全部的特征都统一到一个大体相
同的数值区间内。最经常使用的方法主要有如下两种。
(1)线性函数归一化(Min-Max Scalling )。它对原始数据进行
线性变换,使结果映射到 [0,1] 的范围,实现对原始数据的等比缩放。
归一化公式以下
X norm  = X − X min ⁡ X max ⁡ − X min ⁡ X_{\text {norm }}=\frac{X-X_{\min }}{X_{\max }-X_{\min }} Xnorm =XmaxXminXXmin
其中 X 为原始数据,X_max、X_min 分别为数据最大值和最小值。
(2)零均值归一化(Z-Score Normalization)。它会将原始数







网络

据映射到均值为 0、标准差为 1 的分布上。具体来讲,假设原始特征的
均值为 μ \mu μ 、标准差为 σ , \sigma, σ, 那么归一化公式定义为
z = x − μ σ z=\frac{x-\mu}{\sigma} z=σxμ
为何须要对数值型特征作归一化呢?咱们不妨借助随机梯度降低
的实例来讲明归一化的重要性。假设有两种数值型特征, x, 的取值范围 [ 0 , 10 ] , x 2 [0,10], x_{2} [0,10],x2 的取值范围为 [ 0 , 3 ] , [0,3], [0,3], 因而能够构造一个目标函数符合图 1.1(a)中的等值图。在学习速率相同的状况下,x, 的更新速度会大于 x 2 , x_{2}, x2, 须要较多的迭代才能找到最优解。若是将 x 1 x_{1} x1 x 2 x_{2} x2 归一化到相同的数值区间后,优化目标的等值图会变成图 1.1(b)中的圆形,x_和 x 2 x_{2} x2 的更新速度变得更为一致,容易更快地经过梯度降低找到最优解。
在这里插入图片描述
固然,数据归一化并非万能的。在实际应用中,经过梯度降低法
求解的模型一般是须要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但对于决策树模型则并不适用,以 C4.5 为例,决策树在进行节点分裂时主要依据数据集 D 关于特征 x x x 的信息增益比,而信息增益比跟特征是否通过归一化是无关的,由于归一化并不会改变样本在特征 x 上的信息增益。






机器学习

2:类别型特征

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

涉及到的知识点:学习

  • 序号编码(Ordinal Encoding)
  • 独热编码(One-hot Encoding)
  • 二进制编码(Binary Encoding )

问题:在对数据迦行预处理时,应该怎样处理类别型特征?测试

序号编码

序号编码一般用于处理类别间具备大小关系的数据。例如成绩,可
以分为低、中、高三档,而且存在“高>中>低”的排序关系。序号
编码会按照大小关系对类别型特征赋予一个数值 ID,例如高表示为 三、中表示为 二、低表示为 1,转换后依然保留了大小关系。

优化

独热编码

独热编码一般用于处理类别间不具备大小关系的特征。例如血型,一共有 4 个取值(A 型血、B 型血、AB 型血、O 型血),独热编码会把血型变成一个 4 维稀疏向量,A 型血表示为(1, 0, 0, 0 ),B 型血表示为 ( 0 , 1 , 0 , 0 ) , (0,1,0,0), (0,1,0,0), AB 型表示为 ( 0 , 0 , 1 , 0 ) , (0,0,1,0), (0,0,1,0), O 型血表示为( 0 , 0 , 0,0, 0,0, 0, 1 ) 。对于类别取值较多的状况下使用独热编码须要注意如下问题。
(1)使用稀疏向量来节省空间。在独热编码下,特征向量只有某
一维取值为 1,其余位置取值均为 0。所以能够利用向量的稀疏表示有效地节省空间,而且目前大部分的算法均接受稀疏向量形式的输入。
(2)配合特征选择来下降维度。高维度特征会带来几方面的问题。
一是在 K 近邻算法中,高维空间下两点之间的距离很可贵到有效的衡量;
二是在逻辑回归模型中,参数的数量会随着维度的增高而增长,容易引发过拟合问题; 三是一般只有部分维度是对分类、预测有帮助,所以能够考虑配合特征选择来下降维度。




编码

二进制编码

二进制编码主要分为两步,先用序号编码给每一个类别赋予一个类别
ID,而后将类别 ID 对应的二进制编码做为结果。以 A、B、AB、O
血型为例,表 1.1 是二进制编码的过程。A 型血的 ID 为 1,二进制表示为 001 ; B 型血的 ID 为 2,二进制表示为 010; 以此类推能够获得AB 型血和 O 型血的二进制表示。能够看出,二进制编码本质上是利用二进制对 ID 进行哈希映射,最终获得 0/1 特征向量,且维数少于独热编码,节省了存储空间。
在这里插入图片描述
除上述几种编码方式外,还能够进一步了解真他的编码方式,好比 Helmert Contrast 、 Sum Contrast 、 PolynomialContrast 、 Backward Difference Contrast 等 。



spa

3:高维组合特征的处理

问题:什么是组合特征?如何处理高维 难度:食食 会食食
组合特征?
3d

为了提升复杂关系的拟合能力,在特征工程中常常会把一阶离散特
征两两组合,构成高阶组合特征。以广告点击预估问题为例,原始数据有语言和类型两种离散特征,表 1.2 是语言和类型对点击的影响。为了提升拟合能力,语言和类型能够组成二阶特征,表 1.3 是语言和类型的组合特征对点击的影响。

在这里插入图片描述
以逻辑回归为例,假设数据的特征向量为 X = ( x 1 , x 2 , … , x k ) , X=\left(x_{1}, x_{2}, \ldots, x_{k}\right), X=(x1,x2,,xk), 则有
Y = sigmoid ⁡ ( ∑ i ∑ j w i j < x i , x j > ) Y=\operatorname{sigmoid}\left(\sum_{i} \sum_{j} w_{i j}<x_{i}, x_{j}>\right) Y=sigmoid(ijwij<xi,xj>)
其中 < x i , x j > <x_{i}, x_{j}> <xi,xj> 表示 x i x_{i} xi x j x_{j} xj 的组合特征, w i j w_{i j} wij 的维度等于 ∣ x i ∣ ⋅ ∣ x j ∣ , ∣ x i ∣ \left|x_{i}\right| \cdot\left|x_{j}\right|,\left|x_{i}\right| xixj,xi ∣ x j ∣ \left|x_{j}\right| xj 分别表明第 i i i 个特征和第 j j j 个特征不一样取值的个数。在表 1.3 的广告点击预测问题中, w w w 的维度是 2 * 2=4(语言取值为中文或英文两种、类型的取值为电影或电视剧两种 )。这种特征组合看起来是没有任何问题的,但当引入 ID 类型的特征时,问题就出现了。以推荐问题为例,表1.4 是用户 ID 和物品 ID 对点击的影响,表 1.5 是用户 ID 和物品 ID的组合特征对点击的影响。


在这里插入图片描述
若用户的数量为 m、物品的数量为 n,那么须要学习的参数的规模
m × n ∘ m \times n_{\circ} m×n 在互联网环境下,用户数量和物品数量均可以达到千万量级,几乎没法学习 m × n m \times n m×n 规模的参数。在这种状况下,一种行之有效的方法是将用户和物品分别用 k k k 维的低维向量表示( k ≪ m , k ≪ n k \ll m, k \ll n km,kn )
Y = sigmoid ⁡ ( ∑ i ∑ j w i j < x i , x j > ) Y=\operatorname{sigmoid}\left(\sum_{i} \sum_{j} w_{i j}<x_{i}, x_{j}>\right) Y=sigmoid(ijwij<xi,xj>)
其中 w i j = x i ′ ⋅ x j ′ , x i ′ w_{i j}=x_{i}^{\prime} \cdot x_{j}^{\prime}, \quad x_{i}^{\prime} wij=xixj,xi x j ′ x_{j}^{\prime} xj 分别表示 x i x_{i} xi x j x_{j} xj 对应的低维向量。在表 1.5 的推荐问题中,须要学习的参数的规模变为 m × k + n × k 。 m \times k+n \times k 。 m×k+n×k 熟悉推荐算法的很快能够看出来,这其实等价于矩阵分解。因此,这里也提供了另外一个理解推荐系统中矩阵分解的思路。



4:组合特征

场景描述:
上一节介绍了如何利用降维方法来减小两个高维特征组合后须要学习的参数。可是在不少实际问题中,咱们经常须要面对多种高维特征。若是简单地两两组合,依然容易存在参数过多、过拟合等问题,并且并非全部的特征组合都是有意义的。所以,须要一种有效的方法来帮助咱们找到应该对哪些特征进行组合。

问题:怎样有效地找到组合特征?

如下介绍一种基于决策树的特征组合寻找方法。以点击预测问题为例,假设原始输入特征包含年龄、性别、用户类型(试用期、付费)、物品类型(护肤、食品等)4 个方面的信息,而且根据原始输入和标签(点击 / 未点击)构造 出了决策树,如图1.2所示。
因而,每一条从根节点到叶节点的路径均可以当作一种特征组合的
方式。具体来讲,就有如下 4 种特征组合的方式。
(1 ) “年龄 < = 35 " <=35 " <=35"
且“性别 = 女”。
(2)“年龄 < = 3 5 ′ ′ <=35^{\prime \prime} <=35 且“物品类别 = = = 护肤"
(3)“用户类型 = 付费”且“物品类型 = = = 食品”
(4)“用户类型 = 付费”且“年龄 < = 40 " <=40 " <=40"






在这里插入图片描述

表 1. 6 是两个样本信息,那么第 l 个样本按照上述 4 个特征组合就
能够编码为(1,1,0,0) 由于 同时知足(1) (2),但不知足(3)(4)。同理 1 第 2 个样本能够编码为(0,0,1,1),由于它同时知足(3)(4),但不知足(1) (2)
在这里插入图片描述
给定原始输入该如何有效地构造决策树呢?能够采用梯度提高决策树,该方法的思想是每次都在以前构建的决策树的残差上构建下一棵决策树。


文本表示模型

场影描述
文本是一类很是重要的非结构化数据,如何表示文本数据一直是机器学习领域的一个重要研究方向。

涉及到的知识点:词袋模型(Bag of Words ),TF-IDF(Term Frequency-Inverse Document Frequency ),主题模型(Topic Model),词嵌入模型(Word Embedding )

问题:有哪些文本表示模型?什么优缺点?

  • 词袋模型
    最基础的文本表示模型是词袋模型。顾名思义,就是将每篇文章当作一袋子词,并忽略每一个词出现的顺序。具体地说,就是将整段文本以维表明一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。经常使用 TF-IDF 来计算权重,公式为
    T F − I D F ( t , d ) = T F ( t , d ) × IDF ⁡ ( t ) \mathrm{TF}-\mathrm{IDF}(t, d)=\mathrm{TF}(t, d) \times \operatorname{IDF}(t) TFIDF(t,d)=TF(t,d)×IDF(t)
    其中 TF ( t , d ) (t, d) (t,d) 为单词 t t t 在文档 d d d 中出现的频率,IDF( t t t ) 是逆文档频率,用来衡量单词 t t t 对表达语义所起的重要性,表示为
    IDF ⁡ ( t ) = log ⁡  文章总数   包含单词 t 的文章总数 + 1 \operatorname{IDF}(t)=\log \frac{\text { 文章总数 }}{\text { 包含单词}_{t} \text {的文章总数}+1} IDF(t)=log 包含单词t的文章总数+1 文章总数 
    直观的解释是,若是一个单词在很是多的文章里面都出现,那么它多是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,所以对权重作必定惩罚。




将文章进行单词级别的划分有时候并非一种好的作法,好比英
文中的 natural language processing(天然语言处理)一词,若是
将 natural,language,processing 这 3 个词拆分开来,所表达的
含义与三个词连续出现时截然不同。一般,能够将连续出现的 n 个词 ( n ⩽ N ) (n \leqslant N) (nN) 组成的词组(N-gram )也做为一个单独的特征放到向量表示中去,构成 N-gram 模型。另外,同一个词可能有多种词性变化,却具备类似的含义。在实际应用中,通常会对单词进行词干抽取(Word Stemming )处理,即将不一样词性的单词统一成为同一词干的形式。


  • 主题模型
    主题模型用于从文本库中发现有表明性的主题(获得每一个主题上面词的分布特性 ),而且可以计算出每篇文章的主题分布。

  • 词嵌入与深度学习模型
    词嵌入是一类将词向量化的模型的统称,核心思想是将每一个词都映射成低维空间(一般 K = 50 ∼ 300 K=50 \sim 300 K=50300 维 ) 上的一个稠密向量(DenseVector ) 。K维空间的每一维也能够看做一个隐含的主题,只不过不像主题模型中的主题那样直观。
    因为词嵌入将每一个词映射成一个 K 维的向量,若是一篇文档有 N 个词,就能够用一个 N * K 维的矩阵来表示这篇文档,可是这样的表示过于底层。在实际应用中,若是仅仅把这个矩阵做为原文本的表示特征输入到机器学习模型中,一般很可贵到使人满意的结果。所以,还须要在此基础之上加工出更高层的特征。在传统的浅层机器学习模型中,一个好的特征工程每每能够带来算法效果的显著提高。而深度学习模型正好为咱们提供了一种自动地进行特征工程的方式,模型中的每一个隐层均可以认为对应着不一样抽象层次的特征。从这个角度来说,深度学习模型可以战胜浅层模型也就瓜熟蒂落了。卷积神经网络和循环神经网络的结构在文本表示中取得了很好的效果,主要是因为它们可以更好地对文本进行建模,抽取出一些高层的语义特征。与全链接的网络结构相比,卷积神经网络和循环神经网络一方面很好地抓住了文本的特性,另外一方面又减小了网络中待学习的参数,提升了训练速度,而且下降了过拟合的风险。

6:Word2Vec

场景描述
谷歌 2013 年提出的 Word2Vec 是目前最经常使用的词嵌入模型之一。Word2Vec 实际是一种浅层的神经网络模型,它有两种网络结构,分别是 CBOW(Continues Bag of Words )和 Skip-gram。

涉及到的知识点:Word2Vec ,隐狄利克雷模型( LDA) , CBOW, Skip-gram

问题:Word2Vec 是如何工做的?芭 难度:食食食 会食
和 LOA 有什么区别与联系?

CBOW 的目标是恨据上下艾出现的词语来预测当前i司的生成慨率,如图 1.3 ( a )所示 ; 而 Skip-gram 是根据当前词来预测上下文中词的生成几率, 如圄 1.3 ( b ) 所示
在这里插入图片描述
其中 w ( t ) w(t) w(t) 是当前所关注的词, w ( t − 2 ) , w ( t − 1 ) , w ( t + 1 ) , w ( t + 2 ) w(t-2), w(t-1), w(t+1), w(t+2) w(t2),w(t1),w(t+1),w(t+2)
是上下文中出现的词。这里先后滑动窗口大小均设为 2。


CBOW 和 Skip-gram 均可以表示成由输入层(Input)、映射层
(Projection)和输出层(Output)组成的神经网络。
输入层中的每一个词由独热编码方式表示,即全部词均表示成一个 N
维向量,其中 N 为词汇表中单词的总数。在向量中,每一个词都将与之对应的维度置为 1,其他维度的值均设为 0。
在映射层(又称隐含层)中,K 个隐含单元(Hidden Units)的取 值能够由 N 维输入向量以及链接输入和隐含单元之间的 N × K N \times K N×K 维权重矩阵计算获得。在 CBOW 中,还须要将各个输入词所计算出的隐含单元求和。同理,输出层向量的值能够经过隐含层向量(K 维),以及链接隐含层和输出层之间的 K × N K \times N K×N 维权重矩阵计算获得。输出层也是一个 N N N 维向量,每维与词汇表中的一个单词相对应。最后,对输出层向量应用Softmax 激活函数,能够计算出每一个单词的生成几率。Softmax 激活函数的定义为
P ( y = w n ∣ x ) = e x n ∑ k = 1 N e x k P\left(y=w_{n} \mid x\right)=\frac{\mathrm{e}^{x_{n}}}{\sum_{k=1}^{N} \mathrm{e}^{x_{k}}} P(y=wnx)=k=1Nexkexn
其中 x 表明 N N N 维的原始输出向量,x_为在原始输出向量中,与单词 w n w_{n} wn所对应维度的取值。





其中 x 表明 N N N 维的原始输出向量, x n x_{n} xn 为在原始输出向量中,与单词 w n w_{n} wn所对应维度的取值。接下来的任务就是训练神经网络的权重,使得语料库中全部单词的总体生成几率最大化。从输入层到隐含层须要一个维度为 N\timesK 的权重矩阵,从隐含层到输出层又须要一个维度为 K\timesN 的权重矩阵,学习权重能够用反向传播算法实现,每次迭代时将权重沿梯度更优的方向进行一小步更新。可是因为 Softmax 激活函数中存在归一化项的缘故,推导出来的迭代公式须要对词汇表中的全部单词进行遍历,使得每次迭代过程很是缓慢,由此产生了 Hierarchical Softmax 和 Negative Sampling 两种改进方法,有兴趣的读者能够参考 Word2Vec 的原论文。训练获得维度为 N × K N \times K N×K K × N K \times N K×N 的两个权重矩阵以后,能够选择其中一个做为 N N N 个词的 K K K 维向量表示。

谈到 Word2Vec 与 LDA 的区别和联系,首先,LDA 是利用文档
中单词的共现关系来对单词按主题聚类,也能够理解为对“文档 - 单词”矩阵进行分解,获得“文档 - 主题”和“主题 - 单词”两个几率分布。而 Word2Vec 实际上是对“上下文 - 单词”矩阵进行学习,其中上下文由周围的几个单词组成,由此获得的词向量表示更多地融入了上下文共现的特征。也就是说,若是两个单词所对应的 Word2Vec 向量类似度较高,那么它们极可能常常在一样的上下文中出现。须要说明的是,上述分析的是 LDA 与 Word2Vec 的不一样,不该该做为主题模型和词嵌入两类方法的主要差别。主题模型经过必定的结构调整能够基于“上下文 - 单词”"矩阵进行主题推理。一样地,词嵌入方法也能够根据“文档 - 单词”矩阵学习出词的隐含向量表示。主题模型和词嵌入两类方法最大的不一样其实在于模型自己,主题模型是一种基于几率图模型的生成式模型,其似然函数能够写成若干条件几率连耕的形式,其中包括须要推测的隐含变量(即主题); 而词嵌入模型通常表达为神经网络的形式,似然函数定义在网络的输出之上,须要经过学习网络的权重以获得单词的稠密向量表示。

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

场景描述
在机器学习中,绝大部分模型都须要大量的数据进行训练和学习(包括有监督学习和无监督学习),然而在实际应用中常常会遇到训练数据不足的问题。好比图像分类,做为计算机视觉最基本的任务之一,其目标是将每幅图像划分到指定类别集合中的一个或多个类别中。当训练一个图像分类模型时,若是训练样本比较少,该如何处理呢?

涉及到的知识点:迁移学习( Transfer Learning ),生成对抗网络,图像处理,上采样技术,数据扩充

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

一个模型所能提供的信息通常来源于两个方面,一是训练数据中蕴
含的信息; 二是在模型的造成过程当中(包括构造、学习、推理等),人们提供的先验信息。当训练数据不足时,说明模型从原始数据中获取的信息比较少,这种状况下要想保证模型的效果,就须要更多先验信息。先验信息能够做用在模型上,例如让模型采用特定的内在结构、条件假设或添加其余一些约束条件; 先验信息也能够直接施加在数据集上,即根据特定的先验假设去调整、变换或扩展训练数据,让其展示出更多的、更有用的信息,以利于后续模型的训练和学习。
具体到图像分类任务上,训练数据不足带来的问题主要表如今过拟合方面,即模型在训练样本上的效果可能不错,但在测试集上的泛化效果不佳。根据上述讨论,对应的处理方法大体也能够分两类,一是基于模型的方法,主要是采用下降过拟合风险的措施,包括简化模型(如将非线性模型简化为线性模型)、添加约束项以缩小假设空间(如 L1/L2正则项)、集成学习、Dropout 超参数等; 二是基于数据的方法,主要经过数据扩充(Data Augmentation),即根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。具体到图像分类任务中,在保持图像类别不变的前提下,能够对训练集中的每幅图像进行如下变换。
(1)必定程度内的随机旋转、平移、缩放、裁剪、填充、左右翻
转等,这些变换对应着同一个目标在不一样角度的观察结果。
(2)对图像中的像素添加噪声扰动,好比椒盐噪声、高斯白噪声等。
(3)颜色变换。例如,在图像的 RGB 颜色空间上进行主成分分
析,获得 3 个主成分的特征向量 p 1 , p 2 , p 3 p_{1}, p_{2}, p_{3} p1,p2,p3 及其对应的特征值 λ 1 , λ 2 , λ 3 , \lambda_{1}, \lambda_{2}, \lambda_{3}, λ1,λ2,λ3, 而后在每一个像素的 RGB 值上添加增量 [ p 1 , p 2 , p 3 ] ⋅ [ α 1 λ 1 , α 2 λ 2 , α 3 λ 3 ] T , \left[p_{1}, p_{2}, p_{3}\right] \cdot\left[\alpha_{1} \lambda_{1}, \alpha_{2} \lambda_{2}, \alpha_{3} \lambda_{3}\right]^{\mathrm{T}}, [p1,p2,p3][α1λ1,α2λ2,α3λ3]T, 其中 α 1 , α 2 , α 3 \alpha_{1}, \alpha_{2}, \alpha_{3} α1,α2,α3 是均值为 0 、方差较小的高斯分布随机数。
(4)改变图像的亮度、清晰度、对比度、锐度等。







在这里插入图片描述 除了直接在图像空间进行变换,还能够先对图像进行特征提取,然 后在图像的特征空间内进行变换,利用一些通用的数据扩充或上采样技术,例如 SMOTE(Synthetic Minority Over-sampling Technique )算法。抛开上述这些启发式的变换方法,使用生成模型也能够合成一些新样本,例如当今很是流行的生成式对抗网络模型。此外,借助已有的其余模型或数据来进行迁移学习在深度学习中也十分常见。例如,对于大部分图像分类任务,并不须要从头开始训练模型,而是借用一个在大规模数据集上预训练好的通用模型,并在针对目标任务的小数据集上进行微调(fine-tune),这种微调操做就能够当作是一种简单的迁移学习。

相关文章
相关标签/搜索