特征工程之数据预处理(上)

机器学习入门系列(2)–如何构建一个完整的机器学习项目,第三篇!html

该系列的前两篇文章:git

分别介绍了肯定项目终极目标、选择损失函数、获取数据以及构建测试集,接下来在进入选择算法和训练模型以前,一个很重要的步骤就是特征工程,它包括了对数据的预处理、特征提取、特征分析以及特征构建等几个步骤,能够说可否训练一个好的模型,除了选择合适的算法,准备好数据也是很是关键的!程序员

因为篇幅问题,因此这篇文章先介绍如何处理缺失值和图片数据扩充的问题,下一篇文章会介绍处理异常值和类别不平衡的问题。github


3 特征工程

何为特征工程呢?顾名思义,就是对原始数据进行一系列工程处理,将其提炼为特征,做为输入供算法和模型使用。web

本质上讲,特征工程是一个表示和展示数据的过程;实际工做中,特征工程的目的是去除原始数据中的杂质和冗余,设计更高效的特征以刻画求解的问题与预测模型之间的关系。算法

特征工程的重要性有如下几点:数据库

  1. 特征越好,灵活性越强。好的特征的灵活性在于它容许你选择不复杂的模型,同时运行速度也更快,也更容易和维护。
  2. 特征越好,构建的模型越简单。好的特征能够在参数不是最优的状况,依然获得很好的性能,减小调参的工做量和时间,也就能够大大下降模型复杂度。
  3. 特征越好,模型的性能越出色。特征工程的目的原本就是为了提高模型的性能。

3.1 数据预处理

首先须要对数据进行预处理,通常经常使用的两种数据类型:微信

  1. 结构化数据。结构化数据能够看做是关系型数据库的一张表,每列都有清晰的定义,包含了数值型和类别型两种基本类型;每一行数据表示一个样本的信息。
  2. 非结构化数据。主要是文本、图像、音频和视频数据,其包含的信息没法用一个简单的数值表示,也没有清晰的类别定义,而且每一个数据的大小互不相同。

这里主要介绍结构化数据和图像数据两种数据的数据预处理方法。网络

3.1.1 处理缺失值

数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,二者都会形成分析结果的不许确。机器学习

缺失值产生的缘由
  • 信息暂时没法获取,或者获取信息的代价太大。
  • 信息被遗漏,人为的输入遗漏或者数据采集设备的遗漏。
  • 属性不存在,在某些状况下,缺失值并不意味着数据有错误,对一些对象来讲某些属性值是不存在的,如未婚者的配偶姓名、儿童的固定收入等。
缺失值的影响
  • 数据挖掘建模将丢失大量的有用信息。
  • 数据挖掘模型所表现出的不肯定性更加显著,模型中蕴含的规律更难把握。
  • 包含空值的数据会使建模过程陷入混乱,致使不可靠的输出。
缺失值的处理方法
  1. 直接使用含有缺失值的特征:当仅有少许样本缺失该特征的时候能够尝试使用;
  2. 删除含有缺失值的特征:这个方法通常适用于大多数样本都缺乏该特征,且仅包含少许有效值是有效的;
  3. 插值补全缺失值

最常使用的仍是第三种插值补全缺失值的作法,这种作法又能够有多种补全方法。

  1. 均值/中位数/众数补全

若是样本属性的距离是可度量的,则使用该属性有效值的平均值来补全;

若是样本属性的距离不可度量,则能够采用众数或者中位数来补全。

  1. 同类均值/中位数/众数补全

对样本进行分类后,根据同类其余样本该属性的均值补全缺失值,固然同第一种方法相似,若是均值不可行,能够尝试众数或者中位数等统计数据来补全。

  1. 固定值补全

利用固定的数值补全缺失的属性值。

  1. 建模预测

利用机器学习方法,将缺失属性做为预测目标进行预测,具体为将样本根据是否缺乏该属性分为训练集和测试集,而后采用如回归、决策树等机器学习算法训练模型,再利用训练获得的模型预测测试集中样本的该属性的数值。

这个方法根本的缺陷是若是其余属性和缺失属性无关,则预测的结果毫无心义;可是若预测结果至关准确,则说明这个缺失属性是不必归入数据集中的;通常的状况是介于二者之间。

  1. 高维映射

将属性映射到高维空间,采用独热码编码(one-hot)技术。将包含 K 个离散取值范围的属性值扩展为 K+1 个属性值,若该属性值缺失,则扩展后的第 K+1 个属性值置为 1。

这种作法是最精确的作法,保留了全部的信息,也未添加任何额外信息,若预处理时把全部的变量都这样处理,会大大增长数据的维度。这样作的好处是完整保留了原始数据的所有信息、不用考虑缺失值;缺点是计算量大大提高,且只有在样本量很是大的时候效果才好

  1. 多重插补

