葫芦书是机器学习岗位面试的必读书,第一遍读,就当作对自己这四个月以来入门机器学习的知识测验,顺便查漏补缺。葫芦书比较好的一点是它的写作是通过问答方式进行的,就像一场模拟面试一样,而这些问题可能是我自学相关知识的时候没有细想过的,通过这些问题我也可以发现自己的知识盲区,再查阅相关资料。
闲言少叙,开始啦。
特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。从本质上来讲,特征工程是一个表示和展现数据的过程。在实际工作中,特征工程旨在去除原始数据中的杂质和冗余,设计更高效的特征以刻画求解的问题与预测模型之间的关系。
1、特征归一化
为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。
1.1、为什么需要对数值类型的特征做归一化?
- 我的回答:
1、消除数据特征之间的量纲影响。
2、运用随机梯度下降法等优化方法进行参数学习的时候,由于学习率通常对各个特征都是相同的,因此若各特征的数值范围相差太大会导致某些特征的参数学习速度很慢。归一化可以很好地解决这一问题。
- 参考答案:
实际上就是我上面说到的第2点,通过例子做了详细解释。
假设有两种数值型特征,的取值范围为,的取值范围为,于是可以构造一个目标函数符合图(a)中的等值图。
在学习速率相同的情况下,的更新速度会大于,需要较多的迭代才能找到最优解。如果将和归一化到相同的数值区间后,优化目标的等值图会变成图(b)中的圆形,和的更新速度变得更为一致,容易更快地通过梯度下降找到最优解。
2、类别型特征
类别型特征(Categorical Feature)主要是指性别(男、女)、血型(A、B、AB、O)等只在有限选项内取值的特征。
2.1、在对数据进行预处理时,应该怎样处理类别型特征?
- 我的回答:
1、用独热编码(One-hot Encoding)表示,即建立一个维向量,这里是类别数,样本所属类别对应位置为1,其它位置均为0。
2、把个类别对应到来进行区分表示。
- 参考答案:
1、序号编码(Ordinal Encoding),常用于处理类别间具有大小关系的数据。例如成绩,可以分为低、中、高三档,并且存在“高>中>低”的排序关系。高表示为3、中表示为2、低表示为1,转换后依然保留了大小关系。
2、独热编码(One-hot Encoding),通常用于处理类别间不具有大小关系的特征。对于类别取值较多的情况可以使用稀疏向量来节省空间,也可以考虑配合特征选择来降低维度。
3、二进制编码(Binary Encoding),二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。二进制编码本质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,且维数少于独热编码,节省了存储空间。
二进制编码和独热编码对比如下,可以看到表示4个类别二进制编码只需要3位而独热编码需要4位。
3、组合特征
3.1、什么是组合特征?如何处理高维组合特征?
- 我的回答:
1、我理解的组合特征就是将一些原有特征进行组合形成的新的特征。
2、对于高维组合特征的处理,可以采用PCA、LDA等降维方法对特征进行降维。
- 参考答案:
1、为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。
例如,表一是语言和类型对点击的影响。为了提高拟合能力,语言和类型可以组成二阶特征,表二是语言和类型的组合特征对点击的影响 。
2、对于用户和物品组成的二阶特征,若用户的数量为 、物品的数量为 ,那么需要学习的参数的规模为。 在互联网环境下,用户数量和物品数量都可以达到干万量级,几乎无法学习规模的参数 。
在这种情况下,一种行之有效的方法是将用户和物品分别用维的低维向量表示(其中),以逻辑回归为例:
其中,和分别表示和对应的低维向量,表示和的组合特征。这样需要学习的参数的规模变为。这其实等价于矩阵分解,即。
3.2、怎样有效地找到组合特征?
问题解释:很多实际问题中,我们常常需要面对多种高维特征 。 如果简单地组合,依然会存在参数过多、过拟合等问题,而且并不是所有的特征组合都有意义 。 因此,需要一种有效的方法来帮助我们找到应该对哪些特征进行组合。
- 我的回答:
触及知识盲区了……
- 参考答案:
可以采用梯度提升决策树来构建新的组合特征,该方法的思想是每次都在之前构建的决策树的残差上构建下一棵决策树 。
下图中使用GBDT生成了两棵树,两颗树一共有五个叶子节点。我们将样本输入到两颗树中,样本落在了第一棵树的第二个叶子节点,第二颗树的第一个叶子节点,于是我们便可以依次构建一个五纬的特征向量,每一个纬度代表了一个叶子节点,样本落在这个叶子节点上面的话那么值为1,没有落在该叶子节点的话,那么值为0。于是对于该样本,我们可以得到一个向量作为该样本的组合特征。
4、文本表示模型
4.1、有哪些文本表示模型?它们各有什么优缺点?
- 我的回答:
还真没特别关注过文本表示模型……印象里最简单的表示方法是词袋模型,即给一系列常用词编号,然后用独热编码的方式来表示一个文本,缺点就是表示向量稀疏以及忽略了词之间的顺序。优点就是简单。
- 参考答案:
1、词袋模型和N-gram模型
最基础的文本表示模型是词袋模型。顾名思义,就是将每篇文章看成一袋子词,并忽略词出现的顺序 。具体地说,就是将整段文本以词为单位切分,然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。常用TF-IDF(Term Frequency–Inverse Document Frequency,词频-逆文本频率)来计算。
将文章进行单词级别的划分有时候并不是一种好的做法,比如英文中的natural language processing,将这3个词拆分开来,所表达的含义与三个词连续出现时大相径庭 。 通常,可以将连续出现的n个词组成的词组( N-gram )也作为一个单独的特征放到向量表示中去,构成N-gram模型。
2、主题模型
基于词袋模型或N-gram模型的文本表示模型有一个明显的缺陷,就是无法识别出两个不同的词或词组具有相同的主题。 因此需要一种技术能够将具有相同主题的词或词组映射到同一维度上去,于是产生了主题模型 。
我们如何判定两个不同的词具有相同的主题呢?这两个词可能有更高的概率同时出现在同一篇文档中, 换句话说 , 给定某一主题,这两个词的产生概率都是比较高的,而另一些不太相关的词汇产生的概率则是较低的 。假设有K个主题,我们就把任意文章表示威一个K维的主题向量 ,其中向量的每维代表一个主题,权重代表这篇文章属于这个特定主题的概率 。 主题模型所解决的事情就是从文本库中发现有代表性的主题(得到每个主题上面词的分布) , 并且计算出每篇文章对应着哪些主题。
3、词嵌入与深度学习模型
词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成低维空间(通常维)上的一个稠密向量(Dense Vector)。维空间的每一维也可以看作一个隐含的主题,只不过不像主题模型中的主题那样直观 。
由于词嵌入将每个词映射成一个维的向量, 如果一篇文档有个词,就可以用一个维的矩阵来表示这篇文挡,但是这样的表示过于底层 。 在实际应用中,如果仅仅把这个矩阵作为原文本的表示特征输入到机器学习模型中,通常很难得到令人满意的结果。
在传统的浅层机器学习模型中,一个好的特征工程往往可以带来算法效果的显著提升 。 而深度学习模型正好为我们提供了一种自动地进行特征工程的方式,模型中的每个隐层都可以认为对应着不同抽象层次的特征。
卷积神经网络和循环神经网络的结构在文本表示中取得了很好的效果,主要是由于它们能够更好地对文本进行建模,抽取出一些高层的语义特征。与全连接的网络结向相比 ,卷积神经网络和循环神经网络一方面很好地抓住了文本的特性,另一方面又减少了网络中待学习的参数,提高了训练速度,并且降低了过拟合的风险。
5、Word2Vec
谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一 。Word2Vec实际是一种浅层的神经网络模型, 有两种网络结构,分别是CBOW(Continues Bag of Words)和Skip-gram。
5.1、Word2Vec是如何工作的?它和LDA有什么区别和联系?
- 我的回答:
再次触及知识盲区……果然只关注机器学习基本模型是不行的啊,还要留意各应用领域的经典模型才可以……现场学一下再来回答这个问题吧……
关于Word2Vec的思路这篇文章讲解的很清楚了:
大部分的有监督机器学习模型,都可以归结为:。这里的数学模型(比如神经网络、SVM)只接受数值型输入。NLP里的词语,是人类的抽象总结,是符号形式的(比如中文、英文、拉丁文等等),所以需要把他们转换成数值形式,或者说嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),Word2vec就是词嵌入的一种。
在NLP中,把看做一个句子里的一个词语,是这个词语的上下文词语,那么这里的,便是NLP中经常出现的语言模型(language model),这个模型的目的,就是判断这个样本是否符合自然语言的法则。
Word2vec正是来源于这个思想,但它的最终目的,不是要把训练得多么完美,而是只关心模型训练完后的副产物——模型参数(这里特指神经网络的权重),并将这些参数,作为输入的某种向量化的表示,这个向量便叫做——词向量。
Skip-gram和CBOW模型
- 输入一个词,来预测它的上下文,这个模型叫做Skip-gram模型。
- 输入一个词的上下文,来预测这个词本身,则是CBOW模型。
我们先来看个最简单的例子:用当前词预测它的下一个词。
Skip-gram的网络结构如下图所示,就是one-hot encoder形式的输入,输出对应下一个词是这个词的概率,我们希望输出跟真实的的one-hot encoder一样。
注意,这里隐层的激活函数其实是线性的,相当于没做任何处理(这也是Word2vec模型的独到之处),我们训练这个神经网络,最后得到神经网络的权重。假设输入的one-hot encoder为,则在输入层到隐含层的权重里,只有对应1这个位置的权重被激活,这些权重的个数,跟隐含层节点数是一致的,从而这些权重组成一个向量来表示,因为每个词的one-hot encoder中1的位置不同,所以,这个向量可以用来唯一表示。词向量的维度(与隐含层节点数一致)一般情况下要远远小于词的总数的大小,所以Word2vec本质上是一种降维操作——把词语从one-hot encoder形式的表示降维到Word2vec形式的表示。
上面讨论的是最简单情形,即只有一个词,当有多个词时,网络结构如下:
这可以看成是单个 单个模型的并联,cost function是单个cost function的累加(取log后)。
Skip-gram是预测一个词的上下文,而CBOW是用上下文预测这个词。
网络结构如下:
跟Skip-gram 的模型并联不同,这里是输入变成了多个单词,所以要对输入进行处理(一般是求和然后平均),输出的cost function不变。
LDA算法内容有些多,简单来说,LDA是一种主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档,抽取出它们的主题(分布)后,便可以根据主题(分布)进行主题聚类或文本分类。LDA是一种典型的词袋模型。关于LDA算法的相关学习记录另外给出。
- 参考答案:
1、CBOW的目标是根据上下文出现的词语来预测当前词的生成概率,如图(a)所示;而Skip-gram是根据当前词来预测上下文中各词的生成概率, 如图(b)所示。
其中是当前所关注的词,是上下文中出现的词。这里前后滑动窗口皆设置为2。
训练得到维度为和的两个权重矩阵之后,可以选择其中一个作为个词的维向量表示。
2、Word2Vec与LDA的区别和联系。首先,LDA是利用文档中单词的共现关系来对单词按主题分类,也可以理解为对“文档—单词”矩阵进行分解得到“文档—主题”和“主题—单词”两个概率分布。而Word2Vec其实是对“上下文—单词”矩阵进行学习,其中上下文由周围的几个单词组成,由此得到的词向量表示更多地融入了上下文共现的特征 。 也就是说如果两个单词所对应的Word2Vec向量相似度较高,那么它们很可能经常在同样的上下文中出现。需要说明的是,上述分析的是LDA与Word2Vec的不同,不应该作为主题模型和词嵌入两类方法的主要差异。主题模型通过一定的结构调整可以基于“上下文—主要词”矩阵进行主题推理 。 同样地,词嵌入方法也可以根据“文档—单词”矩阵学习出词的隐含向量表示。主题模型和词嵌入两类方法最大的不同其实在于模型本身,主题模型是一种基于概率图模型的生成式模型,其似然函数可以写成若干条件概率连乘的形式,其中包括需要推测的隐含变量( 即主题);而词嵌入模型一般表达为神经网络的形式,似然函数定义在网络的输出之上,需要通过学习网络的权重以得到单词的稠密向量表示。
6、图像数据不足时的处理方法
在机器学习中,绝大部分模型都需要大量的数据进行训练和学习(包括有监督学习和无监督学习) 然而在实际应用中经常会遇到训练数据不足的问题。 比如图像分类,作为计算机视觉最基本的任务之一,其目标是将每幅图像划分到指定类别集合中的一个或多个类别中。如果训练样本比较少,该如何处理呢?
6.1、在图像分类任务中,训练数据不足会带来什么问题?如何缓解数据量不足带来的问题?
- 我的回答:
1、训练数据不足一方面会使得训练集不能很好的代表整体的特征,另一方面会导致模型很容易过拟合。由于上述原因,最终模型在测试集上的表现应该不会太好。
2、进行数据扩充,即基于当前训练集中的样本生成一些“新样本”,例如我们可以对图像进行翻转平移等操作,或在图像中加入一定的噪声点。
- 参考答案:
一个模型所能提供的信息一般来源于两个方面,一是训练数据中蕴含的信息;二是在模型的形成过程中(包括构造、学习、推理等)人们提供的先验信息。当训练数据不足时,说明模型从原始数据中获取的信息比较少,这种情况下要想保证模型的效果,就需要更多先验信息。先验信息可以作用在模型上,例如让模型采用特定的内在结构、条件假设或添加其他一些约束条件;先验信息也可以直接施加在数据集上,根据特定的先验假设去调整、变换或扩展训练数据,让其展现出更多的、更有用的信息,以利于后续模型的训练和学习。
1、训练数据不足带来的问题主要表现在过拟合方面,即模型在训练样本上的效果可能不错但在测试集上的泛化效果不佳。
2、根据上述讨论,对应的处理方法大致也可以分两类:
一是基于模型的方法,主要是采用降低过拟合风险的措施,包括简化模型(如将非线性模型简化为线性模型)、添加约束以缩小假设空间(如正则化)、集成学习、 Dropout超参数等;
二是基于数据的方法,主要通过数据扩充(Data Augmentation ),即根据一些先验知识,在保持特定信息的前提下对原始数据进行适当变换以达到扩充数据集的效果。具体到图像分类任务中,在保持图像类别不变的前提下,可以对训练集中的每幅图像进行以下变换:
一定程度内的随机旋转、平移、缩版、裁剪、填充、左右翻转等,这些变换对应着同 一个目标在不同角度的观察结果。
对图像中的像素添加躁声扰动,比如椒盐噪声、高斯白噪声等。
颜色变换。例如,在图像的RGB颜色空间上进行主成分分析,得到3个主成分的特征向量及其对应的特征值,然后在每个像素的RGB值上添加增量,其中是均值为0方差较小的高斯分布随机数。
改变图像的亮度、清晰度、对比度、锐度等。