1.4 数据清洗

在机器学习过程中,数据清洗(data cleaning)这一步骤非常重要。据统计,数据科学家在进行数据分析时,数据清洗的步骤平均占用80%的时间。在大数据的应用中,因为数据质量良莠不齐,我们更加需要数据清洗这一步骤,它成为决定最终机器学习质量的重要环节。我们常常说起的“废料入,废品出”,完美地概括了数据质量在数据分析中的重要性。在这一阶段中,我们首先指出,数据按照其特征可分为以下两类:

·数值型;

·分类型。

数值型数据由数字组成,分类型数据则是根据描述对象的性质进行分类的数据。例如,在用于预测房价的数据中,将房屋周围的道路按照柏油路、水泥路、草地等分类就是分类型数据。由于分类型数据无法直接用于计算,我们需要将分类型数据转化成数值型以满足计算的需要,对于相关内容,我们将在第3章中介绍。

下面列举了对这两类数据进行数据清洗的一些方法。

1.纠正记录格式不一致

无论是数值型数据还是分类型数据,都有可能出现记录格式不一致的情况。例如,在记录房屋的占地面积时,将出现各类不同的数值型记录方式:3300、3,300、3,300英尺、3300+等。研究数据内容并制定清洗数据方式,显然非常有必要。在分类型数据中,记录道路的类型同样可能出现“asphalt”“Asphalt”“asphalt.”等不统一的格式。在清洗这种类型的数据问题时,最简单的方式是先列出关于同一数据中不同的记录方式,然后再按照统一的格式和内容进行修改。

2.剔除无效数据

假设我们需要预测某一区域的房价,但数据中混杂了某些公寓或房屋的所在地区并不在需求的地域内的数据,显然在做进一步数据分析前,需要找到这部分无效数据并进行剔除。

3.清洗重复数据

当数据由不同的数据源合并而成或者不同的人参与建立新数据时,数据重复很容易发生,并会导致结果出现偏差。所以在数据清洗阶段,运用搜索算法来识别和去掉重复数据就非常必要。找到科学的算法并对数据进行去重,这一点十分重要。

4.清洗异常值

对于数值型数据异常值,我们可以通过数据的分布或设置条件进行判断,比如与均值之间的差异大于6个标准差。当然,有时候异常值也可能是数据采集时的人工错误。例如,将一栋房屋的占地面积记录为33 000平方英尺[1],很显然实际上应该是3 300平方英尺。需要提醒的是,我们在处理数据时,需要有科学的依据来判断哪些为异常值,以及是否需要剔除。一部分极端数据值如果确实是真实有效的话,那么它们对数据分析非常有意义,而异常值对于机器学习结果的影响取决于应用的模型。例如,在回归模型中,异常值的影响将会很大,我们将在第3章中具体介绍这些内容。而其他模型,比如决策树(在第4章中会详细介绍)则受异常值影响较小。

5.清洗缺失数据

在很多大数据中,常常会有数据缺失的情况。一种简单的方法是将缺失的数据或关联的特征直接删除。但这样的处理方式并不是最理想的,而且会减少数据量,从而带来统计偏差。对于分类型数据缺失的处理,最简单的方式是将缺失数据设置为一列,并将其重新命名,比如命名为“缺失值”。而对于数值型数据而言,一种方法是以数据的均值或中位数来替代缺失数据。例如,如果一栋房屋的占地面积是缺失的,但在我们目前已采集的非缺失数据中,房屋占地面积的中位数为3 500,我们则可以将缺失数据替换为3 500;另外一种更复杂的方式是通过模型,即用非缺失值来推导缺失值。有时候,假设数据是随机缺失的,具有一定的合理性。而有时候,数据缺失本身就具有一定的分析价值。在后续的案例中,我们对于缺失数据的处理是通过增加新的变量的方式进行的:如果数据不缺失,该变量被设定为零;否则,该变量被设定为1。

[1] 1 平方英尺= 0.092 9 平方米。