《百面机器学习》学习笔记:(一)特征工程

1. 特征归一化

为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。

1.1常用方法

(1) 线性函数归一化(Min-Max Scaling):对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。归一化公式如下: X n o r m = X − X m i n X m a x − X m i n X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}} Xnorm=XmaxXminXXmin
(2)零均值归一化(Z-Score Normalization):它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,归一化公式定义为: z = x − u σ z=\frac{x-u}{σ} z=σxu

1.2 为什么需要对数值型特征做归一化(梯度下降)

https://zhuanlan.zhihu.com/p/27627299
假设有两种数值型特征,x1的取值范围为 [0, 10],x2的取值范围为[0, 3],于是可以构造一个目标函数符合1.1(a)中的等值图。在学习速率相同的情况下,x1的更新速度会大于x2,需要较多的迭代才能找到最优解。如果将x1和x2归一化到相同的数值区间后,优化目标的等值图会变成图1.1(b)中的圆形,x1和x2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解。
在这里插入图片描述
当然,数据归一化并不是万能的。在实际应用中,通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但对于决策树模型 则并不适用,以C4.5为例,决策树在进行节点分裂时主要依据数据集D关于特征x的信息增益比,而信息增益比跟特征是否经过归一化是无关的,因为归一化并不会改变样本在特征x上的信息增益。

2. 类别型特征

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

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

2.1 序列编码

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

2.2 独热编码:高维度特征的问题

独热编码通常用于处理类别间不具有大小关系的特征。需要注意以下问题:
(1)使用稀疏向量来节省空间。在独热编码下,特征向量只有某一维取值为1,其他位置取值均为0。因此可以利用向量的稀疏表示有效地节省空间,并且目前大部分的算法均接受稀疏向量形式的输入。
(2)配合特征选择来降低维度。高维度特征会带来几方面的问题:一是在K近邻算法中,高维空间下两点之间的距离很难得到有效的衡量;二是在逻辑回归模型中,参数的数量会随着维度的增高而增加,容易引起过拟合问题;三是通常只有部分维度是对分类、预测有帮助,因此可以考虑配合特征选择来降低维度。

2.3 二进制编码

二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果

3. 高维组合特征的处理

3.1 什么是组合特征?如何处理高维组合特征?

为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。假设数据的特征向量为 X = ( x 1 , x 2 , . . . , x k ) X=(x_1,x_2,...,x_k) X=(x1,x2,...,xk),则有 Y = s i g m o i d ( ∑ i ∑ j w i j &lt; x i , x j &gt; ) Y=sigmoid(\sum_i\sum_jw_{ij}&lt;x_i,x_j&gt;) Y=sigmoid(ijwij<xi,xj>) 其中 &lt; x i , x j &gt; &lt;x_i,x_j&gt; <xi,xj>表示xi和xj的组合特征,wij的维度等于|xi|·|xj|,|xi|和|xj|分别代表第i个特征和第j个特征不同取值的个数

3.2 如何处理高维组合特征?

若用户的数量为m、物品的数量为n,那么需要学习的参数的规模为m×n。在互联网环境下,用户数量和物品数量都可以达到千万量级,几乎无法学习m×n规模的参数。在这种情况下,一种行之有效的方法是将特征分别用k维的低维向量表示(k<<m,k<<n),需要学习的参数的规模变为m×k+n×k,等价于 矩阵分解 https://zhuanlan.zhihu.com/p/52890135

4. 组合特征

上一节介绍了如何利用降维方法来减少两个高维特征组合后需要学习的参数。但是在很多实际问题中,我们常常需要面对多种高维特征。如果简单地两两组合,依然容易存在参数过多、过拟合等问题,而且并不是所有的特征组合都是有意义的。因此,需要一种有效的方法来帮助我们找到应该对哪些特征进行组合。

4.1 怎样有效地找到组合特征?

基于决策树的特征组合寻找方法???
给定原始输入该如何有效地构造决策树?可以采用梯度提升决策树,该方法的思想是每次都在之前构建的决策树的残差上构建下一棵决策树。

5. 文本表示模型

5.1 词袋模型和N-gram模型

