特征工程与模型评估

Posted by MaggicQ on December 18, 2018

本文目录

特征工程

特征工程,就是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。它旨在去除原始数据中的杂质和冗余,设计更高效的特征以刻画求解的问题与预测模型之间的关系。

两种常见的数据类型:

  • 结构化数据,可以将其看成关系型数据库的一张表,每列都有清晰的定义,包含数据型、类别型两种基本类型。
  • 非结构化数据,其包含的信息无法用一个简单的数值表示,比如文本、图像、音频、视频数据等。

为什么需要对数值类型的特征做归一化?

归一化有以下好处:

  1. 提升模型的收敛速度,假设两个特征的取值范围相差太大,在使用随机梯度下降对其进行优化时,取值范围比较大的特征需要较多的迭代才能找到最优解。
  2. 消除数据特征之间的量纲影响,使得不同的数值特征处于统一数量级,让各个特征对结果做出的贡献相同,以提高模型的精度。比如在分析人的身高体重对健康的影响的时候,身高特征一般会在1.6m-1.8m范围内,体重特征一般会在 50-100kg范围内,如果不进行归一化直接作为模型的输入,那么分析出来的结果显然会倾向于数值差别比较大的体重特征。

在实际应用中,通过梯度下降求解的模型通常是需要归一化的,比如线性回归、逻辑回归、支持向量机、神经网络等模型,而对于不需要通过梯度下降求解的模型比如决策树则不需要。

常用的归一化方法有哪些?

  1. 线性函数归一化,对每个特征,减去最小值,除以最大值与最小值之差,可以将结果映射到$[0, 1]$ 的范围。
  1. 零均值归一化(Z-Score Normalization),将原始数据映射到均值为0、标准差为1的分布上。公式如下:

归一化和标准化的区别?

数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。

目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不同的标准化方法,对系统的评价结果会产生不同的影响,然而不幸的是,在数据标准化方法的选择上,还没有通用的法则可以遵循。

其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。

简而言之, 归一化是标准化其中的一种方法

在对数据进行预处理的时候,怎么处理类别型特征?

类别型特征指的是只在有限选项内取值的特征,比如性别、血型等等。对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。

常见的几种方式:

  • 序号编码,对类别型特征赋予一个数值ID,通常用于处理类别间具有大小关系的数据。
  • 独热编码(One-hot Encoding),用一个稀疏向量来表示一个类别,不同的类别取1的位置不同。
  • 二进制编码,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。

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

为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。

对于高维组合特征,可以使用降维的方法来减少两个高维特征组合后需要学习的参数。

怎么有效地找到组合特征

使用决策树方法寻找组合特征:

  • 根据原始输入和标签构造决策树,然后每一条从根节点到叶节点的路径都可以看成一种特征组合的方式
  • 之后就可以根据组合特征对样本进行编码

构造决策树可以采用梯度提升决策树,该方法的思想是每次都在之前构建的决策树的残差上构建下一棵决策树。

都有哪些文本表示模型?他们各有什么优缺点?

  1. 词袋模型,将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反应了这个词在原文章中的重要程度。常用TF-IDF来计算词的权重。
  2. N-gram模型,将连续出现的n个词组成的词组(N-gram)作为一个单独的特征放到向量表示中。
  3. 主题模型,用于从文本库中发现有代表性的主题,常见的主题模型有pLSA(Probabilistic Latent Semantic Analysis), LDA(Latent Dirichlet Allocation)
  4. 词嵌入(Word Embedding)与深度学习模型,将每个词都映射为低维空间(50维,300维等),假设文本中单词的个数是$N$, 词向量的维数是$K$ , 我们就能用一个$ N \times K $大小的矩阵来表示文档了,但是实际应用中这样的效果并不好。实际应用中,通常使用卷积神经网络(CNN)或者是循环神经网络(RNN)来对文本进行建模。词嵌入模型也有很多种,常用的有word2vec, glove等。

