在实际应用中,通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但对于决策树模型则并不适用,以C4.5为例,决策树在进行节点分裂时主要依据数据集D关于特征x的信息增益比,而信息增益比跟特征是否经过归一化无关。
为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。注意,引入ID类型的特征时,由于用户数量m和物品数量n都可以达到千万量级,几乎无法学习规模的参数,这种情况下,一种行之有效的方法是将用户和物品分别用k维的低维向量表示(k<
在很多实际问题中,我们常常需要面对多种高维特征,如果简单的两两组合,依然容易存在参数过多、过拟合等问题,而且并不是所有的特征组合都是有意义的。因此,需要一种有效的方法来帮助我们找到应该对哪些特征进行组合。
一种基于决策树的特征组合寻找方法,根据原始输入和标签构造决策树,于是,每一条从根节点到叶节点的路径都可以看成一种特征组合的方式。
给定原始输入该如何有效构造决策树?可以采用梯度提升决策树,该方法的思想是每次都在之前构造的决策树的残差上构建下一棵决策树。
知识点:词袋模型Bag of Words, TF-IDF(Term Frequency-Inverse Document Frequency), 主题模型(Topic Model), 词嵌入模型(Word Embedding)
最基础的文本表示模型,顾名思义,就是将每篇文章看成一袋子词,并忽略每个词出现的顺序。具体的说,就是将整段文本以词为单位切分开,然后每篇文章可以表示为一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。常用TF-IDF来计算权重,公式为:TF - IDF(t, d) = TF(t,d) x IDF(t) , 其中TF(t, d)为单词t在文档d中出现的频率,IDF(t)是逆文档频率,用来衡量单词t对表达语义所起的重要性,表示为(其中N表示文章总数,n表示包含单词t的文章总数),直观的解释是,如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此对权重做一些惩罚。
将文章进行单词级别的划分有时并不是一种好的做法,比如英文中的natural language processing一词,若将3个词拆分开来,所表达的含义与三个词连续出现时大相径庭。通常,可以将连续出现的n个词(n<=N)组成的词组(N-gram)也作为一个单独的特征放到向量表示中去,构成N-gram模型。另外,同一个词可能有多种词性变化,却具有相似的含义,在实际应用中一般会对单词进行词干抽取(Word Stemming)处理,即将不同词性的单词统一为同一词干的形式。
用于从文本库中发现有代表性的主题(得到每个主题上面词的分布特征),并且能够计算出每篇文章的主题分布。
词嵌入是一类将词向量化的模型的统称,核心思想是将每个单词都映射成低维空间(通常K=5~300维)上的一个稠密向量(Dense Vector)。K维空间的每一维也可以看作一个隐含的主题,只不过不像主题模型中的主题那样直观。
由于词嵌入将每个词映射成一个K维的向量,如果一篇文档有N个词,就可以用一个维的矩阵来表示这篇文档,但是这样的表示过于底层。在实际应用中,如果仅仅把这个矩阵作为原文本的表示特征输入到机器学习模型中,通常很难得到令人满意的结果。因此,还需要在此基础上加工出更高层的特征。传统机器学习模型中,一个好的特征工程往往可以带来算法效果的显著提升。而深度学习模型正好为我们提供了一种自动进行特征工程的方式,模型中的每个隐层都可以认为对应着不同抽象层次的特征。卷积神经网络和循环神经网络的结构在文本表示中取得了很好的效果,主要是由于它们能够更好的对文本进行建模,抽取一些高层的语义特征。与全连接的网络结构相比,卷积神经网络和循环神经网络一方面很好的抓住了文本的特性,另一方面又减少了网络中待学习的参数,提高了训练速度,并且降低了拟合风险。
谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一。Word2Vec实际是一种浅层的神经网络模型,它有两种网络结构,分别是CBOW(Continues Bag of Words)和Skip-gram。
知识点:Word2Vec,隐迪利克雷模型(LDA),CBOW,Skip-gram
CBOW的目标是根据上下文出现的词语来预测当前词的生成概率,而Skip-gram是根据当前词来预测上下文中各词的生成概率。CBOW和Skip-gram都可以表示成由输入层(Input)、映射层(Projection)和输出层(Output)组成的神经网络。
输入层中的每个词由独热编码方式表示,即所有词均表示成一个N维向量,其中N是词汇表中单词的总数。在向量中,每个词都将与之对应的维度置为1,其余维度的值均设为0.
在映射层(又称隐含层)中,K个隐含单元的取值由N维输入向量以及连接输入和隐含单元之间的NxK维权重矩阵计算得到。在CBOW中,还需要将各个输入词所计算出的隐含单元求和。
同理,输出层向量的值可以通过隐含层向量(K维),以及连接隐含层和输出层之间的KxN维权重矩阵计算得到。输出层也是一个N维向量,每维与词汇表中的一个单词相对应。最后,对输出层向量应用Softmax激活函数,可以计算出每个单词的生成概率。
接下来的任务就是训练神经网络的权重,使得语料库中所有单词的整体生成概率最大化。从输入层到隐含层需要一个维度为NxK的权重矩阵,从隐含层到输出层需要一个维度为KxN的权重矩阵,学习权重可以用反向传播算法实现,每次迭代时将权重沿梯度更优的方向进行一小步更新。但是由于Softmax激活函数中存在归一化项的缘故,推倒出来的迭代公式需要对词汇表中所有单词进行遍历,使得每次迭代过程非常缓慢,由此产生了Hierarchical Softmax和Negative Sampling两种改进方法,训练得到维度为NxK和KxN的两个权重矩阵之后,可以选一个作为N个词的K维向量表示。
谈到Word2Vec与LDA的区别和联系。首先,LDA是利用文档中单词的共线关系来对单词按主题聚类,也可以理解为对“文档-单词”矩阵进行分解,得到“文档-主题”和“主题-单词”两个概率分布。而Word2Vec其实是对“上下文-单词”矩阵进行学习,其中上下文由周围几个单词组成,由此得到的词向量表示更多的融入了上下文共现的特征。也就是说,如果两个单词所对应的Word2Vec向量相似度较高,那么它们很可能经常在同样的上下文中出现。主题模型通过一定的结构调整可以基于“上下文-单词”矩阵进行主题推理,同样的,词嵌入方法也可以根据“文档-单词”矩阵学习出词的隐含向量表示。主题模型和词嵌入两类方法最大的不同其实在于模型本身,主题模型是一种基于概率图模型的生成式模型,其似然函数可以写成若干条件概率连乘的形式,其中包括需要推测的隐含变量(即主题);而词嵌入模型一般表达为神经网络的形式,似然函数定义在网络的输出之上,需要通过学习网络的权重以得到单词的稠密向量表示。
知识点:迁移学习,生成对抗网络,图像处理,上采样技术,数据扩充
一个模型所能提供的信息一般来自于两个方面,一是训练数据中蕴含的信息,二是在模型的形成过程中(包括构造、学习、推理等),人们提供的先验信息。
当训练数据不足时,说明模型从原始数据中获取的信息比较少,这种情况下想要保证模型的效果,就需要更多的先验信息。先验信息可以作用在模型上,例如让模型采用特定的内在结构、条件假设或添加其他约束条件;先验信息也可以直接施加在数据集上,即根据特定的先验假设去调整、变换或扩展训练数据,让其展现更多有用的信息。
训练数据不足带来的问题主要表现在过拟合方面,对应的处理方法大致分为两类,一是基于模型的方法,主要是采用降低过拟合风险的措施,包括简化模型(如将非线性模型转化为线性模型)、添加约束项以缩小假设空间(如L1/L2正则项)、集成学习、Dropout超参数等;二是基于数据的方法,主要通过数据扩充,即根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当的变换以达到扩充数据集的效果,比如,在一定程度内随机旋转、平移、缩放、剪裁、填充、翻转等,添加噪声扰动,颜色变换,改变图像的亮度、清晰度、对比度、锐度等,还可以对图像进行特征提取,然后再图像的特征空间内进行变换,利用一些通用的数据扩充或上采样技术如SMOTE算法,使用生成模型也可以合成一些新样本,此外,借助已有的其他模型或数据来进行迁移学习在深度学习中也非常常见。