多重插补认为待插补的值是随机的,实践上一般是估计出待插补的值,再加上不一样的噪声,造成多组可选插补值,根据某种选择依据,选取最合适的插补值。

  1. 压缩感知和矩阵补全

压缩感知经过利用信号自己所具备的稀疏性,从部分观测样本中回复原信号。压缩感知分为感知测量和重构恢复两个阶段。

  • 感知测量:此阶段对原始信号进行处理以得到稀疏样本表示。经常使用的手段是傅里叶变换、小波变换、字典学习、稀疏编码等

  • 重构恢复:此阶段基于稀疏性从少许观测中恢复原信号。这是压缩感知的核心

矩阵补全能够查看知乎上的问题–矩阵补全(matrix completion)的经典算法有哪些?目前比较流行的算法是什么?

  1. 手动补全

除了手动补全方法,其余插值补全方法只是将未知值补以咱们的主观估计值,不必定彻底符合客观事实。在许多状况下,根据对所在领域的理解,手动对缺失值进行插补的效果会更好。但这种方法须要对问题领域有很高的认识和理解,要求比较高,若是缺失数据较多,会比较费时费力。

  1. 最近邻补全

寻找与该样本最接近的样本,使用其该属性数值来补全。

3.1.2 图片数据扩充

对于图片数据,最常遇到的问题就是训练数据不足的问题。

一个模型所能获取的信息通常来源于两个方面,一个是训练数据包含的信息;另外一个就是模型的造成过程当中(包括构造、学习、推理等),人们提供的先验信息。

而若是训练数据不足,那么模型能够获取的信息就比较少,须要提供更多的先验信息保证模型的效果。先验信息通常做用来两个方面,一是模型,如采用特定的内在结构(好比深度学习的不一样网络结构)、条件假设或添加其余约束条件(深度学习中体如今损失函数加入不一样正则项);第二就是数据,即根据先验知识来调整、变换或者拓展训练数据,让其展示出更多的、更有用的信息。

对于图像数据,若是训练数据不足,致使的后果就是模型过拟合问题,即模型在训练样本上的效果不错,但在测试集上的泛化效果很糟糕。过拟合的解决方法能够分为两类:

  1. 基于模型的方法:主要是采用下降过拟合风险的措施,如简化模型(从卷积神经网络变成逻辑回归算法)、添加约束项以缩小假设空间(如 L一、L2等正则化方法)、集成学习、Dropout方法(深度学习经常使用方法)等;
  2. 基于数据的方法:主要就是数据扩充(Data Augmentation),即根据一些先验知识,在保持特色信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。具体作法有多种,在保持图像类别不变的前提下,能够对每张图片作以下变换处理。
    • 必定程度内的随机旋转、平移、缩放、裁剪、填充、左右翻转等,这些变换对应着同一个目标在不一样角度的观察结果;
    • 对图像中的元素添加噪声扰动,如椒盐噪声、高斯白噪声等;
    • 颜色变换。好比在图像的 RGB 颜色空间进行主成分分析,获得 3 个主成分的特征向量p1,p2,p3以及对应的特征值λ1,λ2,λ3,而后在每一个像素的 RGB 值上添加增量[p1,p2,p3]*[a1λ1,a2λ2,a3λ3],其中a1,a2,a3都是均值为 0, 方差较小的高斯分布随机数;
    • 改变图像的亮度、清晰度、对比度、锐度等。

上述数据扩充方法是在图像空间进行变换的,也能够选择先对图像进行特征提取,而后在图像的特征空间进行变换,利用一些通用的数据扩充或者上采样方法,例如 SMOTE(Synthetic Minority Over-sampling Technique)。

此外,最近几年一直比较热门的 GAN,生成对抗网络,它的其中一个应用就是生成图片数据,也能够应用于数据扩充。

最后,还有一种方法能够不须要扩充数据,利用迁移学习的作法,也是现在很是经常使用的一个方法,微调(Finetuning),即借用在大数据集(如 ImageNet)上预训练好的模型,而后在本身的小数据集上进行微调,这是一种简单的迁移学习,同时也能够快速训练一个效果不错的针对目标类别的新模型。


小结

数据特征缺失和图片数据的不足都是机器学习任务中很是常见的问题,所以须要好好掌握如何处理缺失值,以及扩充图片数据的方法。


参考:


欢迎关注个人微信公众号–机器学习与计算机视觉,或者扫描下方的二维码,你们一块儿交流,学习和进步!

往期精彩推荐

学习笔记
数学学习笔记
Github项目 & 资源教程推荐