优缺点

词袋模型的优点是简单,计算量小,缺点是忽视了词的上下文以及稀疏性的问题。

N-gram模型的优点在于它包含了前N-1个词所能提供的全部信息,这些词对于当前词的出现具有很强的约束力,然而它的缺点是需要相当规模的训练文本来确定模型的参数。当N很大时,模型的参数空间过大。所以常见的N值一般为1,2。还有因数据稀疏而导致的数据平滑问题,解决方法主要是使所有的N-gram概率之和为1和使所有的N-gram概率都不为0.

主题模型:基于词袋模型或N-gram模型的文本表示模型有一个明显的缺陷,就是无法识 别出两个不同的词或词组具有相同的主题。因此,需要一种技术能够将具有相同 主题的词或词组映射到同一维度上去,于是产生了主题模型。

词嵌入:训练的运算量比较大,但是能够学习到高质量的词表示

用一张表格作为总结

  优点 缺点
词袋模型 简单,计算量小 忽视了词的上下文,稀疏性
N-gram模型 包含了前N-1个词所能提供的全部信息,这些词对于当前词的出现具有很强的约束力 需要相当规模的训练文本来确定模型的参数,还有因数据稀疏而导致的数据平滑问题
主题模型 - 能够将具有相同主题的词映射到同一维度上去
词嵌入模型(Word Embedding) 能够学习到高质量的词表示 需要相当规模的训练文本来确定模型的参数

关于主题模型以及词嵌入模型的详细介绍,可以参见nlp_basic.md文件。

在图像分类任务中,训练数据不足会带来什么问题?如何缓解数据量不足带来的问题?

训练数据不足会导致模型容易过拟合,处理方法:

  • 基于模型的方法,如

    • 简化模型
    • 添加约束项以缩小假设空间(L1/L2正则项)
    • 集成学习
    • Dropout超参数等等
  • 基于数据的方法:数据扩充,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果,比如在图像分类任务中,可以对每幅图像做以下变换

    • 随机旋转、平移、缩放、裁剪等等
    • 对图像中的像素添加噪音扰动,比如高斯白噪声
    • 颜色变换
    • 改变图像的亮度、清晰度、对比度、锐度等等

    或者是使用生成对抗网络(GAN)合成新样本。

模型评估

模型的评估是我们选择模型的根本依据。针对分类、排序、回归、序列预测等不同类型的机器学习问题,评估指标的选择也有所不同。

常见的几种指标:

  • 准确率(Accuracy),是指分类正确的样本占总样本个数的比例
  • 精确率(Precision),是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例。

  • 召回率(Recall),是指分类正确的正样本个数占原始数据中正样本个数的比例。

  • F1分数,由于精确率和召回率是矛盾的,他们之间的关系如下图所示:

    PR曲线图

    F1分数是它们两的调和平均:

使用F1分数能够比较综合地反应一个模型的性能。

  • 均方根误差(Root Mean Square Error,RMSE),用于反应回归模型的性能。计算公式:

准确率有什么缺陷吗?如何解决?

准确率的缺陷:

当不同类别的样本比例非常不均衡时,占比大的类别往往称为影响准确率的最主要因素。

解决这一问题:

可以采用平均准确率(每个类别下的样本准确率的算术平均)作为模型评估的指标。

什么是ROC曲线?

ROC曲线(Receiver Operating Characteristic Curve)的横坐标为假阳性率(False Positive Rate,FPR),纵坐标为真阳性率(True Positive Rate,TPR),它们的计算方法分别为:

其中$P $是真实正样本的数量,$N$是真实的负样本的数量,$TP$ 是$P$个正样本中被分类器预测为正样本的个数,$FP$是$N$个负样本被预测为正样本的个数。

ROC曲线经常作为评估二值分类器最重要的指标之一。

它的优缺点如下:

如何绘制ROC曲线?

