【百面机器学习】笔记:特征工程

目录

特征归一化

问题:为什么需要对数值类型的特征做归一化?

类别型特征

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

高维组合特征的处理

问题:什么是组合特征? 如何处理高维组合特征?

组合特征

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

文本表示模型

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

Word2Vec

问题:Word2Vec是如何工作的? 它和LDA有什么区别与联系?

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

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


特征归一化

问题:为什么需要对数值类型的特征做归一化?

  • 对特征做归一化可以加速梯度下降的收敛速度。

假设有两个特征x_{1}x_{2}x_{1}是房屋的大小,取值在 0~2000 平方米,x_{2}是房间的数量,取值在 1~5 间。若以x_{1}的参数\theta _{1}为横轴,x_{2}的参数\theta _{2}为纵轴,绘制代价函数的等高线图,那么图像会呈椭圆形(如下图左),梯度下降算法需要迭代很多次才能收敛。若将x_{1}x_{2}进行归一化,即将x_{1}x_{2}的取值范围缩放至 0~1,绘制代价函数的等高线图,那么图像会呈正圆形(如下图右),梯度下降算法可以更快收敛。

  • 并不是所有模型的输入都需要先进行归一化操作。

通常,使用梯度下降法求最优解的模型(线性回归、逻辑回归、支持向量机和神经网络等),是需要进行特征归一化的。而像决策树算法C4.5,在节点分裂时需要计算数据集 D 与特征 x 的信息增益比,但是无论特征归一化与否,信息增益比的计算结果都相同。

  • 特征归一化的常用方法:

线性函数归一化

X_{norm}=\frac{X-X_{min} }{X_{max}-X_{min} }

其中,X是原始数据,X_{max}X_{min}分别为数据的最大值和最小值。

零均值归一化

z=\frac{x-\mu }{\sigma }

其中,\mu是数据的均值,\sigma是数据的标准差。

类别型特征

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

  • 序号编码。序号编码通常用于处理具有大小关系的类别型特征。

例如:成绩由高到低可以分为“优”、“良”、“中”和“不及格”,使用序号编码后,“优”编码为3,“良”编码为2,“中”编码为1,“不及格”编码为0。

这样做既可以将类别型特征转换为数字型特征,方便模型输入,又不破坏类别间的大小关系。

但是,将成绩简单的编码为0、1、2、3,虽然保留了大小关系,可是它们之间的差值为1,并不一定能够很好的反映出特征之间的差异,需要具体数据具体分析。

  • 独热编码。独热编码通常用于处理不具有大小关系的类别型特征。当类别数量较多时,容易使特征空间变大,从而得到一个高维稀疏向量(只有一维为1,其余均为0)。

例如:血型分为“A”、“B”、“AB”和“O”,它们之间并不存在大小关系,所以使用序号编码并不合适。独热编码:

血型类别ID独热编码
A11000
B20100
AB30010
O40001

注意:

1.使用稀疏向量可以节省存储空间。目前,常用的算法一般情况下都接受稀疏向量作为输入。

2.使用特征选择可以降低维度。首先要知道,并不是所有的特征对于分类或预测的结果都有影响,而且特征对结果的影响也有大小的区别,所以特征选择就显得尤为重要。高维特征往往不能提高模型的效果,而且还会增加计算复杂度。例如:K近邻算法中,高维度中两点之间的距离很难得到衡量;逻辑回归中,参数的数量与特征的维数成正比,特征维数越大,参数越多,过拟合的风险也就越大。

  • 二进制编码。二进制编码的本质是使用二进制将数字 ID 进行哈希映射,优势是维数少于独热编码,可以节省存储空间。
血型类别ID二进制编码
A1001
B2010
AB3011
O4100

高维组合特征的处理

问题:什么是组合特征? 如何处理高维组合特征?

  • 组合特征:将一阶离散特征两两组合,构成高阶组合特征。这使得一些复杂的关系较容易拟合。

例如:点击率预估任务中,我们有“语言”和“类型”两个特征,以及“是否点击”的目标值。

语言类型是否点击
中文电影0
英文电影1
中文电视剧1
英文电视剧0

将其两两组合后,可以得到组合特征。

语言=中文;类型=电影语言=英文;类型=电影语言=中文;类型=电视剧语言=英文;类型=电视剧是否点击
10000
01001
00101
00010
  • 处理高维组合特征,以逻辑回归为例:

Y=Sigmoid\left ( \sum_{i}\sum_{j} w_{ij} \left \langle x_{i},x_{j} \right \rangle \right )

