罗长银,陈学斌*,宋尚文,刘 洋
(1. 华北理工大学理学院,唐山 06300;2. 河北省数据科学与应用重点实验室,唐山 06300;3. 唐山市数据科学实验室,唐山 06300)
随着大数据时代的到来,隐藏在大数据下面的价值信息成为人们对数据进行操作的源动力。根据实际的需求中,可以总结为三个方面:要全体不要抽样;要效率以及各方准确度良好不要绝对的精确,要相关不要因果[1]。近年来,数据储量从原来4.4ZB到现在的 44ZB,海量数据使得人们在处理问题时也将面临巨大的挑战,但同时也必须要面临更加复杂的数据环境。数据预处理作为数据挖掘、数据分析、数据安全等研究前的重要一环,对数据进行合理有效的预处理操作可以使得数据在存贮、计算等方面都会减少相应的复杂度,文献[2]对医院日志文件中的数据进行过滤及填充,使模型的准确度得到提升。文献[4]通过构建规则库和样本库,达到相应的数据预处理方法进行自动化的数据预处理,可以提升模型的准确度,但没有考虑数据的安全性与有效性,本文主要从数据清洗、数据归约两部分对数据进行处理,使其能够在安全的前提下,实现对数据的高效利用。
大数据的环境下,使得数据预处理成为数据挖掘等技术发展的不可或缺的一环,数据预处理技术包括数据清洗、数据集成、数据规约、数据变换四个部分[3],其中数据清洗包括重复数据的清洗[5]、缺失值的填充[6]、以及对一些异常值的处理[7],本文只针对数据清洗和数据规约对数据做了相应的预处理,经实验对比,经过处理后的数据既能满足数据挖掘的需求,同时也降低了复杂度和成本。
数据清洗[8-10]是完成格式的标准化、对空缺值进行处理、清除重复的数据以及对异常数据进行错误纠正和清除等操作。
数据规约[11-14]:数据规约是针对原始数据集中地属性和记录,实现有效的数据采集和对应的属性选择,尽可能的降低数据规模,可以在有效的解决问题的同时减少时间复杂度与空间复杂度,可以通过聚类、属性约简、以及数据欠采样以及将冗余特征值删除等方式,在最大限度地保证数据的原有特征的基础上,实现对数据量的有效精简。数据规约是在保证原有数据的完整性和有效性的基础上,在数据库以及数据表中提取出特征性的数据集合的基础上进行的。
Jaccardx相似系数[15]:用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高,用Jaccard(A,B)表示。与Jaccard系数相关的指标叫做Jaccard距离,用于描述集合之间的不相似度。Jaccard距离越大,样本相似度越低,用
数据约简[16]:数据约简包括两个方面:基于特征选择约简和基于实例选择约简。基于特征选择的数据约简是指在所有特征中选择某些重要的、有代表性的特征,去除对处理结果小甚至无影响的特征,已达到提取主要特征的目的。如主成分分析法等。基于实例选择的数据约简是从原始数据集中选择具有代表性的实例,去除冗余的和相似性较大的数据,得到相对较小的约简数据集,已达到减少数据量和改变数据分布的目的。如基于样本距离等数据约简方法。
牛顿插值法[17]:每增加一个点,不会导致之前的重新计算,只需要算和新增点有关的即可,牛顿插值法为:
马氏距离[18]:表示数据的协方差距离,与欧氏距离不同的是它考虑到各种特性之间的联系,并且是尺度无关的,即独立于测量尺度。对于一个均值为
协方差矩阵为∑ 的多变量矢量:
其马氏距离为:
因其数据量的增加使得数据冗余、错误等情况的发生也在不断的增加,利用各种清洗技术,得到其“有效”的数据集合。本文的数据清洗技术将从重复数据的处理与填充缺失值以及在处理异常值三个方面对数据进行合理操作,使得数据在满足基本安全的情况下能够使得减少数据量增大所带来的复杂度。
为了提升数据挖掘的速度和准确度,去除数据中的重复记录是很有必要的。常见的数据类型为数值型数据以及字符型数据和符号型数据,对于数值型数据,我们采用Jaccard系数来度量数值型数据的相似性,Jaccard系数定义如(1)所示:
其中,X,Y均为每一个数值型数据所构成的集合。当Jaccardt>时可以说两个数值型数据的相似程度高,当Jaccardt≤时,说明二者数据的相似程度比较低。
对于字符型数据来说,利用文献[2]中其改进的字段匹配算法对字符型数据计算其分词匹配度与权值匹配度,本文对其分词匹配度的计算方法进行改进,提出了相对匹配度(R ppd- )的算法,如下公式所示:
K为两个字符串的相同的字数,当A中的字符匹配B中的字符时,则分母为B字符串中的字符的个数,即为|B|,当B中的字符匹配A中的字符时,则分母为|A|字符串中的字符的个数,即为|A|。当相对匹配度的值大于0.8时,则说明,字符串A相对字符串B来说,为高度的相似,这时需要对两个数据进行仔细的比对,看是否为重复数据,当此字符串完全相同时,还需进一步的比对此样本的其他属性信息,例如:名字可能存在相同,生日不同的情况,但如果生日也相同,此概率相对较小,即使最终结果为不同,也可能损失了时间以及效率复杂度。
在数据集中,缺失值是经常出现的,对于不同的样本来说,可能缺失的是一个属性值数据,也可能缺失的是一个样本中的多个属性值数据,本文只对缺失值少于4个以下的数据缺失值进行补充,对于同一样本中缺失的属性值数据在2个(含2个)以下时,采用拉普拉斯分布中的数值来填充缺失值,在不会对原始数据产生大的影响的同时,添加此缺失值,也对数据提供了一定的安全性,对于同一样本中缺失的属性值数据大于4个的,将对其采用传统的方法,对其删除此样本,同时也可以减少数据量,减少计算复杂度。
对于缺失的属性值的数据来说,本文采用牛顿插值法来填充缺失的数据值,可用均方误差来检验填充数值的误差,公式为:
对于任何的数据集来说,异常值的数据没有太多的研究价值,故必须去除数据集中所存在的孤立点,本文基于马式距离的公式来计算数据集中的某一点与其他各个点之间的距离,并计算其协方差矩阵,根据协方差矩阵来判定那些数据导致协方差矢量变大,将协方差矩阵中数值较大的值所对应的数据删除即可,公式如下所示:
对于目前的数据存储量来说,在保证原有数据的完整性与有效性的基础上,采用聚类以及将冗余属性删除等形式,将降低数据规模,以此达到精简数据量的目的。本文采用数据约简的方法,在减少数据库中数据表的同时减少冗余的属性。
数据约简包括样例约简和属性约简,对于样例约简,本文采用文献[19]中的数据欠采样的方法,基本思想为:先对数据集进行聚类,得到聚类簇集合Q = { Q1, Q2,… ,Qn},然后根据聚类后的不平衡比例系数确定采样倍率 N,并对每个聚类簇进行数据抽样,最后得到欠采样后的数据集,欠采样倍率N的计算方法如下:
其中,i表示将连续值的数据离散成n个,m表示为在某个区间范围内对数据集聚成的个数。而属性约简的方法为:通过计算各个属性之间的距离,将距离较远的属性去除,在计算其对整个数据集的影响,如果影响较小或无影响,则可以删除此属性,可以达到减少数据量的目的,采用主成分分析法(PCA)[20]来实现对属性的约简,主要思想:先将原始数据集按列组成n行m列矩阵X,将μ的每一行进行进行零均值化,即减去这一行的均值,再求特征值及对应的特征向量,将特征向量按对应特征值的大小从上到下排成矩阵,取前k行组成矩阵P,Y PX= 即为降维到k维后的数据。
本文在数据预处理阶段是基于 python语言和pycharm集成软件开发实现。实验硬件环境为:Inter(R) Core i5-4200M CPU 2.50 GHz处理器,内存8 G;操作系统为windows 10.在实验数据方面,采用从 https://archive.ics.uci.edu/ml/index.php下载的数据集。
实验的数据采取随机破坏20%的数据作为初始原始数据集,其数据变化如图1所示,数据的不断变化反映数据集的多样性,同时也可验证本文所采取的对数据预处理阶段的泛化能力。
实验分为四部分,第一部分为:从UCI上下载相应的数据集,并随机对下载的数据集破坏100次且每次破坏20%表示多样数据对本文所采取的数据预处理阶段对模型的影响,第二部分为:将破坏的数据进行填充处理,针对缺失值为2个以下的,因牛顿插值法在增减节点数目时,只需增减相应节点处的计算量的优点,将缺失值在2至4个时,采用牛顿插值法,可以在减少计算量的同时准确度得到提升。第三部分为:去掉重复数值型数据时,将任意两个样本中多个属性的相似度均超过阈值,则这两个样本重复,将其删除(采取Jaccard系数作为数值型属性的比对,Rppd作为字符型属性比对),第四部分为:从样本约简和属性约简两方面对数据规模进行简化的同时还能提升模型精度,进而避免过拟合问题,其每个阶段的数据所建立模型的准确度如表1所示。
图1 随机变化的数据集Fig.1 Randomly changing dataset
为验证本文所采取的数据预处理对模型的影响,对完整数据集随机破坏100次且每次的比例为20%作为原始数据集,同时使用 CART分类树、支持向量机、线性分类器三种作为检验模型,图2表示三种模型在100次随机数据集上的变化情况,将模型在破坏100次的数据上得分的平均值作为模型的准确度,则在原始数据集上CART分类树的准确度为 92.51%,支持向量机的得分为 50.88%,线性分类器的准确度为54.55%。
图2 3种检验模型在原始数据集上的变化图Fig.2 The changes of the three test models on the original data set
填充缺失值是数据清洗中重要的部分,本文对缺失值少于2个的情况,将每个属性采用拉图拉斯分布进行填充,对于缺失值在2至4个的情况,采用牛顿插值法同样的对每个属性进行填充,图3表示的是三种检验模型100次在缺失值填充后的数据集上的变化图。在缺失值填充后的数据集上,CART分类树的准确度为95.24%,支持向量机的准确度为94.7%,线性分类器的准确度为 98.44%,与原始原始的结果相比较,三种模型在缺失值填充后的数据集上的准确度得到大幅上涨,其中线性分类器与支持向量机均上涨约43.82%,CART分类树上涨2.73%。
图3 三种检验模型在缺失值填充后的数据集上的变化图Fig.3 The change chart of the three test models on the data set after the missing value is filled
去除重复数据能降低模型的复杂度,本文对于数值型数据采用 Jaccard系数作为任意两个样本的比对,对于字符型数据采用 Rppd系数作为任意两个样本的比对,只有当数据集中多个属性值的对比系数均大于阈值方可作为重复数据处理,图4为三种检验模型100次在去除重复数据后的数据集上的变化图。CART分类树的准确度为95.45%,支持向量机的准确度为 94.74%,线性分类器的准确度为98.61%,与填充缺失值后的数据集相比较,三种模型的准确度均上涨。
图4 三种检验模型在去除重复数据后的数据集上的变化图Fig.4 The change chart of the three test models on the data set after removing duplicate data
数据规约可降低模型过拟合的可能,本文分别从样例约简和属性约简两方面减少数据规模的同时保证模型的准确度,其结果如图5所示。CART分类树的准确度为 97.42%,支持向量机的准确度为99.69%,线性分类器的准确度为99.98%,与去除重复数据后的数据相比较,三种模型的准确度再次上涨,且三种模型的准确度均在97%以上。
图5 三种检验模型在数据规约处理后的数据集上的变化图Fig.5 The changes of the three test models on the data set after data reduction processing
图6 表示数据清洗、数据规约两方面的数据预处理技术对CART分类器的影响,得到原始数据集上 CART分类器准确度为 92.51%,缺失值填充后CART分类器准确度为92.54%,去除重复值后CART分类器准确度为 95.45%,聚类数据处理后数据集CART分类器准确度为97.43%,可以得出数据预处理技术可以提升CART分类器的准确度。
图6 CART分类树在数据预处理各阶段的变化图Fig.6 CART classification tree at various stages of data preprocessing
图7 表示数据清洗、数据规约两方面的数据预处理技术对支持向量机的影响,得到原始数据集上支持向量机准确度为50.89%,缺失值填充后支持向量机准确度为 94.7%,去除重复值后支持向量机准确度为94.74%,聚类数据处理后数据集支持向量机准确度为99.69%,可以得出数据预处理技术可以大幅度提升支持向量机的准确度。
图7 支持向量机在数据预处理各阶段的变化图Fig.7 Support vector machine changes at various stages of data preprocessing
图8 表示数据清洗、数据规约两方面的数据预处理技术对线性分类器的影响,得到原始数据集上线性分类器准确度为54.55%,缺失值填充后线性分类器准确度为98.44%,去除重复值后线性分类器准确度为98.61%,聚类数据处理后数据集线性分类器准确度为99.98%,可以得出数据预处理技术可以提升线性分类器的准确度。
图8 线性分类器在数据预处理各阶段的变化图Fig.8 The change graph of the linear classifier at each stage of data preprocessing
本文采用方差[18]来表示模型的稳定性,其中方差公式为:
其中n代表次数,m代表100次的平均值,公式为:
经计算结果如表2所示。
由上表可知,三种验证模型在数据预处理各阶段的均值均在上升,由此可说明本文说采取的数据预处理技术将会提升模型的准确度,且三种模型在数据预处理各阶段的方差均在0.4%以下,说明本文所采取的数据预处理技术的稳定性较好,符合要求。
表2 数据预处理结果比较表Tab.2 Comparison table of data preprocessing results
本文从数据清洗和数据规约两方面对数据预处理技术进行处理,首先将完整数据集随机破坏20%作为本文的原始数据集,反映数据多样性对模型的影响,然后对原始数据集填充缺失值,对于缺失两个以下的采取拉普拉斯分布对每个属性进行填充,对于缺失2至4个的情况采用牛顿插值法填充,可以得模型的准确度上升,尤其是支持向量机和线性分类器,涨幅均超过40%,然后模型在去除重复值的数据上进行训练,得其准确度再次上升,再对数据进行样例约简和属性约简,从而在避免过拟合的同时也能提高模型的准确度,经三种验证模型的得分均超过97%,可说明本文所采取的数据预处理的措施是真实有效的。
本文针对数据清洗和数据规约两方面对数据预处理技术进行处理,原始数据集经过填充缺失值、去除重复值、样例约简和属性约简四步预处理后,三种验证模型的准确度都得到大幅提升,同时其各阶段模型模型的得分均在0.4%以下,说明模型的稳定性较好,所采取的数据预处理的措施是真实有效的。与传统的数据预处理技术相比,主要有2点改进:第一点是没有考虑数据预处理阶段数据集成、数据变换对模型的影响,第二点是未能考虑异构数据对模型的影响。实验表明,本文所采取的数据预处理技术会大幅提升模型的准确度。未来将添加数据集成、数据变换两方面的数据预处理技术来验证数据对模型的影响。