无论是数据分析、数据挖掘,还是机器学习,都离不开数据预处理这一重要步骤。没有高质量的数据,就没有高质量的分析结果。而数据不完整,也就是数据中包含缺失值,正是数据分析工作者最常见的问题之一。本文我们就来谈一下缺失值的处理。
一、缺失值类型
·完全随机缺失(Missing Completely At Random,MCAR)
例如,测量室温的温度传感器发送的数据有一定的概率损坏(不依赖于任何变量)。
·随机缺失(Missing At Random,MAR)
例如,测量室温的温度传感器所发送的数据,湿度越高,其损坏的概率也越高(温度变量的缺失依赖于湿度变量)。
·非随机缺失(Missing Not At Random,MNAR)
例如,测量室温的温度传感器所发送的数据在温度超过40度时损坏(温度变量的缺失依赖于其本身)
二、缺失值处理
1
删除
最简单粗暴的方法,即将带缺失值的记录数据整个删除。
但是,这样做可能会删除有价值的数据。
在MAR和MNAR中,原始数据中具有特定特征的数据会被删除,我们将无法掌握数据的整体特征。
2
填充
基于合适的策略用一定的值填充空值,从而使数据完备。经常使用的填充方法有如下几种。
1)用常数填充
指定任意值作为缺失值的填充值。
这会使指定的常数数据大量增加,导致数据的方差(变异程度)比真实方差小得多等问题。
在缺失值较多时,不推荐。
2)用聚合值填充
计算非缺失值的平均值、中位数、最小值、最大值等,将其作为填充值。
例如,在缺少部分人员的身高数据时,用身高值的中位数进行填充。
缺点同1)。
3)用基于无缺失值的数据的预测值填充
根据无缺失值的(一个或多个)列的值与有部分缺失值的列的值的关系,预测缺失值并填充。
预测可以通过机器学习模型等进行。
例如,在缺少部分人员的身高数据时,可以分析体重与身高的关系,根据体重预测缺失的身高值并填充。
4)基于时序关系进行填充
根据缺失值前后的数据预测缺失值并填充,即3)的时序数据版。
例如,当10:01的温度数据缺失时,可使用10:00和10:02的温度数据的均值进行填充。
如果是以时间上连续的值为对象,则该方法在MCAR和MAR中均有效。
5)多重插补法
在MACR以外的情况下,用特定的值进行填充会产生副作用,即产生偏差。
这时可以使用多重插补法,将填充好的数据集分成多份并对不同的数据集进行分析,然后对得到的多个结果进行整合,即可得到偏差较小的结果。
该方法在MCAR和MAR中均有效。
6)最大似然法
用于解决填充后的数据比原始数据变异程度小的问题。
不是用机器学习模型预测缺失值,而是通过引入隐变量,采用EM算法(填充的结果数据服从多元正态分布)最大化似然概率,从而估计缺失值。
该方法在MCAR和MAR中均有效。
3
不处理
不处理缺失值,直接在包含空值的数据上进行分析(不属于预处理的内容,本文略)。
下面,我们结合实例,分别基于R、Python、SQL,来看一下删除和填充的方法。
例1 删除缺失记录
目标数据集是thickness值存在缺失的生产记录,请删除缺失thickness值的记录(图1)
图1 删除缺失记录▲
左右滑动查看基于Python、SQL的处理方法▲
例2 用常数填充
目标数据集是 thickness 值存在缺失的生产记录数据,请用数值1填充缺失的 thickness值(图2)。
图2 用常数填充▲
左右滑动查看基于Python、SQL的处理方法▲
例3 用均值填充
目标数据集是 thickness 值存在缺失的生产记录,请用未缺失的 thickness 的平均值填充缺失的 thickness 值(图3)。
图3 用均值填充▲
左右滑动查看基于Python、SQL的处理方法▲
例4 用PMM实现多重插补
目标数据集是thickness值存在缺失的生产记录数据,请用多重插补法填充缺失的thickness值。多重插补法分为几种,这里使用PMM(Predictive Mean Matching,预测均值匹配)方法。
简单来说,PMM的步骤如下所示。
1.使用去除缺失数据后的数据构建用于预测缺失数据的回归模型
2.计算构建的回归模型的系数和误差方差的分布
3.根据系数和误差方差的分布生成新的系数和误差方差
4.根据服从步骤3中生成的系数和误差方差的回归模型计算预测值
5.从无缺失的观测数据中选择离预测值最近的数据作为填充值
6.填充数据并构建新的回归模型,计算模型系数和误差方差的分布,然后返回步骤3
循环执行步骤3至步骤6,直到填充值的分布收敛为止。收敛后,如果获得了与指定数据集的数量相等的填充值,则结束(图4)。
图4 基于PMM的多重插补▲
左右滑动查看基于Python的处理方法▲
以上重点介绍了几种缺失值填充方式,需要注意的是,不同的问题适用的填充方式不同。但无论哪种填充方式,人为干涉缺失值都会或多或少地影响原始数据的信息系统,从而对分析结果造成影响。归根结底,数据填充是在陷入数据缺失而又必须进行分析的困境时使用的方法,一定要慎重选择。
——本文选自《数据预处理从入门到实战:基于SQL、R、Python》
4.9折开抢
日亚计算机类图书销量排行榜No1
数据行业新人入门必备图书
[日]本桥智光 著
陈涛 译
﹀
﹀
﹀
福 利 送 书
你在数据处理中遇到了哪些困难,是如何解决的?
文末告诉我们吧~
选出1位同学送出本书哦
3月8日 12:00公布名单
图 灵 社 群
转载:https://blog.csdn.net/turingbooks/article/details/114324615