其中,\left \langle x_{i},x_{j} \right \rangle表示x_{i}x_{j}的组合特征。w_{ij}的维度为\left | x_{i} \right | \cdot \left | x_{j} \right |\left | x_{i} \right |\left | x_{j} \right |分别为特征x_{i}的取值个数和特征x_{j}的取值个数。在上述点击率预估任务中,“语言”和“类型”的组合特征对应的w_{ij}的维度为2\times 2=4

对于离散类型的特征而言,上述高维组合特征的处理过程没有任何问题,但是对于 ID 类型的特征,则会存在问题。

例如:物品推荐任务,我们有“用户id”和“物品id”两个特征,以及“是否点击”的目标值。

用户id物品id是否点击
110
211
.........
m11
121
220
.........
mn1

将其两两组合后,可以得到组合特征。

用户id=1;物品id=1用户id=2;物品id=1...用户id=m;物品id=1用户id=1;物品id=2用户id=2;物品id=2...用户id=m;物品id=n是否点击
10...000...00
01...000...01
...........................
00...100...01
00...010...01
00...001...00
...........................
00...000...11

当用户数量为 m,物品数量为 n 时,模型的需要学习的参数规模为m\times n,而一般情况下,用户数量和物品数量都很大,所以不能直接这样处理高维组合特征。此时,针对每一个用户和每一个物品,我们都可以使用 k 维的低维向量(k\ll m,k\ll n)来表示,然后:

Y=Sigmoid\left ( \sum_{i}\sum_{j} w_{ij} \left \langle x_{i}^{'} ,x_{j}^{'} \right \rangle \right )

其中\left \langle x_{i}^{'} ,x_{j}^{'} \right \rangle表示x_{i}^{'}x_{j}^{'}的组合特征,x_{i}^{'}x_{j}^{'}分别表示x_{i}x_{j}所对应的低维向量。w_{ij}的维度为m\times k+n\times k。这其实也就是推荐算法中经典的矩阵分解思想。

组合特征

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

  • 借助决策树算法来找到有效的组合特征。

例如:点击率预估任务,我们有“性别”、“年龄”、“用户类型”和“物品类别”四个特征,以及“是否点击”的目标值。使用原始特征以及目标值可以构造出一棵决策树:

根据构造出的决策树,我们可以得到下面的特征组合:

  1. “用户类型 = 付费用户”且“年龄 <= 40”;
  2. “用户类型 = 付费用户”且“物品类型 = 食品”;
  3. “年龄 <= 35”且“物品类型 = 护肤”;
  4. “年龄 <= 35”且“性别 = 女”。

若我们有两个数据如下所示:

性别年龄用户类型物品类型是否点击
28免费护肤1
36付费食品0

那么,根据上面得到的特征组合,我们可以得到编码后的向量:

用户类型=付费用户;年龄<=40用户类型=付费用户;物品类型=食品年龄<=35;物品类型=护肤年龄<=35;性别=女是否点击
00111
11000

文本表示模型

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

  • 词袋子模型

词袋子模型简单理解就是将每篇文章看作一袋子词,并且忽略词的出现顺序。换句话说,就是将文章按照词进行切分,然后每篇文章对应一个向量,向量中的每一维表示一个词,每个词的权重代表该词在文章中的重要程度。计算权重常用的方法是TF-IDF,公式为:

TF-IDF\left ( t,d \right ) =TF\left ( t,d \right ) \times IDF\left ( t \right )

其中TF\left ( t,d \right )是词 t 在文章 d 中出现的频率,IDF\left ( t \right )是词 t 的逆文档频率,即用于衡量词 t 对表达语义所起到的重要性,公式为:

 

IDF\left ( t \right )本质其实就是对权重的惩罚,若词 t 在许多文章中都出现,那 t 就是一个很普遍的词,并不会对表示文章的语义有较大贡献。

词袋子模型的缺点:

  1. 将文章按照单个词进行划分。比如“自然语言处理”,词袋子模型会划分为“自然”、“语言”和“处理”,但是这样划分所表达的语义与“自然语言处理”同时出现表达的语义会有较大的差异。
  2. 忽略词之间的顺序。比如“我欠你钱”和“你欠我钱”都是由“我”、“欠”、“你”和“钱”组成,由于不考虑词序,两句明显不同的话,经过词袋子模型后,表达的含义相同。
  • N-gram 模型

N-gram 模型与词袋子模型基本相同,区别仅在于 N-gram 模型会将连续出现的 N 个词组成的词组也作为单独的一个特征放到向量表示中去。

  • 主题模型

主题模型是从文本库中找到具有代表性的主题(得到每个主题中词的分布特性),并且计算每篇文章中主题的分布。

  • 词嵌入模型

词嵌入模型是一类将词向量化的模型的统称。词嵌入模型的核心思想是将每个词映射到低维空间(通常K=50~300维)中的稠密向量上。其中 K 维空间中的每一维可以视为一个隐含的主题,但是不像主题模型中的主题一样直观。

