百面机器学习之特征工程 - Blog1

今天也要加油鸭~

  • 这是一份总结的学习笔记
  • 路漫漫其修远兮,吾将上下而求索
  • 可阅读可评论可分享可转载,希望向优秀的人学习

前言

机器学习指计算机通过观察环境,与环境交互,在吸取信息中学习、自我更 新和进步。进阶之路:《线性代数》 《统计学习方法》《机器学习》《模式识别》《深度学习》

特征工程

“巧妇难为无米之炊”,数据和特征便是米,模型和算法便是巧妇。
特征工程是对原始数据进行一系列的工程处理,将其提炼为特征,作为输入给算法模型使用。

1、特征归一化

目的:消除数据特征之间的量纲影响,使得不同指标之间处于同一数值量级,具有可比性。比如身高1.6-1.8m,体重50-100kg。
方法
(1)线性函数归一化(Min-Max Scaling):对原始数据进行线性变换,使结果映射在[0,1]范围,实现对原始数据的等比缩放。
百面机器学习之特征工程 - Blog1
其中X为原始数据,Xmax、Xmin分别为数据最大值和最小值。

(2)零均值归一化(Z-Score Normalization):它会将原始数据映射到均值为 0、标准差为1的分布上。假设原始特征的均值为μ、标准差为σ,那么 归一化公式定义为:
百面机器学习之特征工程 - Blog1
应用场景:通过梯度下降求解的模型通常需要归一化,包括线性回归、逻辑回归、支持向量机、神经网络等模 型。但对于决策树模型则并不适用,以C4.5为例,决策树在进行节点分裂时主要 依据数据集D关于特征x的信息增益比,而信息增益比跟特征 是否经过归一化是无关的,因为归一化并不会改变样本在特征x上的信息增益。

2、类别型特征

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

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

■ 独热编码 独热编码通常用于处理类别间不具有大小关系的特征。例如血型,一共有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)使用稀疏向量来节省空间。在独热编码下,特征向量只有某一维取值为 1,其他位置取值均为0。
(2)配合特征选择来降低维度。高维度特征会带来几方面的问题。一是在K 近邻算法中,高维空间下两点之间的距离很难得到有效的衡量;二是在逻辑回归 模型中,参数的数量会随着维度的增高而增加,容易引起过拟合问题;三是通常 只有部分维度是对分类、预测有帮助,因此可以考虑配合特征选择来降低维度。

■ 二进制编码
二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后 将类别ID对应的二进制编码作为结果。以A、B、AB、O血型为例。A型血的ID为1,二进制表示为001;B型血的ID为2,二进制表示为 010;以此类推可以得到AB型血和O型血的二进制表示。可以看出,二进制编码本 质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,且维数少于独热编 码,节省了存储空间。

3、高维组合特征的处理

组合特征是将一阶离散特征两两组合,构成高阶组合特征。
百面机器学习之特征工程 - Blog1
广告点击预测问题中,w的维度是 2×2=4(语言取值为中文或英文两种、类型的取值为电影或电视剧两种)。但引入ID类型就会带来问题,若用户的数量为m、物品的数量为n,那么需要学习的参数的规模为m×n。方法是将用户和物品分别用k维的低维向量表示(k<<m,k<<n)–也即是等价于矩阵分解。

也即是利用降维来减少高维特征组合后需要学习的参数。

4、组合特征

百面机器学习之特征工程 - Blog1
方法
基于决策树的特征组合寻找方法
采用梯度提升决策树有效的构造决策树,主要思想是每次都在之前的构建的决策树的残差上构建下一棵决策树。

5、文本表示模型

文本是一类非结构化数据。
文本表示模型种类
■ 词袋模型和N-gram模型
最基础的文本表示模型是
词袋模型**。顾名思义,就是将每篇文章看成一袋子词,并忽略每个词出现的顺序。具体地说,就是将整段文本以词为单位切分开**, 然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。常用TF-IDF来计算权重公式 为
百面机器学习之特征工程 - Blog1
其中TF(t,d)为单词t在文档d中出现的频率IDF(t)是逆文档频率,用来衡量单词t对表达语义所起的重要性,表示为
百面机器学习之特征工程 - Blog1
如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此对权重做一定惩罚
通常,可以将连续出现的n个词(n≤N)组成的词组(N-gram)也作为一个单独的特征放到向量表示中去,构成N-gram模型。另外,同一个词可能有多种词性变化,却具有相似的含 义。在实际应用中,一般会对单词进行词干抽取(Word Stemming)处理,即将不 同词性的单词统一成为同一词干的形式。

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

