【百面】01_特征工程

  《百面机器学习》这本书真的是太好了,忍不住要记录一下学习过程中的所思所想。文章内容仅做适当摘取和记录,如有所需,请购书!另外,本文中所摘抄的内容,仅是个人认为比较重要的地方(实际上是想学习的内容)。比如NLP有关的东西,实在是打不起兴趣,舍去了…

  机器学习是要和数据打交道,数据如何表征?如何将数据利用起来?要知道,自然而然得到的数据,基本上都是散乱不整的。“特征工程”要做的,就是“以整易乱”将散乱的数据包装成‘好处理’的样子。文中讲到“特征工程”,顾名思义是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。这就很直接了,“特征工程”就是一个表示和展示数据的过程。围绕“特征工程”,有以下问题需要了解。


1.为什么需要对数值类型的特征做归一化?

  是什么?首先要知道什么是特征归一化,数值类型的特征做归一化就是将所有的特征都统一到一个大致相同的数值区间内。

  为什么?为了消除数据特征之间的量纲影响,使得不同指标之间具有可比性。这里直接使用书本中的例子,分析一个人的身高和体重对健康的影响,如果使用米(m)和千克(kg)作为单位,那么身高特征会在1.6~1.8m的数值范围内,体重特征会在50~100kg的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。怎么理解呢?如果每个特征不进行归一化,50是不是要比1.8在直观的数值上大的多?50这个元素比1.8大这么多,能说明体重50kg的重要性要比身高1.8m的重要性大吗?不能!因为这两个指标没有可比性!那么,能不能把每一维特征同等看待呢?从而消除特征间单位和尺度的差异。这是可以做到的,类似向量进行单位化,每一维特征,把单位和尺度的影响抹掉就好了(数学操作)。大家都进行归一化,都到[0,1]这个赛道上来比较。

  怎么做?

  (1)线性函数归一化

  (2)零均值归一化

  很多文章用随机梯度下降的实例来说明归一化的重要性,又没人做实验。单纯从数学知识来解释,我目前理解不了。只要初值选的好,更窄的地方不是更容易到达最优解吗。

2.在对数据进行预处理时,应该怎样处理类别型特征?

  是什么?类别型特征(Categorical Feature)主要是指性别(男、女)、血型(A、B、AB、O)等只在有限选项内取值的特征。

  为什么?类别型特征原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。

  怎么做?

  (1)序号编码,通常用于处理类别间具有大小关系的数据,比如成绩。

  (2)独热编码,通常用于处理类别间不具有大小关系的特征,比如血型。

  (3)二进制编码,先用序号编码给每个类别赋予一个类别ID, 然后将类别ID对应的二进制编码作为结果。二进制编码本质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,且维数少于独热编码,节省了存储空间。

3.什么是组合特征?怎样有效地找到组合特征?如何处理高维组合特征?

  是什么?为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。说白了就是把相关的几个特征组合成一个特征项。

  为什么?为了提高拟合能力。这里怎么理解呢?在我的理解里,“拟合能力”对应着模型的“复杂程度”,在神经网络中模型越复杂,该模型的拟合能力就越高,同时容易出现过拟合。特征进行组合,相当于增加了特征。直观上,需要拟合的特征参数增多了。并且,人为先验的对特征进行组合,相当于给特征与特征赋予了强关联关系(表1.2,表1.3不懂)。另外,在很多实际问题中,我们常常需要面临多种高维特征,如果简单对特征进行两两组合,会存在参数过多,过拟合等问题。因此需要一种有效的方式对特征进行组合。

  怎么做?

  (1)怎样有效地寻找组合特征?文中给出了基于决策树地特征组合寻找方式,说实话,这里没有看懂作者的意思。按照我自己的理解,寻找有效特征,可以通过组合特征所具有的信息量来作为判断依据。信息增益也好,基尼指数也好,寻找有效特征的过程,就是一个判断组合特征信息量的过程。

  (2)如何处理高维组合特征?高维->低维,SVD降维就好了。

4.有哪些文本表示模型?

  (1)词袋模型和N-gram模型。将每篇文章看成一袋子词,并忽略每个词出现的顺序。具体地说,就是将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。通常,可以将连续出现的n个词(n≤N)组成的词组(N-gram)也作为一个单独的特征放到向量表示中去,构成N-gram模型。

  (2)主题模型。主题模型用于从文本库中发现有代表性的主题(得到每个主题上面词的分布特性),并且能够计算出每篇文章的主题分布。《统计学习方法第二版》书中LSA和PLSA好像是做这个的。

  (3)词嵌入和深度学习模型。词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成低维空间(通常K=50~300维)上的一个稠密向量(Dense Vector)。K维空间的每一维也可以看作一个隐含的主题,只不过不像主题模型中的主题那样直观。

5.什么是Word2Vec?

  谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一。Word2Vec实际是一种浅层的神经网络模型,它有两种网络结构,分别是CBOW(Continues Bag of Words)和Skip-gram。感兴趣的需要深入了解。

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

  该问题作者首先给出了一个很好的观点,“信息的来源”。

  一个模型所能提供的信息一般来源于两个方面, 一是训练数据中蕴含的信息;二是在模型的形成过程中(包括构造、 学习、 推理等),人们提供的先验信息。当训练数据不足时,说明模型从原始数据中获取的信息比较少,这种情况下要想保证模型的效果,就需要更多先验信息。先验信息可以作用在模型上,例如让模型采用特定的内在结构、条件假设或添加其他一些约束条件;先验信息也可以直接施加在数据集上,即根据特定的先验假设去调整、变换或扩展训练数据,让其展现出更多的、更有用的信息,以利于后续模型的训练和学习。

  具体到图像分类任务上,训练数据不足带来的问题主要表现在过拟合上,也就是训练效果好,测试效果差。

  解决过拟合一般有两种方法:一是基于模型的方法,采取降低过拟合风险的措施,如简化模型(非线性模型简化为线性模型)、添加惩罚项以缩小参数假设空间(L1/L2正则化)、集成学习、DropOut等;二是基于数据的方法,进行数据扩充,即根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。

  具体到图像分类任务上,如何缓解数据量不足带来的问题?

  (1)进行数据增强。

    ①变换观察角度类。在一定程度内,进行随机旋转、平移、缩放、裁剪、填充、左右翻转等。

    ②噪声扰动类。对图像中的像素添加噪声扰动,比如高斯噪声等。

    ③颜色变换类。如在图像的RGB颜色空间上进行主成分分析,对主成分变量添加增量,改变整体颜色。

    ④图像显示类。改变图像的亮度、清晰度、对比度、锐度等。

  (2)除了直接在图像空间进行变换之外,还可以对图像进行特征提取,然后在特征空间内进行变换,利用如SMOTE算法等进行数据扩充。

  (3)另外,现在非常火的GANs,可以利用生成器来生成一些训练样本。

  (4)针对小样本的弱监督学习模型也是可以考虑的一个解决方法。

  (5)利用预训练网络进行迁移学习,再使用自身数据进行微调,也不失为一种选择。