将每篇文章看成一袋子词,并忽略每个词出现的顺序。具体地说,就是将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。常用TF-IDF来计算权重,公式为: T F − I D F ( t , d ) = T F ( t , d ) ∗ I D F ( t ) TF-IDF(t,d)=TF(t,d)*IDF(t) TFIDF(t,d)=TF(t,d)IDF(t)其中TF(t,d)为单词t在文档d中出现的频率,IDF(t)是逆文档频率,用来衡量单词t对表达语义所起的重要性,表示为: I D F ( t ) = l o g 文 章 总 数 包 含 单 词 t 的 文 章 总 数 + 1 IDF(t)=log\frac{文章总数}{包含单词t的文章总数+1} IDF(t)=logt+1如果一个单词在多个文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此对权重做一定惩罚。
缺点:

  1. 维度随着词表增大而增大,且向量高度稀疏。对高维稀疏矩阵进行分解:潜在语义分析(Latent semantic analysis, LSA)
  2. 无法处理“一义多词”和“一词多义”问题。对单词进行词干抽取(Word Stemming)处理,即将不同词性的单词统一成为同一词干的形式。
  3. 将文章进行单词级别的划分有时候并不是一种好的做法,比如英文中的natural language processing(自然语言处理)一词,如果 natural,language,processing这3个词拆分开来,所表达的含义与三个词连续出现时大相径庭。通常,可以将连续出现的n个词(n≤N)组成的词组(N-gram)也作为一个单独的特征放到向量表示中去,构成N-gram模型

5.2 主题模型

基于词袋模型或N-gram模型的文本表示模型有一个明显的缺陷,就是无法识别出两个不同的词或词组具有相同的主题。因此,需要一种技术能够将具有相同主题的词或词组映射到同一维度上去,于是产生了主题模型。主题模型是一种特殊的概率图模型。想象一下我们如何判定两个不同的词具有相同的主题呢?这两个词可能有更高的概率同时出现在同一篇文档中;换句话说,给定某一主题,这两个词的产生概率都是比较高的,而另一些不太相关的词汇产生的概率则是较低的。假设有K个主题,我们就把任意文章表示成一个K维的主题向量,其中向量的每一维代表一个主题,权重代表这篇文章属于这个特定主题的概率。主题模型所解决的事情,就是从文本库中发现有代表性的主题(得到每个主题上面词的分布),并且计算出每篇文章对应着哪些主题

5.2.1 LSA

LSA会构建一个文档与词项的共现矩阵,矩阵的元素一般通过TF-IDF计算得到,最终通过奇异值分解的方法对原始矩阵降维,可以得到文档向量词项向量
在这里插入图片描述
在这种情况下,A 中行表示每篇文档,列表示每个术语在不同文章中的tf-idf值, U ∈ R m ⨉ t U∈ℝ^{m⨉t} URmt 是我们的文档-主题矩阵,而 V ∈ R n ⨉ t V∈ℝ^{n⨉t} VRnt 则成为我们的术语-主题矩阵。在矩阵 U ,每一列对应于我们 t 个主题当中的一个,行表示按主题表达的文档向量;在 V 中,列代表按主题表达的术语向量,每一行对应于t 个主题当中的一个。
缺点:

  1. 以上过程通过矩阵分解得到,空间中维度的物理含义不明确,无法解释
  2. 需要大量的文件和词汇来获得准确的结果
  3. 表征效率低

5.2.2 pLSA