Word2Vec

问题:Word2Vec是如何工作的? 它和LDA有什么区别与联系?

  • Word2Vec 是一种浅层的神经网络模型,主要分为两种网络结构:CBOW 和 Skip-gram。

CBOW 利用上下文中的词来预测当前词的出现概率;Skip-gram 利用当前词来预测上下文中词的出现概率。

上图中,w\left ( t \right )是当前词,w\left ( t-2 \right ),w\left ( t-1 \right ),w\left ( t+1 \right ),w\left ( t+2 \right )是上下文中的词,这里默认滑动窗口的大小为 2。

输入层是由每个词的 N 维独热编码向量构成,其中的 N 是词汇表中词的总数,每一维表示一个词。

映射层(隐含层)会将输入层中的 N 维独热编码向量与一个N\times K的权重矩阵(嵌入矩阵)相乘得到 K 维的嵌入向量。在 CBOW 中还需要将上下文中词的 K 维向量进行求和操作。

输出层会将映射层中的 K 维隐含向量与一个K\times N的权重矩阵相乘得到 N 维的输出向量,该向量中的每一维就对应词汇表中的每一个词。我们可以使用 Softmax 激活函数将 N 维的输出向量归一化,归一化后的向量中的每一维就表示每个词的生成概率。Softmax 激活函数的表达式为:

P\left ( y=w_{n} \mid x \right ) = \frac{e^{x_{n} } }{\sum_{k=1}^{N} e^{x_{k} } }

其中,x是 N 维的输出向量,x_{n}是输出向量中,词w_{n}所对应维度的取值。

经过分析我们知道,目标是训练N\times KK\times N的两个权重矩阵,使得语料库中所有词的生成概率最大化。使用神经网络中常用的反向传播算法即可实现。

CBOW

  1. 滑动窗口大小为 m 的输入上下文,其独热编码为\left ( x_{c-m},\cdots ,x_{c-1},x_{c+1},\cdots ,x_{c+m} \right ),其中x_{i} \in R^{1\times N}表示词w_{i}的独热编码;
  2. 从嵌入矩阵V\in R^{N\times K}中获取每个词对应的嵌入向量:\left ( v_{c-m}=x_{c-m}V,\cdots ,v_{c-1}=x_{c-1}V,v_{c+1}=x_{c+1}V,\cdots ,v_{c+m}=x_{c+m}V \right ),其中v_{i} \in R^{1\times K}表示词w_{i}的嵌入向量;
  3. 嵌入向量求和:\hat{v} =\frac{v_{c-m}+\cdots +v_{c-1}+v_{c+1}+\cdots +v_{c+m} }{2m}
  4. 通过矩阵U\in R^{K\times N}得到输出向量:u=\hat{v}U,其中u \in R^{1\times N}
  5. 归一化:\hat{y}=Softmax\left ( u \right ),其中\hat{y} \in R^{1\times N}
  6. 我们希望最后输出的概率分布\hat{y}逐渐趋向于真实分布y,而y也就是我们所期望的真实词语的独热编码。

Skip-gram

  1. w_{c}的独热编码为x_{c} \in R^{1\times N}
  2. 从嵌入矩阵V\in R^{N\times K}中获取对应的嵌入向量v_{c} \in R^{1\times K}
  3. 通过矩阵U\in R^{K\times N}和公式u=v_{c}U得到输出向量:\left ( u_{c-m},\cdots ,u_{c-1},u_{c+1},\cdots ,u_{c+m} \right ),其中u_{i} \in R^{1\times N}
  4. 通过归一化公式\hat{y}=Softmax\left ( u \right )得到:\left ( \hat{y} _{c-m},\cdots ,\hat{y}_{c-1},\hat{y}_{c+1},\cdots ,\hat{y}_{c+m} \right ),其中\hat{y}_{i} \in R^{1\times N}
  5. 我们希望最后输出的概率分布\left ( \hat{y} _{c-m},\cdots ,\hat{y}_{c-1},\hat{y}_{c+1},\cdots ,\hat{y}_{c+m} \right )逐渐趋向于真实分布\left ( y _{c-m},\cdots ,y_{c-1},y_{c+1},\cdots ,y_{c+m} \right ),也就是我们真实输出结果的独热编码;

常见的优化手段:Hierarchical softmax 和 Negative sampling

在 Skip-gram 中,我们需要优化的损失函数(引入朴素贝叶斯假设将联合概率拆分成独立概率相乘):

