为什么需要对数值类型的特征做归一化
对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间。常用方法有两种。
- 线性函数归一化(MIN_MIN Scaling)。它对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比缩放。归一化公式如下
其中为原始数据,
分别为数据最大值和最小值。
- 零均值归一化(Z-Score Normalization)。它会将原始数据映射到均值为0、标准差为1的分布上。具体上说,假设原始特征的均值为
,标准差
,那么归一化的公式定义为
以梯度下降法为例,假设的取之范围为[0,10],
的取值范围为[0,3],构建目标函数如图(a)所示,在相同学习速率下,
的更新速度大于
,需要迭代多次。如果归一化到相同的数值区间,就如图(b)所示,更新速率一致。

在实际应用中,通过梯度下降法求解的模型通常需要归一化的,如线性回归、逻辑回归、支持向量机、神经网络等模型。但对于决策树模型则并不适用,以C4.5为例,决策树在进行节点分裂时主要依据数据集关于特征
的信息增益比,而信息增益比跟特征是否经过归一化是无关的。
类别型特征
- 序号编码
序号编码通常用于处理类别间具有大小关系的数据。例如成绩,低、中、高->1,2,3
- 独热编码通常用于处理类别间不具备大小关系的特征。例如血型(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,其他位置取值均为0。因此可以利用向量的稀疏表示有效地节省空间,并且目前大部分的算法均接受稀疏向量形式的输入。
- 配合特征选择来降低纬度。高纬度特征会带来几方面的问题。一是在K近邻算法中,高纬空间下两点之间的距离很难得到有效的衡量;二是在逻辑回归模型中,参数的数量会随着维度的增高而增加,容易引起拟合问题;三是通常只有部分维度是对分类、预测有帮助,因此可以考虑配合特征选择来降低维度。
- 二进制编码先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果
高纬组合特征的处理
为了提高模型的复杂关系的拟合能力,在特征工程中经常会把一级离散特征两两组合,构成高阶组合特征。
| 是否点击 | 语言 | 类型 |
|---|---|---|
| 0 | 中文 | 电影 |
| 1 | 英文 | 电影 |
| 1 | 中文 | 电视剧 |
| 0 | 英文 | 电视剧 |
| 是否点击 | 语言=中文 类型=电影 |
语言=英文 类型=电影 |
语言=中文 类型=电视剧 |
语言=英文 类型=电视剧 |
|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 | 1 |
以逻辑回归为例,假设数据的特征向量为,则有,
其中表示
的组合特征,
的维度等于
,
分别代表第
个特征和第
个特征不同取值的个数。
组合特征
一种基于决策树的特征组合寻找方法,以点击预测问题为例,假设原始输入特征包括年龄、性别、用户类型(试用期、付费)、物品类型(护肤、食品等)4个方面的信息,并根据原始输入和标签(点击/未点击)构造处理决策树
文本表示模型
- 词袋模型和N-gram模型
最基础的文本表示模型是词袋模型。它将每篇文章看成一袋子词,并忽略每个词出现的顺序。详细地讲,就是将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反映这个词在原文章中的重要程度。常用TF-IDF计算权重,公式为
其中为单词
在文档
中出现的频率,
是逆文档频率,用来衡量单词
对表达语义所起到的重要性,表示为
直观的解释是,如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献比较小,因此对权重做一定惩罚。
将文章进行单词级别的划分有时候并不是一种好的做法,比如英文中的natural language processing(自然语言处理)一词,如果将其拆开,所表达的含义与三个词连续出现是大相径庭。通常,也可以将连续出现的n个词(n<=N)组成的词组(N-gram)也作为一个单独的特征放到向量表示去,构成N-gram模型。另外,同一个词可能有多种词性变化,却具有相似的含义。在实际应用中,一般会对单词进行词干抽取(Word Stemming)处理,即将不同词性的单词统一成为同一词干的形式。
- 主题模型
主题模型用于从文本库中发现有代表性的主题(得到每个主题上面词的分布特性),并且能够计算出每篇文章的主题分布。
- 词嵌入与深度学习模型
词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成低维空间(通常K=50~300维)上的一个稠密向量(Dense Vector)。K维空间的每一维也可以看作一个隐含的主题,只不过不像主题模型中的主题那样直观。
由于词嵌入将每个词映射成一个K维的向量,如果一篇文档有N个词,就可以用一个N×K维的矩阵来表示这篇文档,但是这样的表示过于底层。在实际应用中,如果仅仅把这个矩阵作为原文本的表示特征输入到机器学习模型中,通常很难得到令人满意的结果。因此,还需要在此基础之上加工出更高层的特征。在传统的浅层机器学习模型中,一个好的特征工程往往可以带来算法效果的显著提升。而深度学习模型正好为我们提供了一种自动地进行特征工程的方式,模型中的每个隐层“都可以认为对应着不同抽象层次的特征。从这个角度来讲,深度学习模型能够打败浅层模型也就顺理成章了。卷积神经网络和循环神经网络的结构在文本表示中取得了很好的效果,主要是由于它们能够更好地对文本进行建模,抽取出一些高层的语义特征。与全连接的网络结构相比,卷积神经网络和循环神经网络一方面很好地抓住了文本的特性,另一方面又减少了网络中待学习的参数,提高了训练速度,并且降低了过拟合的风险。
Word2Vec
Word2Vec实际是一种浅层的神经网络模型,它有两种网络结构,分别是CBOW(Continues Bag of Word)和Skip-gram。CBOW的目标是根据上下文出现的词语来预测当前词的生成概率;而Skip-garm是根据当前词来预测上下文中各词的生成概率。
其中是当前所关注的词,
是上下文中出现的词。这里前后滑动窗口大小均设为2.
输入层中的每个词都是由独热编码方式表示,即所有词均表示成一个N维向量,其中N为词汇表中单词的总数;映射层(隐含层)中,K哥隐含单元的取值可以由N维输入向量以及连接输入和隐含单元之间的N*K维权重矩阵计算得到;输出层向量的值可以通过隐含层向量(K维),以及以及连接隐含层和输出层之间的K×N维权重矩阵计算得到。输出层也是一个N维向量,每维与词汇表中的一个单词相对应。最后,对输出层向量应用Softmax激活函数,可以计算出每个单词的生成概率。Softmax激活函数的定义为
其中代表
维的原始输出向量,
为在原始输出向量中,与单词
所对应维度的取值。
训练神经网络的权重,使得语料库中所有单词的整体生成概率最大化。从输入层到隐含层需要一个维度为的权重矩阵,从隐含层到输出层又需要一个维度为
的权重矩阵,学习权重可以用反向传播算法实现,每次迭代时将权重梯度更优的方向进行一小步更新。
Word2Vec与LDA的区别和联系,首先,LDA是利用文档中单词的共现关系对单词按主题聚类,也可以理解为对“文档-单词”矩阵进行分解,得到“文档-主题”和“主题-单词”两个概率分布。而word2Vec其实是对“上下文-单词”矩阵进行学习,其中上下文由周围的几个单词组成,由此得到的词向量表示更多地融入来上下文共现的特征。
主题模型通过一定的结构调整可以基于“上下文-单词”矩阵进行主题推理。同样地,词嵌入方法也可以根据“文档-单词”矩阵学习出词的隐含向量表示。主题模型和词嵌入两类方法最大的不同其实在于模型本身,主题模型是一种基于概率图模型的生成式模型,其似然函数可以写成若干条件“概率连乘的形式,其中包括需要推测的隐含变量(即主题);而词嵌入模型一般表达为神经网络的形式,似然函数定义在网络的输出之上,需要通过学习网络的权重以得到单词的稠密向量表示。
图像数据不足时的处理方法
问题:在图像分类任务中,训练数据不足会带来什么问题?如何缓解数据量不足带来的问题?
解答:一个模型所能提供的信息一般来源于两个方面,一是训练数据中蕴含的信息;二是在模型的形成过程中(包括构造、学习、推理等),人们提供的先验信息。对应处理的方法大致分为两类,一是基于模型的方法,主要是采用降低过你和风险的措施,包括简化模型(如将非线性模型简化为线性模型)、添加约束项以缩小假设空间(如L1/L2正则项)、集成学习、Dropout超参数;二是基于数据的方法,主要通过数据扩充(Data Augmentation),即根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。
- 一定程度内的随机旋转、平移、缩放、裁剪、填充、左右翻转等,这些变换对应着同一个目标在不同角度的观察结果。
- 对图像中的像素添加噪声扰动,比如椒盐噪声、高斯白噪声等
- 颜色变换。例如,在图像的RGB颜色空间上进行主成分分析,得到3哥主成分的特征向量
及其对应的特征
,然后在每个像素的RGB值上添加增量
,其中
是均值为0,方差较小的高斯分布随机数。
- 改变图像的亮度、清晰度、对比度、锐度等。