pLSA,即概率潜在语义分析,采取概率方法替代LSA中的 SVD 以解决问题。pLSA是用一个生成模型来建模文章的生成过程。假设有K个主题,M篇文章;对语料库中的任意文章d,假设该文章有N个词,则对于其中的每一个词,我们首先选择一个主题z,然后在当前主题的基础上生成一个词w。

  • 给定文档 d,主题 z 以 P(z|d) 的概率出现在该文档中
  • 给定主题 z,单词 w 以 P(w|z) 的概率从主题 z 中提取出来
    在这里插入图片描述
    给定文章d,生成词w的概率可以写成: p ( w ∣ d ) = ∑ z p ( w ∣ z ) p ( z ∣ d ) p(w|d)=\sum_zp(w|z)p(z|d) p(wd)=zp(wz)p(zd) 给定的文档和单词同时出现的联合概率是: p ( w , d ) = p ( d ) ∑ z p ( w ∣ z ) p ( z ∣ d ) p(w,d)=p(d)\sum_zp(w|z)p(z|d) p(w,d)=p(d)zp(wz)p(zd) p(d) 可以直接由语料库确定,整个语料库中的文本生成概率可以用似然函数表示为: L = ∏ m M ∏ n N p ( d m , w n ) c ( d m , w n ) L=\prod_m^M\prod_n^Np(d_m,w_n)^{c(d_m,w_n)} L=mMnNp(dm,wn)c(dm,wn)其中 p ( d m , w n ) p(d_m,w_n) p(dm,wn) 是在第m篇文章 d m d_m dm中,出现单词 w n w_n wn 的概率; c ( d m , w n ) c(d_m,w_n) c(dm,wn) 是在第m篇文章 d m d_m dm中,单词 w n w_n wn 出现的次数,Log似然函数可以写成:
    在这里插入图片描述
    定义在文章上的主题分布 p ( z k ∣ d m ) p(z_k|d_m) p(zkdm) 和定义在主题上的词分布 p ( w n ∣ z k ) p(w_n|z_k) p(wnzk) 是待估计的参数。我们需要找到最优的参数,使得整个语料库的Log似然函数最大化。由于参数中包含的zk是隐含变量(即无法直接观测到的变量),因此无法用最大似然估计直接求解,可以利用最大期望算法来解决。
    上述参数化过程中,是从概率为 P(d) 的文档开始,然后用 P(z|d) 生成主题,最后用 P(w|z) 生成单词。现在我们从 P(z) 开始,再用 P(d|z) 和 P(w|z) 单独生成文档,则有:
    在这里插入图片描述
    可以发现 pLSA 模型和 LSA 模型之间存在一个直接的平行对应关系:主题 P(Z) 的概率对应于奇异主题概率的对角矩阵,给定主题 P(D|Z) 的文档概率对应于文档-主题矩阵 U,给定主题 P(W|Z) 的单词概率对应于术语-主题矩阵 V。尽管 pLSA 看起来与 LSA 差异很大、且处理问题的方法完全不同,但实际上 pLSA 只是在 LSA 的基础上添加了对主题和词汇的概率处理罢了。

缺点:

  1. 没有参数来给 P(D) 建模,所以不知道如何为新文档分配概率
  2. pLSA 的参数数量随着我们拥有的文档数线性增长,因此容易出现过度拟合问题

5.2.3 LDA???

LDA可以看作是pLSA的贝叶斯版本,其文本生成过程与pLSA基本相同,不同的是为主题分布和词分布分别加了两个狄利克雷(Dirichlet)先验。pLSA采用的是频率派思想,将每篇文章对应的主题分布p(zk|dm)和每个主题对应的词分布p(wn|zk)看成确定的未知常数,并可以求解出来;而LDA采用的是贝叶斯学派的思想,认为待估计的参数(主题分布和词分布)不再是一个固定的常数,而是服从一定分布的随机变量。这个分布符合一定的先验概率分布(即狄利克雷分布),并且在观察到样本信息之后,可以对先验分布进行修正,从而得到后验分布。
在这里插入图片描述
http://www.victoriawy.com/wp-content/uploads/2017/12/LDA数学八卦.pdf
https://www.jianshu.com/p/74ec7d5f6821
https://blog.csdn.net/u010417185/article/details/80833212
https://blog.csdn.net/selinda001/article/details/80446766
https://blog.csdn.net/liuy9803/article/details/81155379
https://zhuanlan.zhihu.com/p/37873878

5.3 语言模型

5.3.1 基于词向量的固定表征:NNLM、word2vec、fastText、glove

NNLM 及 word2vec:word2vec 原理及使用
fastText 及 GloVe:fastText与GloVe原理

5.3.2 基于词向量的动态表征:elmo、GPT、bert

5.4 各模型间的比较

各种词向量的特点

1)One-hot 表示 :维度灾难、语义鸿沟;
2)分布式表示 (distributed representation) :

  • 矩阵分解(LSA):利用全局语料特征,但SVD求解计算复杂度大;
  • 基于NNLM/RNNLM的词向量:词向量为副产物,存在效率不高等问题;
  • word2vec、fastText:优化效率高,但是基于局部语料;
  • glove:基于全局预料,结合了LSA和word2vec的优点;
  • elmo、GPT、bert:动态特征;

Word2Vec与LDA的区别和联系

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

word2vec和NNLM对比有什么区别?

