新一代信息技术基础
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.3 大数据预处理技术

大数据预处理将数据划分为结构化、半结构化、非结构化数据,分别采用传统ETL工具或分布式并行处理框架来实现,总体架构如图1.2.3所示。

图1.2.3 大数据预处理总体架构

结构化数据可以存储在传统的关系型数据库中,关系型数据库在处理事务、及时响应、保证数据的一致性方面具有天然的优势。

非结构化数据可以存储在新型分布式存储系统中,如Hadoop HDFS,半结构化数据可以存储在类似NoSQL数据库中。

分布式存储在系统的横向扩展性、存储成本、文件读取速度等方面有着显著的优势。

传统关系型数据库的数据与分布式数据库的数据之间可以按照数据处理的需求进行迁移(或称转换)。例如,为了进行快速并行处理,需要将传统关系型数据库中的结构化数据导入到分布式存储系统中。

可以利用Sqoop等工具,先将关系型数据库的“表状结构数据”导入到分布式数据库,然后再向分布式数据库的表中导入结构化数据。

数据预处理工作的主要任务有:数据清洗、数据集成、数据转换、数据归约。

1.数据清洗

现实世界的数据一般是不完整的、有噪声的和不一致的。数据清洗过程的任务便是,填充缺失的值,识别离群点特性并滤除噪声,纠正数据中的不一致性问题。

数据清洗在汇聚多个维度、多个来源、多种结构的数据之后,对数据进行抽取、转换和集成加载。在以上过程中,除了更正、修复系统中的一些错误数据之外,更多的是对数据进行归并、整理,并存储处理后的数据。其中,数据的质量至关重要。

下面介绍数据清洗的主要处理方法:

(1)遗漏(不完整)数据处理

假设在分析一个商场销售数据时,发现有多个记录中的属性值为空,如客户未填写其月收入,则该属性值为空,这时可以采用以下方法进行遗漏数据处理。

① 忽略该条记录

若一条记录中有属性值被遗漏了,则将此条记录排除(视为作废),尤其是没有类别属性值而又要进行分类数据挖掘时。当然,这种方法并不很有效,尤其是个别属性(如月收入)遗漏比例较大时。

② 手工填补遗漏值

这种方法一般比较耗时,而且对于存在许多遗漏情况的大规模数据集而言,可行性较差。

③ 利用默认值填补遗漏值

对一个属性的所有遗漏的值均利用一个事先确定好的值来填补,例如,“健康状况”都用“OK”来填补。但当一个属性的遗漏值较多时,若采用这种方法,有可能误导数据挖掘进程。

因此这种方法虽然简单,但并不推荐使用,或使用时需要仔细分析填补后的情况,以尽量避免对最终数据挖掘结果产生较大误差。

④ 利用均值填补遗漏值

计算一个属性值的平均值,并用此值填补该属性所有遗漏的值。例如,若客户的平均月收入为 10000 元,则用此值填补客户“月收入”属性中所有被遗漏的值。

⑤ 利用同类别均值填补遗漏值

这种方法尤其适合在进行分类数据挖掘时使用。

例如,若要对商场客户按信用风险进行分类挖掘时,就可以用在同信用类别(如良好)的客户“月收入”平均值,来填补那些遗漏的“同信用类别”客户“月收入”属性值。

⑥ 利用“最可能值”填补遗漏值

可以利用回归分析、贝叶斯计算公式或决策树推断出该条记录特定属性的最大可能的取值。

例如,利用数据集中其他客户的属性值,可以构造一个分布函数或决策树来预测出客户“月收入”的遗漏值。

最后一种方法是一种较常用的方法,与其他方法相比,它最大限度地利用了当前数据所包含的信息来帮助预测所遗漏的数据。

(2)噪声数据处理

噪声是指,大多数数据符合规律性分布或取值时,但个别的或少量的值出现随机性错误或异常的情况。“去噪”就是找到和去除噪声数据,使数据整体更规范可信,下面介绍两种常用方法。

① Bin方法

Bin方法通过利用噪点数据点的周围点(近邻点),对一组数据排序进行平滑处理。排序后的数据被分配到若干桶(称为 Bin)中。Bin 划分方法一般有两种,如图 1.2.4 所示,一种是等高方法,即每个Bin中的元素的个数相等,另一种是等宽方法,即每个Bin的取值间距(左右边界之差)相同。

图1.2.4 两种典型的Bin划分方法

