在数据预处理阶段,对于具有缺失值的数据记录不做任何处理,也
是一种思路。这种思路主要看后期的数据分析和建模应用,很多模型对
于缺失值有容忍度或灵活的处理方法,因此在预处理阶段可以不做处
理。常见的能够自动处理缺失值的模型包括:KNN、决策树和随机森
林、神经网络和朴素贝叶斯、DBSCAN(基于密度的带有噪声的空间聚
类)等。这些模型对于缺失值的处理思路是:
·忽略,缺失值不参与距离计算,例如KNN。
·将缺失值作为分布的一种状态,并参与到建模过程,例如各种决
策树及其变体。
·不基于距离做计算,因此基于值的距离做计算,本身的影响就消
除,例如DBSCAN。
在数据建模前的数据归约阶段,有一种归约的思路是降维,
降维中又有一种直接选择特征的方法。假如我们通过一定方法确定带有
缺失值(无论缺少字段的值缺失数量有多少)的字段对于模型的影响非
常小,那么我们根本就不需要对缺失值进行处理。因此,后期建模时对
字段或特征的重要性判断也是决定是否处理字段缺失值的重要参考因素
之一。
对于缺失值的处理思路是先通过一定方法找到缺失值,接着分析缺
失值在整体样本中的分布占比以及缺失值是否具有显著的无规律分布特
征,然后考虑后续要使用的模型中是否能满足缺失值的自动处理,最后
决定采用哪种缺失值处理方法。在选择处理方法时,注意投入的时间、
精力和产出价值,毕竟,处理缺失值只是整个数据工作的冰山一角而
已。
在数据采集时,可在采集端针对各个字段设置一个默认
值。以MySQL为例,在设计数据库表时,可通过default指定每个字段的
默认值,该值必须是常数。在这种情况下,假如原本数据采集时没有采
集到数据,字段的值应该为Null,但由于在建立库表时设置了默认值,
这会导致“缺失值”看起来非常正常,但本质上还是缺失的。对于这类数
据需要尤其注意。