1)其本质都可以看作是语言模型;
2)词向量只不过NNLM一个产物,word2vec虽然其本质也是语言模型,但是其专注于词向量本身,因此做了许多优化来提高计算效率:
与NNLM相比,词向量直接sum,不再拼接,并舍弃隐层;考虑到sofmax归一化需要遍历整个词汇表,采用hierarchical softmax 和negative sampling进行优化,hierarchical softmax 实质上生成一颗带权路径最小的哈夫曼树,让高频词搜索路劲变小;negative sampling更为直接,实质上对每一个样本中每一个词都进行负例采样;

word2vec和fastText对比有什么区别?(word2vec vs fastText)

1)都可以无监督学习词向量, fastText训练词向量时会考虑subword;
2) fastText还可以进行有监督学习进行文本分类,其主要特点:

  • 结构与CBOW类似,但学习目标是人工标注的分类结果;
  • 采用hierarchical softmax对输出的分类标签建立哈夫曼树,样本中标签多的类别被分配短的搜寻路径;
  • 引入N-gram,考虑词序特征;
  • 引入subword来处理长词,处理未登陆词问题;

glove和word2vec、 LSA对比有什么区别?(word2vec vs glove vs LSA)

1)glove vs LSA

  • LSA(Latent Semantic Analysis)可以基于co-occurance matrix构建词向量,实质上是基于全局语料采用SVD进行矩阵分解,然而SVD计算复杂度高;
  • glove可看作是对LSA一种优化的高效矩阵分解算法,采用Adagrad对最小平方损失进行优化;

2)word2vec vs glove

  • word2vec是局部语料库训练的,其特征提取是基于滑窗的;而glove的滑窗是为了构建co-occurance matrix,是基于全局语料的,可见glove需要事先统计共现概率;因此,word2vec可以进行在线学习,glove则需要统计固定语料信息。
  • word2vec是无监督学习,同样由于不需要人工标注;glove通常被认为是无监督学习,但实际上glove还是有label的,即共现次数 l o g ( X i j ) log(X_{ij}) log(Xij)
  • word2vec损失函数实质上是带权重的交叉熵,权重固定;glove的损失函数是最小平方损失函数,权重可以做映射变换。
  • 总体来看,glove可以被看作是更换了目标函数和权重函数的全局word2vec。

elmo、GPT、bert三者之间有什么区别?(elmo vs GPT vs bert)

之前介绍词向量均是静态的词向量,无法解决一次多义等问题。下面介绍三种elmo、GPT、bert词向量,它们都是基于语言模型的动态词向量。下面从几个方面对这三者进行对比:
在这里插入图片描述
1)特征提取器:

  • elmo采用LSTM进行提取,elmo采用1层静态向量+2层LSTM,多层提取能力有限
  • GPT和bert则采用Transformer进行提取。很多任务表明Transformer特征提取能力强于LSTM,而GPT和bert中的Transformer可采用多层,并行计算能力强。

2)单/双向语言模型:

  • GPT采用单向语言模型,elmo和bert采用双向语言模型。但是elmo实际上是两个单向语言模型(方向相反)的拼接,这种融合特征的能力比bert一体化融合特征方式弱。
  • GPT和bert都采用Transformer,Transformer是encoder-decoder结构,GPT的单向语言模型采用decoder部分,decoder的部分见到的都是不完整的句子;bert的双向语言模型则采用encoder部分,采用了完整句子。

参考:https://zhuanlan.zhihu.com/p/56382372

6. 数据不足时的处理方法

模型的信息来源:

  • 训练数据中蕴含的信息
  • 在模型的形成过程中(包括构造、学习、推理等),人们提供的先验信息。先验信息可以作用在模型上,例如让模型采用特定的内在结构、条件假设或添加其他一些约束条件;先验信息也可以直接施加在数据集上,即根据特定的先验假设去调整、变换或扩展训练数据,让其展现出更多的、更有用的信息,以利于后续模型的训练和学习。

训练数据不足带来的问题主要表现在过拟合方面,处理方法:

  • 基于模型的方法,主要是采用降低过拟合风险的措施,包括简化模型(如将非线性模型简化为线性模型)、添加约束项以缩小假设空间(如L1/L2正则项)、集成学习、Dropout超参数等
  • 基于数据的方法,主要通过数据扩充(Data Augmentation):
    • 根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果
    • 使用生成模型也可以合成一些新样本,例如当今非常流行的生成式对抗网络模型(图像)
    • 借助已有的其他模型或数据来进行迁移学习
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值