下面通过给定一个数值型属性(如价格)来说明“平滑去噪”(Bin方法)的具体做法。

如图1.2.5所示,首先,对价格数据进行排序;然后,将其划分为若干等高度的Bin,即每个Bin包含3个数值;最后,既可以利用每个Bin的均值进行平滑,也可以利用每个Bin的边界进行平滑。

图1.2.5 利用Bin方法平滑去噪

利用均值进行平滑时,第一个Bin中4、8、15均用该Bin的均值替换;利用边界进行平滑时,对于给定的Bin,其最大值与最小值就构成了该Bin的边界,利用每个Bin的边界值(最大值或最小值)可替换该Bin中的所有值。

一般来说,每个Bin的宽度越宽,其平滑效果越明显。

② 聚类分析方法

通过聚类分析方法可帮助发现异常数据。相似或相邻近的数据聚合在一起形成了各个聚类集合,而那些位于这些聚类集合之外的数据对象,自然而然地就被认为是异常数据(即噪声数据)。

图1.2.6 基于聚类分析方法的异常数据监测

③ 人机结合检查方法

通过人机结合检查方法,可以帮助发现异常数据。例如,利用基于信息论的方法可帮助识别手写符号库中的异常模式,所识别出的异常模式可输出到一个列表中,然后由人对这一列表中的各个异常模式进行检查,并最终确认无用的模式(真正异常的模式)。这种人机结合检查方法比手工方法的手写符号库检查效率要高许多。

④ 回归方法

可以利用拟合函数对数据进行平滑。例如,借助线性回归方法,包括多变量回归方法,就可以获得多个变量之间的拟合关系,从而达到利用一组变量值来预测另一个变量取值的目的。利用回归分析方法所获得的拟合函数,能够帮助平滑数据并去除其中的噪声数据。

许多数据平滑方法,同时也是“数据消减”方法。例如,上面例子的Bin方法可以帮助消减一个属性中的不同取值,这也就意味着Bin方法可以作为基于逻辑挖掘方法的数据消减处理方法。

(3)不一致数据处理

现实世界的数据库经常会岀现数据记录内容不一致的问题,其中的一些数据可以利用它们与外部的关联关系,通过手工解决这种问题。

例如,数据录入错误可以通过与原稿进行对比来加以纠正。也可以让三个人同时录入一篇文章,出现不一致时,进行比较,取出现次数多者(假设两人正确一人错误)作为“正确”数据。此外还有ECC纠错码等方法可以帮助纠正一些数据不一致问题。知识工程工具也可以帮助发现违反数据约束条件的情况,从而帮助纠错。

由于同一属性在不同数据库中的取名不规范,常常使得在进行数据集成时,导致不一致问题的发生。

2.数据集成

数据集成是指,将多个数据源中的数据合并,然后存放到一致的数据存储机制(如数据仓库)中。这些数据源可能包括多个数据库、数据立方体或一般文件。在进行数据集成时,有许多问题需要考虑。

(1)模式集成问题

模式集成问题是指,如何使来自多个数据源的现实世界的实体相互匹配,这其中就涉及实体识别问题。例如,如何确定一个数据库中的“customer_id”与另一个数据库中的“customer_number”是否表示同一实体(“客户编号”)。

数据库与数据仓库通常包含元数据,这些元数据可以帮助避免在模式集成时发生错误。每个属性的元数据包括名字、含义、数据类型和属性的允许取值范围,以及处理空白、零或null值的空值规则。这样的元数据可以用来帮助避免模式集成的错误。元数据还可以用来帮助变换数据(例如,pay_type 的数据编码在一个数据库中可以是“H”和“S”,而在另一个数据库中是1和2)。因此,这一步也与前面介绍的数据清洗有关。

(2)冗余属性问题

冗余属性问题是数据集成中经常发生的另一个问题。若一个属性可以从其他属性中推演出来,那么这个属性就是冗余属性。

例如,一个客户数据表中的月平均收入属性就是冗余属性,显然它可以根据月收入属性计算出来。此外,属性命名的不一致也会导致集成后的数据集出现数据冗余问题。

利用相关分析可以帮助发现一些数据冗余情况。

例如,给定两个属性AB,则根据这两个属性的数值可分析出这两个属性间的相互关系。

如果两个属性之间的关联值r>0,则说明两个属性之间是正关联,也就是说,若A增加,则B也增加。r值越大,说明属性AB的正关联性越强。