ROC曲线是通过不断移动分类器的“截断点”来生成曲线的关键点的。

ROC曲线的绘制方法如下所述:假设有$P$个正例,$N$个反例,首先拿到分类器对于每个样本预测为正例的概率,根据概率对所有样本进行逆序排列,然后将分类阈值设为最大,即把所有样本均预测为反例,此时图上的点为$ (0,0)$。然后将分类阈值依次设为每个样本的预测概率,即依次将每个样本划分为正例,如果该样本为真正例,则$TP+1$,即 $TPR + \frac{1}{P}$ 如果该样本为负例,则$FP+1$,即 $FPR + \frac{1}{N}$ 。最后的到所有样本点的$TPR$和$FPR$值,用线段相连。

一个例子:

如何计算AUC(Area Under Curse)?它有什么意义?

AUC指的是ROC曲线下的面积大小,计算AUC值只需要沿着ROC横轴做积分就可以了,该值能够量化地反映基于ROC曲线衡量出的模型性能。 AUC的取值一般在0.5到1之间,AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。

ROC曲线和P-R曲线的比较?

ROC曲线相较于 P-R曲线的优点是,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。这个特点让ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。

因此,ROC曲线的适用场景更多,被广泛使用在排序、推荐、广告等领域。但如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映其性能。

注意, TPR和召回率实际上是相等的。

余弦相似度与欧氏距离的比较

对于两个向量$A$和$B$, 欧氏距离体现数值上的绝对差异,余弦相似度体现为方向上的差异。当一堆文本相似度的长度差异很大、但内容相近时,如果使用词向量作为特征,他们在特征空间中的欧氏距离通常很大,而如果使用余弦相似度的话,它们之间的夹角可能很小,因而相似度高。

在模型评估过程中,有哪些主要的验证方法,它们的优缺点是什么?

  1. Holdout检验(留出法),将原始的样本集合随机分成训练集和验证集两部分。优点是简单直接,缺点是在验证集计算出来的评估指标与原始分组有很大关系,同时不适用于小数据集。

  2. 交叉检验:

    1. k-fold交叉验证,首先将全部样本划分成k个大小相等的样本子集,依次遍历k个子集,每次把当前子集作为验证集,其余所有子集作为训练集。最后把k次评估指标的平均值作为最终的评估指标。
    2. 留一验证,每次留下1个 样本作为验证集,其余所有样本作为训练集。
    3. 在样本数比较多的情况下,交叉验证的时间开销也比较大。
  3. 自助法:对于总数为n个样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n词采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证。这样做的好处是,能够维持训练集样本规模。

    可以用数学证明,在自助法的抽样过程中,当样本数很大时,大约有36.8%的样本从未被选择过,可作为验证集。

超参数有哪些调优方法?

  • 网格搜索,通过查找搜索范围内所有的点来确定最优值。当需要调优的超参数比较多时,这种方法十分消耗计算资源和时间。

  • 随即搜索,在搜索范围内随机选取参数,结果无法保证,但是速度会比网格搜索要快。在取样次数够多的情况下,通过随机采样也能大概率找到全局最优值。

  • 贝叶斯优化算法, 贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。详细可见: 参考链接

说出几种降低过拟合和欠拟合风险的方法?

过拟合是指模型在训练集上表现很好,但在测试集和新数据上表现较差的现象。

欠拟合指的是模型下训练数据和测试数据上表现都不好的情况。

降低过拟合风险的方法:

  • 获得更多的训练数据,使用更多的训练数据进行训练。
  • 降低模型复杂度
  • 正则化方法,给模型的参数加上一定的正则约束
  • 集成学习方法,集成学习是把多个模型集成在一起,来降低单一模型的过拟合风险

降低欠拟合风险的方法:

  • 添加新特征,因为特征不足或者现有特征与样本标签相关性不强时,模型容易欠拟合。
  • 增加模型复杂度。
  • 减小正则化系数。