本文是在学习《百面机器学习 算法工程师带你去面试》过程中的学习笔记,将面试问题进行记录以方便查阅,根据目录分成系列。持续更新中…
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ceb3d6b82268995c0f93db3e9c849f9f.png)
一、特征工程
机器学习中常用的两种数据类型:
- 结构化数据:数据特征都可以表示在一张excel表里,每一列都有清晰的定义,每一行代表一个样本信息。
- 非结构化数据:文本、视频、音频、图像等数据。
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=Xmax−XminX−Xmin
-
零均值归一化 Z-Score Normalization:将原始数据映射到均值0,标准差为1的分布上
z = x − μ σ z=\frac{x-\mu}{\sigma} z=σx−μ
通过梯度下降法求解的模型是需要归一化的,如线性回归、逻辑回归、支持向量机、神经网络等。但对于决策树模型并不适用,以C4.5为例,决策树在进行节点分裂时主要依据数据集D关于特征x的信息增益比,信息增益比与也正是否归一化无关。
2. 类别型特征:
在有限选项内取值的特征,如性别(男女)、血型(A,AB,B,O)。类别型特征通常是字符串类型,决策树等少量模型可以直接处理字符串形式输入,大多数模型需要转换成数值型特征才能正确工作。
对类别型特征进行预处理使其变成数值型特征,常用预处理方式也叫编码方式:
-
序号编码:对于类别间有大小关系的数据。如“高,中,低”三类,可以编码为“3,2,1”,序号编码保留了大小关系。
-
独热编码:类别间不具有大小关系的数据。如血型(A,B,AB,O),每一个类别变成一个四维的稀疏向量,如A型:(1,0,0,0),B型:(0,1,0,0),AB型:(0,0,1,0),O型(0,0,0,1)。
注意:如果类别值较多,那表示每一类的向量维度会很大,在存储时也会造成空间的浪费。所以可以使用稀疏向量表示:假设 v = [ 0 , 0 , 0 , 1 , 0 , 0 , 1 ] v=[0,0,0,1,0,0,1] v=[0,0,0,1,0,0,1] 稀疏向量表示为 ( 7 , [ 3 , 6 ] , [ 1 , 1 ] ) (7,[3,6],[1,1]) (7,[3,6],[1,1]) ,7代表长度,[3,6]代表非零元素下标,[1,1]代表非零元素的值。并且可以配合特征选择来降低维度,对分类、预测没有帮助的特征去掉。
-
二进制编码:如血型(A,B,AB,O),先用序号给每个类别一个ID,A:1,B:2,AB:3,O:4,再将ID用二进制表示:
类别 ID 二进制表示 A 1 0 0 1 B 2 0 1 0 AB 3 0 1 1 O 4 1 0 0 维数比独热编码少,存储空间更小。
3. 高维组合特征的处理:
为提高复杂关系的拟合能力,在特征工程中将一阶离散特征两两组合,构成高阶组合特征。如广告点击预估问题:广告类型有电影和电视剧两种,语言类型有中文和英文两种,那组合特征就表示为中文电影、英文电影、中文电视剧、英文电视剧四种。
随着原始数据特征维数的增多,组合特征的维数会更加快速增长。处理高维的组合特征一个有效的方式为:将原始特征使用低维向量表示(矩阵分解的思路)。(目前这里还不大清楚,后面看到数据降维的时候返回来再解释一下)
4. 组合特征:
上面介绍了将离散特征两两组合来提高复杂关系的拟合能力,也介绍了降维的方法来减少参数量。但是当原始数据特征特别多的时候,就需要我们辨别一下哪些特征组合是有意义的。其中一种方式是基于决策树的特征组合寻找方法。如何根据原始数据有效的构造决策树?可以采用梯度提升决策树(后续再来进行解释)。
5. 文本表示模型:
文本是非结构化的数据,表示文本数据是机器学习领域的一个重点研究方向。常用方式有:
-
词袋模型:将文本以单词为单位切分开,每一维代表一个单词,文本就表示成了一个长向量。每一维有一个对应权重,表示这个词在文章中的重要程度,常用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) TF−IDF(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)=log包含单词t的文章总数+1文章总数
可以理解为,如果t在很多文章中都出现了,那它可能是比较通用的词汇,对区分语义贡献较小,对其权重进行惩罚。
-
N-gram:词袋模型将每个单词进行划分,但对于”natural language processing”这样的词汇拆分开来与我们期望获取的语义信息大相径庭。所以采取将连续出现的n个词组成的词组作为一个单独的特征放在向量表示中,就构成了N-gram模型。对于同一个词,其词性的变化做词干抽取(Word Stemming)处理。
-
主题模型:从文本库中发现有代表性的主题(得到每个主题上面词的分布特性),并且计算出每篇文章的主题分布。(后面会进行详细介绍)
-
词嵌入与深度学习模型:词嵌入是将词向量化的模型的统称,核心思想是每个词都映射成低维空间(通常K=50~300)上的一个稠密向量。K维空间中的每一维可以看作一个隐含的主题。假设一篇文章有N个词,每个词映射成了K维向量,用矩阵N*K来表示这篇文章太过于底层,很难得到满意的效果。所以利用深度学习模型来提取高层特征。卷积神经网络和循环神经网络在文本表示中取得了很好的效果。
6. Word2Vec:暂时跳过
7. 图像数据不足时的处理方法:
以分类任务为例,训练数据不足会导致过拟合问题。解决办法:
- 一是基于模型的:简化模型、添加约束(如正则项)、集成学习、Dropout超参数等;
- 二是基于数据的:进行数据扩充,以图像为例如旋转、平移、裁剪、缩放;添加噪声扰动;颜色变换;改变亮度清晰度对比度等。除了在图像空间进行变换,还可以先提取图像特征,在特征空间进行变换。也可以使用生成模型生成一些样本。
- 三是可以借助迁移学习:在大规模数据集上 预训练好通用的模型,针对目标任务的小数据集上进行微调(fine-tune)。
下一章传送门:百面机器学习–机器学习面试问题系列(二)模型评估