如果关联值r=0,则说明属性AB相互独立,两者之间没有关系。如果r<0,则说明属性AB之间是负关联,也就是说,若A增加,则B就减少。r的绝对值越大,说明属性AB的负关联性越强。

(3)数据值冲突的检测与处理

对于现实世界的同一实体,来自不同数据源的属性值可能不同。这可能是因为表示方法、比例或编码不同。例如,重量属性可能在一个系统中以公制单位存放,而在另一个系统中以英制单位存放。对于连锁旅馆,在不同城市其房价不仅可能涉及币种,还可能涉及不同的服务(如免费早餐)和税负。

3.数据转换

数据转换是将数据进行转换或归并,从而构成一个适合数据处理的描述形式。数据转换包含以下处理内容。

(1)平滑处理

帮助除去数据中的噪声数据,主要技术方法有Bin方法、聚类方法和回归方法等。

(2)合计处理

对数据进行汇总或合计操作。例如,每天的数据经过合计操作可以获得每月或每年的总额。这一操作常用于构造数据立方或对数据进行多粒度的分析。

(3)数据泛化处理

用更抽象(更高层次)的概念来取代低层次或数据层的数据对象。

例如,街道属性可以泛化到更高层次的概念,如城市、国家,数值型的属性,如年龄属性,可以映射到更高层次的概念,如年轻、中年和老年。

(4)规格化处理

将有关属性数据按比例投射到特定的小范围之中。例如,将工资收入属性值映射到 0到1范围内。

(5)属性构造处理

根据已有属性集构造新的属性,以帮助数据处理过程。

4.数据归约

(1)数据立方聚集:聚集操作用于数据立方结构中的数据。

图 1.2.7 展示了在三个维度上对某公司原始销售数据进行合计所获得的数据立方。它从时间(年代)、公司分支,以及商品类型三个维度描述了相应(时空)的销售额(对应的小立方块)。

图1.2.7 数据立方合计描述

每个属性都可对应一个概念层次树,以帮助进行多抽象层次的数据分析。例如,一个分支属性的(概念)层次树,可以提升到更高一层的区域概念,这样就可以将多个同一区域的分支合并到一起。

在最低层次所建立的数据立方称为基立方,而最高抽象层次对应的数据立方称为顶立方。

顶立方代表整个公司三年中,所有分支、所有类型商品的销售总额。显然每一层次的数据立方都是对低一层数据的进一步抽象,因此它也是一种有效的数据消减。

(2)属性子集选择:通过删除不相关的或冗余的属性(或维度)可以缩小数据集。属性子集选择的目标是,找出最小属性集,使得数据类的概率分布尽可能地接近使用全部属性数据所对应的原分布。对于属性子集的选择,一般使用压缩搜索空间的“启发式算法”。通常,这些方法属于“贪心算法”,在搜索属性空间时,总是做看上去是当时最佳的选择。其策略是,做局部最优选择,期望由此导致全局最优解。在实践中,这种“贪心算法”是有效的,并可以逼近最优解。

① 逐步向前选择:该过程由空属性集作为归约集(存放选出的属性)开始;然后,再次选定原属性集中最好的属性,并将它添加到归约集中。在其后的每一次迭代中,均将剩下的原属性集中最好的属性添加到归约集中。

② 逐步向后删除:该过程由整个属性集开始,在每一步,删除尚存于属性集中的最差属性。

③ 向前选择和向后删除的结合,即一方面选出最好属性者移入归约集;另一方面删除当前集合的最差属性。

④ 决策树归纳:决策树算法中的 ID3、C4.5 和 CART 最初是用于分类算法的。决策树归纳构造一个类似于流程图的结构,其中每个内部节点(非树叶)表示一个属性的测试,每个分枝对应于测试的一个输出,每个外部(树叶)节点表示一个类预测。在每个节点,算法选择最好的属性,将数据划分成类。

(3)维度归约:使用编码机制减小数据集的规模,例如:小波变换和主成分分析。

(4)数值归约:用替代的、较小的数据表示替换或估计数据,如参数模型(只需要存放模型参数,不是实际数据)或非参数方法,如聚类、抽样和使用直方图。

(5)离散化和概念分层产生:属性的原始数据值用区间值或较高层的概念替换。数据离散化是一种数据归约形式,对于概念分层的自动产生是有用的。离散化和概念分层产生是数据挖掘强有力的工具,允许挖掘多个抽象层的数据。

很重要的是,用于数据归约的计算时间不应超过或“抵消”对归约数据挖掘节省的时间。