机器学习入门系列(2)–如何构建一个完整的机器学习项目,第三篇!html
该系列的前两篇文章:git
分别介绍了肯定项目终极目标、选择损失函数、获取数据以及构建测试集,接下来在进入选择算法和训练模型以前,一个很重要的步骤就是特征工程,它包括了对数据的预处理、特征提取、特征分析以及特征构建等几个步骤,能够说可否训练一个好的模型,除了选择合适的算法,准备好数据也是很是关键的!程序员
因为篇幅问题,因此这篇文章先介绍如何处理缺失值和图片数据扩充的问题,下一篇文章会介绍处理异常值和类别不平衡的问题。github
何为特征工程呢?顾名思义,就是对原始数据进行一系列工程处理,将其提炼为特征,做为输入供算法和模型使用。web
本质上讲,特征工程是一个表示和展示数据的过程;实际工做中,特征工程的目的是去除原始数据中的杂质和冗余,设计更高效的特征以刻画求解的问题与预测模型之间的关系。算法
特征工程的重要性有如下几点:数据库
首先须要对数据进行预处理,通常经常使用的两种数据类型:微信
这里主要介绍结构化数据和图像数据两种数据的数据预处理方法。网络
数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,二者都会形成分析结果的不许确。机器学习
最常使用的仍是第三种插值补全缺失值的作法,这种作法又能够有多种补全方法。
若是样本属性的距离是可度量的,则使用该属性有效值的平均值来补全;
若是样本属性的距离不可度量,则能够采用众数或者中位数来补全。
对样本进行分类后,根据同类其余样本该属性的均值补全缺失值,固然同第一种方法相似,若是均值不可行,能够尝试众数或者中位数等统计数据来补全。
利用固定的数值补全缺失的属性值。
利用机器学习方法,将缺失属性做为预测目标进行预测,具体为将样本根据是否缺乏该属性分为训练集和测试集,而后采用如回归、决策树等机器学习算法训练模型,再利用训练获得的模型预测测试集中样本的该属性的数值。
这个方法根本的缺陷是若是其余属性和缺失属性无关,则预测的结果毫无心义;可是若预测结果至关准确,则说明这个缺失属性是不必归入数据集中的;通常的状况是介于二者之间。
将属性映射到高维空间,采用独热码编码(one-hot)技术。将包含 K 个离散取值范围的属性值扩展为 K+1 个属性值,若该属性值缺失,则扩展后的第 K+1 个属性值置为 1。
这种作法是最精确的作法,保留了全部的信息,也未添加任何额外信息,若预处理时把全部的变量都这样处理,会大大增长数据的维度。这样作的好处是完整保留了原始数据的所有信息、不用考虑缺失值;缺点是计算量大大提高,且只有在样本量很是大的时候效果才好。
多重插补认为待插补的值是随机的,实践上一般是估计出待插补的值,再加上不一样的噪声,造成多组可选插补值,根据某种选择依据,选取最合适的插补值。
压缩感知经过利用信号自己所具备的稀疏性,从部分观测样本中回复原信号。压缩感知分为感知测量和重构恢复两个阶段。
感知测量:此阶段对原始信号进行处理以得到稀疏样本表示。经常使用的手段是傅里叶变换、小波变换、字典学习、稀疏编码等
重构恢复:此阶段基于稀疏性从少许观测中恢复原信号。这是压缩感知的核心
矩阵补全能够查看知乎上的问题–矩阵补全(matrix completion)的经典算法有哪些?目前比较流行的算法是什么?
除了手动补全方法,其余插值补全方法只是将未知值补以咱们的主观估计值,不必定彻底符合客观事实。在许多状况下,根据对所在领域的理解,手动对缺失值进行插补的效果会更好。但这种方法须要对问题领域有很高的认识和理解,要求比较高,若是缺失数据较多,会比较费时费力。
寻找与该样本最接近的样本,使用其该属性数值来补全。
对于图片数据,最常遇到的问题就是训练数据不足的问题。
一个模型所能获取的信息通常来源于两个方面,一个是训练数据包含的信息;另外一个就是模型的造成过程当中(包括构造、学习、推理等),人们提供的先验信息。
而若是训练数据不足,那么模型能够获取的信息就比较少,须要提供更多的先验信息保证模型的效果。先验信息通常做用来两个方面,一是模型,如采用特定的内在结构(好比深度学习的不一样网络结构)、条件假设或添加其余约束条件(深度学习中体如今损失函数加入不一样正则项);第二就是数据,即根据先验知识来调整、变换或者拓展训练数据,让其展示出更多的、更有用的信息。
对于图像数据,若是训练数据不足,致使的后果就是模型过拟合问题,即模型在训练样本上的效果不错,但在测试集上的泛化效果很糟糕。过拟合的解决方法能够分为两类:
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)上预训练好的模型,而后在本身的小数据集上进行微调,这是一种简单的迁移学习,同时也能够快速训练一个效果不错的针对目标类别的新模型。
数据特征缺失和图片数据的不足都是机器学习任务中很是常见的问题,所以须要好好掌握如何处理缺失值,以及扩充图片数据的方法。
参考:
欢迎关注个人微信公众号–机器学习与计算机视觉,或者扫描下方的二维码,你们一块儿交流,学习和进步!