\begin{align*} J &= -\log P\left ( w_{c-m},\cdots ,w_{c-1},w_{c+1},\cdots ,w_{c+m} \mid w_{c} \right ) \\ &= -\log \prod_{j=0;j\ne m}^{2m} P\left ( w_{c-m+j} \mid w_{c} \right ) \\ &= -\log \prod_{j=0;j\ne m}^{2m} P\left ( u_{c-m+j} \mid v_{c} \right ) \\ &= -\log \prod_{j=0;j\ne m}^{2m} \frac{\exp \left ( u_{c-m+j}^{T} v_{c} \right ) }{\sum_{k=1}^{N} \exp \left ( u_{k}^{T} v_{c} \right ) } \\ &= -\sum_{j=0;j\ne m}^{2m} u_{c-m+j}^{T} v_{c} + 2m \log \sum_{k=1}^{N} \exp \left ( u_{k}^{T} v_{c} \right ) \end{align*}

从上式中可以看到,我们需要对整个词汇表进行求和操作,计算复杂度为O\left ( N \right ),其中 N 为词汇表中词的数量。由于计算量太大,所以需要引入 Hierarchical softmax 或 Negative sampling 来降低计算复杂度。

Hierarchical softmax:分层 softmax,它并不是直接计算 softmax,而是通过构建一棵二叉树来将问题转换为\log N次二分类问题。Spark 中的 word2vec 的实现;

Negative sampling:负采样,不使用 softmax,而是从词汇表中进行 neg 次随机采样构成负样本,训练数据构成正样本,将多分类问题转换为 neg 个二分类问题。

  • Word2Vec 与 LDA 的区别:Word2Vec 是通过对“上下文-词”矩阵的学习来得到词向量的,而词向量更多的融入了上下文共现的特征。LDA 是利用文档中词的共现关系来对词按主题进行聚类,也就是对“文档-词”矩阵进行分解,得到“文档-主题”和“主题-词”两个概率分布。
  • 词嵌入与主题模型的联系:词嵌入可以通过“文档-词”矩阵来学习词的隐含向量表示。主题模型通过一定的结构调整,也可以利用“上下文-词”矩阵进行主题推理。
  • 词嵌入与主题模型的区别:词嵌入属于神经网络模型,其似然函数定义在网络的输出之上,需要通过学习网络权重来得到词的稠密向量表示。主题模型是基于概率图模型的生成式模型,其似然函数可以表示成若干条件概率的连乘,其中包含隐含变量(即主题)。

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

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

  • 一般情况下,模型的信息来源有两个:一是数据本身蕴涵的信息;二是模型形成(如构造、学习、推理)的时候,人为引入的先验信息。训练数据不足,也就是数据所能提供的信息不足,那就需要增加先验信息。而先验信息既可以作用在模型上,如使用某种特定的结构、条件假设或其他一些约束条件;也可以直接作用在数据集上,如使用某种特定的先验假设去调整、变换或扩展训练数据,让数据展现出更多更有用的信息,从而提供给模型进行训练和学习。
  • 对于图像分类任务,训练数据不足的主要表现为过拟合。过拟合就是模型在训练样本上的表现非常好,但是在测试数据上的表现却非常差。缓解过拟合现象可以从两方面入手:一是基于模型,采用一些降低过拟合现象的手段,如简化模型、Dropout、添加一些约束项来缩小假设空间(L1、L2正则化)或集成学习;二是基于数据,主要就是数据扩充(Data Augmentation),即使用一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据的作用。
  • 对于图像分类任务,数据(图像)扩充的手段如下:
    • 一定程度的随机翻转、平移、缩放、裁剪、填充或水平翻转等,这些变换对应同一目标在不同角度的观察结果;
    • 对图像中的像素添加随机扰动,如椒盐噪声、高斯白噪声等;
    • 颜色变换。如在图像的RGB三个颜色通道上进行主成分分析,得到特征向量p_{1},p_{2},p_{3}和对应的特征值\lambda _{1},\lambda _{2},\lambda _{3},然后在每个像素的RGB值上添加增量\left [ p_{1},p_{2},p_{3} \right ] \cdot \left [ \alpha _{1} \lambda _{1},\alpha _{2} \lambda _{2},\alpha _{3} \lambda _{3} \right ] ^{T},其中\alpha _{1},\alpha _{2},\alpha _{3}是均值为0,方差较小的高斯分布随机数;
    • 改变图像的亮度、锐度、清晰度或对比度等;
    • 不直接在图像空间上进行变换,而是对图像特征进行提取,然后在特征空间上进行变换,利用 SMOTE(Synthetic Minority Over-sampling Technique)算法进行数据扩充;
    • 使用生成对抗网络来生成新图像;
    • 使用一些开源的预训练模型来进行迁移学习。这些预训练模型都是利用大量数据训练而成,具有较强的特征提取能力,我们只需要使用自己的数据集在预训练模型上进行微调即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值