数据预处理──缺失值处理

野生的数据经常出现缺失值,这个很好理解,我们填写表格也经常心浮气躁,有一些内容可能就漏填了,譬如说在性别一栏留下了空白,这就是缺失值。

要进行数据清洗,就需要处理这些缺失值。那么,遇到缺失值,标准的处理流程都是怎样的呢?这个问题没有答案,数据缺失值的处理是一门艺术,你想一想,你提交的表格上漏填了性别一项,等待这张表格七转八转转到我这里来时,我虽然看到你漏填了一项,但与你素未谋面,放着留空不合适,填男填女好像也不合适。

一般来说,有以下四种处理方式:

1. 咱家有矿型的处理方式,丢弃

只要是某条样本存在缺失值,就直接丢弃这条样本,眼不见心不烦,也没后面这么多的是。这种做法优点很突出,简单粗暴,省时省力,知名的数据处理工具pandas中,就专门提供了dropna这种方法。但缺点也很突出,一条宝贵的样本数据,因为沾了点脏东西就被浪费掉了。

一般来说,这种方法在数据质量比较好,缺失值占比较少的情况下可以考虑。

2. 和稀泥型的处理方式,填充均值

如果不丢弃存在缺失值的样本,想要喂给数据,就必须重新给它赋值,这种行为如果上纲上线,是有一点“捏造数据”的意思在里面的,一旦赋值出现某种偏向性,就会影响整个样本的整体数据分布,最终必将导致机器学习模型的预测出现某种偏差。

那怎么办呢?和稀泥,把均值填入其中,既然均值,也就不会对整体情况产生影响,同时也解决的缺失值的问题。从统计学的角度出发,除了填充均值以外,也可以选择填充众数、中位数,效果略有区别,不过出发点都是一样的。

3. 技术手段型的处理方式, 填补数值

这种处理方式比较简单,譬如说前一个样本的值是7,后一个样本的值是9,中间这个样本出现缺失值了,那填什么呢?自然是填一个8。具体操作有多种方法。

热卡填补

热卡填充法是在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。通常会找到超出一个的相似对象,在所有匹配对象中没有最好的,而是从中随机的挑选一个作为填充值。这个问题关键是不同的问题可能会选用不同的标准来对相似进行判定,以及如何制定这个判定标准。该方法概念上很简单,且利用了数据间的关系来进行空值估计,但缺点在于难以定义相似标准,主观因素较多。

K均值

利用无监督机器学习的聚类方法,通过K均值的聚类方法将所有样本进行聚类划分,然后再通过划分的种类的均值对各自类中的缺失值进行填补。归其本质还是通过找相似来填补缺失值。一般先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。

拟合缺失值

拟合就是利用其它变量做模型的输入进行缺失变量的预测,与我们正常建模的方法一样,只是目标变量变为了缺失值。

注意如果其它特征变量与缺失变量无关,则预测的结果毫无意义。如果预测结果相当准确,则又说明这个变量完全没有必要进行预测,因为这必然是与特征变量间存在重复信息。一般情况下,会介于两者之间效果为最好,若强行填补缺失值之后引入了自相关,这会给后续分析造成障碍。

4. 未卜先知型的处理方式, 模型预测

利用模型预测缺失变量的方法有很多,这里仅简单介绍几种。

回归预测

基于完整的数据集,建立回归方程(模型)。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关或预测变量高度相关时会导致有偏差的估计。

极大似然估计

在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂,且仅限于线性模型。

多重插补

多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。

我们看到,以上提出的拟合和替换方法都是单一的插补方法,而多重插补弥补了单一插补的缺陷,它并没有试图去通过模拟值去估计每个缺失值,而是提出缺失数据值的一个随即样本(这些样本可以是不同的模型拟合结果的组合)。这种程序的实施恰当地反映了由于缺失值引起的不确定性,使得统计有效。多重插补可以分为以下3个步骤:

  1. 为每个缺失值产生一套可能的插补值,这些值反映了无响应模型的不确定性;

  2. 每个插补数据集合都用针对完整数据集的统计方法进行统计分析;

  3. 对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值;

根据数据缺失机制、模式以及变量类型,可分别采用回归、预测均数匹配( predictive mean matching, PMM )、趋势得分( propensity score, PS )、Logistic回归、判别分析以及马尔可夫链蒙特卡罗( Markov Chain Monte Carlo, MCMC) 等不同的方法进行填补。

假设一组数据,包括三个变量Y1,Y2,Y3,它们的联合分布为正态分布,将这组数据处理成三组,A组保持原始数据,B组仅缺失Y3,C组缺失Y1和Y2。在多值插补时,对A组将不进行任何处理,对B组产生Y3的一组估计值(作Y3关于Y1,Y2的回归),对C组作产生Y1和Y2的一组成对估计值(作Y1,Y2关于Y3的回归)。

当用多值插补时,对A组将不进行处理,对B、C组将完整的样本随机抽取形成为m组(m为可选择的m组插补值),每组个案数只要能够有效估计参数就可以了。对存在缺失值的属性的分布作出估计,然后基于这m组观测值,对于这m组样本分别产生关于参数的m组估计值,给出相应的预测,这时采用的估计方法为极大似然法,在计算机中具体的实现算法为期望最大化法(EM)。对B组估计出一组Y3的值,对C将利用Y1,Y2,Y3它们的联合分布为正态分布这一前提,估计出一组(Y1,Y2)。

上例中假定了Y1,Y2,Y3的联合分布为正态分布。这个假设是人为的,但是已经通过验证(Graham和Schafer于1999),非正态联合分布的变量,在这个假定下仍然可以估计到很接近真实值的结果。

注:使用多重插补要求数据缺失值为随机性缺失,一般重复次数20-50次精准度很高,但是计算也很复杂,需要大量计算。

你可能感兴趣的:(机器学习,机器学习,人工智能)