1. 介绍
特征工程是对原始数据进行一系列工程处理,将其提炼为特征,作为输入。是一个表示和展示数据的过程,特征工程去除原始数据中的杂质和冗余,设计更高效的特征来寻找问题与模型之间的关系。
2. 常见数据类型
- 结构化数据,可以看作关系型数据库的一张表,每列都有清晰的定义,包括数值型和类别型。
- 非结构化数据,主要包括文本、图像、音频、视频等数据,包含的信息无法用一个数值表示,也没有清晰的类别定义,每条样本数据大小不相同。
3. 特征归一化
为了消除数据特征之间的量级影响,需要进行特征归一化处理,使各特征指标处于同一量级。对数值类型的特征做归一化可以将所有特征统一到一个大致相同的数值区间。 最常用的方法主要有以下两种:
- 线性函数归一化(Min-Max Scaling):对原始数据进行线性变换,是结果映射到[0,1]之间,实现等比缩放。
- 零均值归一化(Z-Score Normalization): 将原始数据映射到均值为0、标准差为1的分布上。假设原始特征的均值为 、标准差为 , 那么归一化公式为:
通过梯度下降求解的模型通常需要归一化,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但是对于决策树并不适用,比如C4.5,决策树在进行节点分裂时,主要依据数据集关于特征的信息增益比,而信息增益比跟特征是否经过归一化无关,因为归一化并不会改变样本在特征上的信息增益。
4. 类别型特征
类别型特征主要是指性别、星座这种有限选项内取值的特征。原始输入通常是字符串,除了决策树等少数模型能直接处理字符串输入,像逻辑回归、SVM等模型,类别型特征必须转化成数值型才能正确工作。在对数据预处理时,处理类别型特征主要有三种方法:序号编码,独热编码,二进制编码。
- 序号编码(Ordinal):处理类别间有大小关系的数据,按照大小关系对特征赋予一个数值ID,例如大为2、小为1。
- 独热编码(One-hot):处理类别间没有大小关系的特征。例如血型(A,B,AB,O),独热编码会把血型变成一个4维的稀疏向量,(1,0,0,0), (0,1,0,0), (0,0,1,0), (0,0,0,1)。对于类别取值较多的情况需要注意:1. 使用稀疏向量来节省空间。2. 配合特征选择来降维。高维度特征会带来一些问题,K近邻中,高维空间两点的距离很难衡量;逻辑回归中,参数的数量会随维度增高而增加,容易过拟合;通常只有部分维度对分类、预测有帮助。
- 二进制编码(Binary): 先用序号给每个类别赋予一个ID,然后将ID的二进制编码作为结果。对于血型的例子,使用二进制编码,因为只有4各类型,所以转成二进制,只需要转成3维稀疏向量即可。通过二进制编码,维数小于独热编码,节省了存储空间。
5. 高维组合特征的处理
组合特征:为了提高复杂关系的拟合能力,在特征工程中,经常会把一阶离散特征两两组合,组成高阶组合特征。
以逻辑回归为例,假设数据的特征向量为 ,则有
其中表示 和 的组合特征, 的维度等于, 和分别代表第 个特征和第 个特征不同的取值个数。例如 ,, 则 的维度为。这种特征组合看起来没什么问题,但是当引入一些具有标识性的特征(比如ID)时,就会出现参数太多的问题。比如说在推荐系统中,用户的数量为, 物品的数量为, 那么需要学习的参数为个。当用户和物品数量到达百万级、千万级时,这种规模的参数是无法学习的。在这种情况下,可以进行降维处理。将用户和物品分别用 维的低维向量表示。其中 。所以上面公式中的 , 其中 ,分别表示 对应的低维向量。现在需要学习的参数规模就变成。在推荐算法中,这就等价于矩阵分解,这里的低维向量可以看出矩阵分解时的隐含变量。
6. 文本表示模型
-
词袋模型和N-gram模型
词袋模型是最基础的文本表示模型。将每篇文章看成一袋子词,并且忽略每个词出现的顺序。具体来说,就是将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,该维所对应的权重反映了这个词在原文章中的重要程度。通常用TF-IDF来计算权重。
其中是单词 在文档 中出现的频率, 是逆文档频率,用来衡量单词 对表达语义所起的重要性。
直观的解释,如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的单词,对于区分文章是否有特殊语义的贡献较少,因此对权重做一定的惩罚。
但是很多单词组合起来的意思和这些单词单独出现时表示的意思差距很大,通常可以将连续出现的 个单词合成词组(N-gram),将词组也作为一个单独的特征放到向量表示中去。在实际中,一般会对单词进行词干抽取(Word Stemming)处理,即将不同词性的单词统一成一个词干的形式。
-
主题模型
主题模型用于从文本库中发现有代表性的主题(得到每个主题上面单词的分布特点),并且计算出每篇文章的主题分布。
-
词嵌入
词嵌入是将单词向量化的模型的统称。核心思想是将每个词都映射成低维空间上的一个稠密向量(Dense),K维空间的每一维也可以看作一个隐含的主题。
7. Word2Vec
word2Vec是目前常用的词嵌入模型之一,实际上是一种浅层的神经网络模型,有两种网络结构,分别是CBOW(Continues Bag of Words)和Skip-gram。
COBW的目标是根据上下文出现的词语来预测当前词的生成概率。而Skip-gram是根据当前词来预测上下文中各词的生成频率。
其中 是当前所关注的词, 是上下文出现的词。这里前后滑动窗口大小(上下文取值)均为2。
CBOW和Skip-gram都可以看成由输入层(Input),映射层(Projection),输出层(Output)组成的神经网络。
输入层中的每个词由独热编码方式表示,即所有词均表示成一个N维向量,其中N为词汇表中单词的总数。在向量中,每个词都将与之对应的维度置为1,其余维度均为0.
在映射层中,K个隐含单元的取值可以由N维输入向量以及连接输入和隐含单元之间的 维权重矩阵计算得到。在CBOW中还需将各个输入词所计算出的隐含单元求和。同样,输出层的值也可以这样得到。输出层也是一个N维向量,每维与词汇表中的一个单词相对应。最后,通过Softmax激活函数,可以计算出每个词的生成频率。Softmax函数定义如下:
其中 代表N维的原始输出向量, 为在原始输出向量中,与单词 所对应维度的取值。
8. 图像数据不足时的处理方法
一个模型所能提供的信息一般来源于两个方面,一是训练数据中蕴含的信息,二是在模型的形成过程中,人们提供的先验信息。当训练数据不足时,说明原始数据中能获取的信息较少,所以就需要更多的先验信息。先验信息可以添加在模型上,也可以添加在数据集中。
具体到图像上,训练数据不足带来的问题主要表现在过拟合方面。处理方法大致可以分两类,一是基于模型的方法,比如简化模型,添加正则约束,集成学习,Dropout等;二是基于数据的方法,比如数据增强。在保持图像类别不变的前提下,对图像进行变换,旋转、平移、缩放、添加噪声、颜色变换、改变图像亮度、清晰度等等。也可以对图像进行特征提取,或者使用生成模型合成新样本。再就是借助其他模型或数据进行迁移学习,进行fine-tune等等。
参考资料
《百面机器学习》