■ 词嵌入与深度学习模型
核心思想:将每个词都映射成低维空间上的一个稠密向量。
深度学习模型正好为我们提供了一种自动地进行特征工程的方式,模型中 的每个隐层都可以认为对应着不同抽象层次的特征。卷积神经网络和循环神经网络的结构在文本表示中取得了很好的效果,主要是由于它们能够更好地对文本进行建模,抽取出一些高层的语义特征。

6、Word2Vec

Word2Vec实际 是一种浅层的神经网络模型,它有两种网络结构,分别是CBOW(Continues Bag of Words)和Skip-gram。
CBOW的目标是根据上下文出现的词语来预测当前词的生成概率;而Skip-gram是根据当前词来预测上下文中各词的生成概率。正好相反
百面机器学习之特征工程 - Blog1
其中w(t)是当前所关注的词,w(t−2)、w(t−1)、w(t+1)、w(t+2)是上下文中出现 的词。这里前后滑动窗口大小均设为2。

CBOW和Skip-gram都可以表示成由输入层(Input)、映射层(Projection)和 输出层(Output)组成的神经网络。

  • 输入层中的每个词由独热编码方式表示,即所有词均表示成一个N维向量,其中N为词汇表中单词的总数。在向量中,每个词都将与之对应的维度置为1,其余 维度的值均设为0。
  • 在映射层(又称隐含层)中,K个隐含单元(Hidden Units)的取值可以由N维 输入向量以及连接输入和隐含单元之间的N×K维权重矩阵计算得到。在CBOW 中,还需要将各个输入词所计算出的隐含单元求和。
  • 同理,输出层向量的值可以通过隐含层向量(K维),以及连接隐含层和输出 层之间的K×N维权重矩阵计算得到。输出层也是一个N维向量,每维与词汇表中的 一个单词相对应。最后,对输出层向量应用Softmax**函数,可以计算出每个单词的生成概率。
    百面机器学习之特征工程 - Blog1
    接下来的任务就是训练神经网络的权重,使得语料库中所有单词的整体生成 概率最大化。学习权重可以用反向传播算法实现,每 次迭代时将权重沿梯度更优的方向进行一小步更新。

Word2Vec和LDA区别和联系
联系 LDA是利用文档中单词的共现 系来对单词按主题聚类,也可以理解为对“文档-单词”矩阵进行分解,得到“文档- 主题”和“主题-单词”两个概率分布。而Word2Vec其实是对“上下文-单词”矩阵进行学习,其中上下文由周围的几个单词组成,由此得到的词向量表示更多地融入了上下文共现的特征。

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

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

在机器学习中,绝大部分模型都需要大量的数据进行训练和学习(包括有监 督学习和无监督学习),然而在实际应用中经常会遇到训练数据不足的问题。就需要更多先验信息

具体到图像分类任务上,训练数据不足带来的问题主要表现在过拟合方面;解决方法:

  • 基于模型的方法
    主要是采用降低过拟合风险的措施,包括简化模型(如将非线性模型简化为线性模型、添加约束项以缩小假设空间(如L1/L2正则项)、集成学习、Dropout超参数等;

  • 数据扩充
    根据一些先验知 识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。
    (1)一定程度内的随机旋转、平移、缩放、裁剪、填充、左右翻转等,这些 变换对应着同一个目标在不同角度的观察结果。
    (2)对图像中的像素添加噪声扰动,比如椒盐噪声、高斯白噪声等
    (3)颜色变换。
    (4)改变图像的亮度、清晰度、对比度、锐度等。

  • 上采样技术
    SMOTE算法

  • 对抗网络模型

  • 迁移学习
    对于大部分图像分类任务,并不需要从头开始训练模型,而是借用一 个在大规模数据集上预训练好的通用模型,并在针对目标任务的小数据集上进行 微调(fine-tune),这种微调操作就可以看成是一种简单的迁移学习。

参考《百面机器学习》