天天看点

2.数据预处理2.数据预处理

2.数据预处理

学习笔记。杨正洪;郭良越;刘玮. 人工智能与大数据技术导论 清华大学出版社.Kindle版本.

在拿到任务和数据后,应该先做数据预处理的基本流程,包括探索性分析、数据清洗和特征工程。本节阐述探索性分析的目的和途径、数据清洗的常见类型和手段、特征工程的重要性和常见方法。

探索性分析( Exploratory Analysis)

探索性分析( Exploratory Analysis),或者叫探索性数据分析( Exploratory Data Analysis)是通过图表等可视化工具对原始数据( Raw Data)进行大致了解和初步分析的过程。探索性分析的目的是让我们对陌生的数据集有个直观和感性的认识,从而在庞大的数据集中发现有价值、值得挖掘的信息,找出数据集中的“亮点”。具体而言,通过探索性分析,我们可以:了解数据集的基本信息。给数据清洗提供方向。为特征工程提供方向 。

数据清洗

好的数据总是比好的算法要强得多(Better data beats fancieralgorithms)。这句话送给初学者是最合适不过的。任何想从事机器学习的数据分析师,首先要记住这句话。如果数据质量差,杂乱无章,即使再好的算法也没有用,就好比加工垃圾一样,用再先进的技术加工出来的成品也是垃圾(Garbagein,garbageout)。之所以要进行数据清洗,是因为在现实生活中,我们遇到的绝大多数数据集都是“不干净的”。比如会出现以下情形:

  • 存在重复记录的数据,比如人口数据中同一个人有两条完全相同的记录。
  • 存在不相关记录比如我们只关注中国人口数据,但数据集中有美国人的信息。
  • 无用的特征信息
  • 文字拼写错误
  • 信息格式不统一
  • 明显错误的离群值(outlier)
  • 缺失数据

那么,如何清洗数据呢?对于离群值(见图4-10),很多人会把离群值所在的记录去掉或者用缺失值代替,但其实很多时候这样做并不是最好的选择。离群值通常指样本中偏离均值较大的数据,在图像中通常处于“孤立”的位置。离群值所表示的数据很可能是有问题的。然而,离群值在被证明“有罪”之前都是清白的,仅当有确切、合适的理由的时候才可以去掉它,并且这样做能够提高模型的预测效果。因为“数值太大”,草率地将其去掉是不可取的,因为这个“大数值”本身可能包含了一定信息。最后无论怎样,离群值所在行的其他特征数据依然是清白的,所以这一条记录不能因为一个特征出现离群值就去掉。

2.数据预处理2.数据预处理

对于缺失值,有几种常见的处理方式。第一种处理方式是用均值或者众数等进行填充。这样做的好处是比较快捷、方便,但可能不是最合理的方式。当缺失值比例较大时,这样做等于人为地向数据集中添加了噪声,因为这些数据并不是真实、准确的信息,从而可能会影响我们对结论的判断。类似的填充方式还有根据前后数值填充、插值填充、模型拟合填充等。第二种处理方式是去掉该特征。当一个特征大部分值都缺失时,如果我们认为这个特征对分析没有帮助,去掉该特征也并非不是一个可取的方法。第三种处理方式是保留缺失值的信息。对于分类型变量,我们可以将缺失值作为新的一类。

特征工程(Feature Engineering)

特征工程(Feature Engineering)又称特征提取,是机器学习建模之前的一个重要步骤。前文提到,机器学习的本质是要找从x到y的映射,我们最终的目标是输出y。如果x“不给力”的话,后面的努力往往会成为徒劳。特征工程就是从原始数据中找到合适的特征集x的过程。在很多机器学习任务中,特征工程是最重要,也是最耗时的环节,其重要性远远超过建模和训练。然而这个过程最容易被初学者忽视。特征工程是漫长而艰苦的过程。在Kaggle数据科学竞赛中,选手们平均花在构建特征集的时间在70%以上。一个好的特征集通常能战胜一个好的模型或者算法。

继续阅读