CN103336791B - 基于Hadoop的粗糙集快速属性约简方法 - Google Patents

基于Hadoop的粗糙集快速属性约简方法 Download PDF

Info

Publication number
CN103336791B
CN103336791B CN201310224737.7A CN201310224737A CN103336791B CN 103336791 B CN103336791 B CN 103336791B CN 201310224737 A CN201310224737 A CN 201310224737A CN 103336791 B CN103336791 B CN 103336791B
Authority
CN
China
Prior art keywords
attribute
data
feature
hadoop
reducer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310224737.7A
Other languages
English (en)
Other versions
CN103336791A (zh
Inventor
蒋云良
杨建党
刘勇
范婧
张雄涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huzhou University
Original Assignee
Huzhou University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huzhou University filed Critical Huzhou University
Priority to CN201310224737.7A priority Critical patent/CN103336791B/zh
Publication of CN103336791A publication Critical patent/CN103336791A/zh
Application granted granted Critical
Publication of CN103336791B publication Critical patent/CN103336791B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种基于Hadoop的粗糙集快速属性约简方法,包括a)建立基于Hadoop的分布式平台、b)生成候选集、c)计算每个属性的重要度、d)选择重要度最大的属性加入到候选集、e)判断是否满足停止条件、f)保存特征选择的状态等步骤。本发明基于Hadoop分布式平台对并行的数据挖掘算法并行化进行分析,实现了粗糙集属性约简算法的并行化,并行后的属性约简大大降低了时间复杂度,执行中间过程大大减少了中间结果的输出,提高了大规模数据的分析效率,从而将纷繁多样的海量数据转换成具有信息和商业价值的可用数据,进而完成数据挖掘和分析优化。

Description

基于Hadoop的粗糙集快速属性约简方法
【技术领域】
本发明涉及数据属性约简方法,尤其是针对大数据分布式属性约简方法。
【背景技术】
随着高科技信息产业的高速发展,人类历史篇章的不断更新,如今我们已经进入了一个数据爆炸、信息膨胀的时代,每天都有海量数据分秒不歇的被产生,运转和利用。“大数据时代”来临,一分钟内,微博上新发的数据量超过10万,纽约证券交易所每天产生1TB的交易数据,全球每天生成2.5艾(1艾等于10的18次方)字节的数据。IDC最近的数字宇宙研究预测,到2020年,世界的数据存储总额将达到35ZB(1Z等于10的21次方)。面对海量数据的迅猛增长,如何更有效的分析长期积累的切仍在持续增长的海量数据,从中发掘市场商业价值,支持企业决策和业务发展是当今众多拥有大规模数据企业所面临的严峻挑战。
数据挖掘是从大量数据中提取或挖掘知识,利用数据挖掘工具进行数据分析,可以发现重要的数据模式,对商务策略、知识库、科学和医学研究做出巨大贡献。特征选择和属性约简被视为模式识别、机器学习和数据挖掘十分重要的数据预处理步骤。同时,特征选择和属性约简本身也是一类非常重要的机器学习任务,目的在于删除不相关、弱相关或冗余的属性或维,精确的揭示特征与特征,特征与分类决策之间的相关性,直接帮助用户理解数据的本质。在营销分析中,产品特征与产品销量之间的关系可以帮助制定正确的营销策略和指导设计师改进产品。
随着数据的爆炸式增加,数据的种类越来越丰富,不仅在数据规模上不断膨胀,而且数据的维度也很高。对属性约简方法提出了新的要求。一个好的属性约简方法,不仅仅能够有效地降低数据属性维度,还要在处理大规模数据有出良好的时间效率。现有的一些属性约简理论并未考虑大数据情况,约简过程非常耗时,面对海量数据时,根本无法实际应用。虽然现在也有一些针对大数据量的属性约简算法,却不适用于分布式存储的数据。
随着Web2.0的兴起,社交网络得到了飞速的发展,各种社交网站的访问量远远超过传统门户网站,并且用户量庞大,上网时间剧增,使得网络产生的数据量激增。网站运营商面对的难题就是如何为庞大的用户群提供稳定,快捷的服务。Google在大数据处理上走在了前列,推出的Google文件系统和MapReduce编程模型,满足了超大规模数据的存储和计算需求。
由于Google公司研发的Google文件系统和MapReduce编程模型以及其处理大规模海量数据的特有魅力,在学术界和工业界引起了非同凡响。学术界不断涌现出针对海量数据处理、立足于MapReduce的研究成果。工业界,大量类似于Google文件系统、采用类MapReduce编程模型的系统也得到了广泛的部署。随后云计算的概念被提出,使人们看到了信息爆炸时代解决海量数据处理问题的有效方案。亚马逊和谷歌是云计算的先驱,Google应用程序引擎(Google App Engine)和亚马逊网络服务(Amazon Web Service)[43]是最早的云计算服务。IBM、微软、中国移动、中国联通、中国电信等国内外知名IT厂商也根据各自的优势推出了自己的云计算计划。
今天,在像互联网、科学数据处理、商业智能数据分析等具有海量数据需求的应用变得越来越普遍时,无论是从科学研究还是从应用开发角度来看,掌握像Google文件系统和MapReduce编程模型这样的技术已经成为一种趋势。在这样的背景下,实现了Google文件系统和MapReduce编程模型的Hadoop开源系统成为使用最为广泛的分布式架构。Hadoop已经成为许多互联网公司基础平台的一个核心部分,如雅虎、FaceBook、LinkedIn和Twitter。许多传统的行业,如传媒业和电信业,也开始采用Hadoop系统。Hadoop已经成为应用最为广泛的云计算平台。
MapReduce模型简单、易于理解、易于使用。大量数据处理问题,包括很多机器学习和数据挖掘算法,都可以使用MapReduce实现。机器学习与数据挖掘密切相关,各种机器学习算法在云计算平台下的实现也成为一个研究热点。Alina等阐述了如何使用MapReduce进行快速的聚类[50]。Bahman Bahmani等描述了用MapReduce进行快速地PageRank[29]。Apache Mahout[45]是Apache Software Foundation开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法。该项目已经实现许多常见的用于集群和分类的机器学习算法。在数据挖掘,信息检索等领域,很多算法的执行过程是多次迭代的过程,比如PageRank,SSSP(Single Source Shortest Path)。然而在传统的MapReduce模型上运行迭代式作业,性能非常低。Twister[48]和Haloop[45,46]就是针对迭代式的算法提出的MapReduce模型的改进。不过Twister和Haloop的模型抽象的不够高,支持的计算有限。
粗糙集理论(Rough Set)作为一种数据分析处理理论在1982年由Pawlak提出,它是一种用于描述具有不确定性、不完整性数据的数学工具,它能有效地分析不精确、不一致、不完整等各种不完备信息,还可以对数据进行分析和推理,从中发现潜在的知识或规律。粗糙集理论作为继概率论,模糊集,证据理论之后的又一个处理不确定性的数学工具。粗糙集理论处理不确定性、不完整性数据的简单实用性以及有效性是令人惊奇的,它能在创立后得到全球学术界的认可和在实际应中的推广,成为一个国际性的研究热点。作为一种全新的软计算方法[3],粗糙集近年来越来越受到重视,其有效性已在许多科学与工程领域的成功应用中得到证实。糙集应用研究主要包括属性约简、知识获取、数据挖掘、知识的不确定性度量等,是当前国际上数据挖掘、机器学习、人工智能理论及其应用领域中的研究热点之一。
特征选择和属性约简在机器学习、模式识别和数据挖掘中起着举足轻重的作用。一直以来,受到了学术界的广泛关注。伴随着信息获取和存储技术的发展,在一些现实应用中,获取并存储在数据库中的数据的维度可能有几十,几百,甚至上千。在有限的训练样本的情况下,过多的特征属性会严重的影响学习进程,并且许多特征是不重要的,或者是冗余的,这些冗余的特征,不仅会增加计算复杂度,还会降低分类器的预测能力。为了简化分类器,改善分类精度以及降低处理数据的维度,我们需要选择出一套合适的特征子集。
多年来,已有不同的理论方法运用于解决属性约简的复杂度。Pawlak粗糙集理论作为一种处理不确定信息分类问题的数学工具,在特征子集选择和约简、分类器设计等方面取得了成功的发展。Pawlak粗糙集建立在等价关系和划分的基础上,适合处理名义属性描述的分类问题。为了解决数值属性的粗糙计算问题,就要将数值属性离散化,转化为符号属性进行处理。但是离散化过程不可避免地会带来信息损失,从而导致学习到的模型不能反映原始数据的知识结构。
为了处理数值数据,学者提出了邻域粗糙集的概念。邻域粗糙集不再要求用近似的基本信息粒子中的对象完全相同,而是与邻域的中心距离小于某一阈值即可。Q.H.Hu等根据邻域粗糙集理论给出了邻域粗糙集模型,设计了可以同时约简名义型、数值型、混合型数据的约简算法。
2003年Dash和Liu提出了一致性指标来估计离散特征空间的分类能力,认为一致的样本显然能够被正确分类,但一致的样本也未必会被错分,不一致的样本中只有处于少数类的样本才会被错分,而处于多数类的样本能够正确分类。一致性指标解决了Pawlak粗糙集无法容忍等价类中的不一致信息,不能精细刻画边界区域的类分布情况的问题。将一致性指标的思想引入到邻域粗糙集,从而解决混合类型变量分类能力的精细刻画问题。
上述的理论和模型都是基于小数据量或者单节点基础上,面对大数据、分布式的情况,这些属性约简的方法时间效率成为瓶颈。邻域粗糙集模型引入了领域的概念,使得一些经典粗糙集的属性约简方法不能适用于邻域粗糙集模型,而邻域粗糙集模型在计算样本邻域是需要花费大量的时间计算距离,导致邻域粗糙集模型的属性约简效率不高。针对大数据通过减少样本规模、缩小搜索空间来快速计算样本的邻域成为设计邻域粗糙集模型属性约简高效算法的突破口。基于MapReduce编程模式,实现属性约简算法的并行化,也可以突破单节点上大数据属性约简的瓶颈。但是,当前国内外关于分布式的属性约简方法的研究很少。
【发明内容】
本发明的目的就是解决现有技术中的问题,提出一种基于Hadoop的粗糙集快速属性约简方法,能够提高大规模数据的分析效率,从而将纷繁多样的海量数据转换成具有信息和商业价值的可用数据,进而完成数据挖掘和分析优化。
为实现上述目的,本发明提出了一种基于Hadoop的粗糙集快速属性约简方法,包括以下步骤:
a)建立基于Hadoop的分布式平台:建立Hadoop分布式文件系统和MapReduce并行编程模型;所述Hadoop分布式文件系统采用主从结构体系,由一个管理者和多个工作者构成,管理者管理文件系统的命名空间,维护文件系统树及整棵树内所有的文件和目录,工作者是文件系统的工作节点,根据需要存储并检索数据块,并且定期向管理者发送“心跳”报告,如果管理者在指定的时间段内没有收到工作者的“心跳”报告,则管理者启动容错机制对其进行处理;所述MapReduce并行编程模型将任务分成若干小任务去执行,每个小任务对集群节点本地存储的数据块进行处理;
b)生成候选集:采用搜索策略生成一组待评价特征子集作为候选集,最初的候选集是空集或者特征全集或者随机产生的一组特征子集;
c)计算每个属性的重要度:建立一个Mapper类和一个Reducer类,Mapper类读入样本数据,并将样本集合按照已选的属性集合为每个待评价的属性分配对应的样本集合作为Reducer类的输入,每个reducer只接受一个属性的所有样本子集,并在一个reducer之内通过组合键数据进行分区,Reducer任务的个数就是待评价的属性个数,对应的样本集合将以不同的属性编号输入到对应的Reducer任务中,多个Reducer任务并行执行,采用相同的评价方法来评价每个属性的重要度;
d)选择重要度最大的属性加入到候选集:将c)步骤中的输出作为本步骤的输入,与之前最大的重要度值进行比较,如果当前属性的重要度值更高,则把当前的属性作为最好的特征子集添加到候选集中;
e)判断是否满足停止条件:采用特征产生过程和评价过程作为停止条件,特征产生过程的停止条件有两种:一种是判断是否已经选择了预先定义的特征个数,另一种是判断是否已经达到预先定义的迭代个数;评价过程的停止条件有两种:一种是判断是否添加或剔除了一个特征将产生一个更好的特征子集,另一种是判断是否最优特征子集已经得到;
f)保存特征选择的状态:分别保存已选择的特征集合和未选择的特征集合,c)步骤中对未选择的特征集合计算重要度,e)步骤中已选择的特征集合和未选择的特征集合进行更新,最后将已选择的特征集合和未选择的特征集合作为结果输出。
作为优选,所述b)步骤中搜索策略采用穷举法,从空集开始,采用广度优先搜索策略,直到找到一个能够完整预测分类的最小子集。
作为优选,所述b)步骤中搜索策略采用完全搜索算法,从特征全集开始,每次剔除一个特征。
作为优选,所述b)步骤中搜索策略采用启发式搜索算法,从空集开始,每次放入一个能够使选择的特征子集覆盖率更高的特征,直到“覆盖率”到达一个设定的值,或者所有特征被穷举完的时候,算法停止。
作为优选,所述b)步骤中搜索策略采用随机概率搜索算法,以相同的概率随机的选择特征子集,并且保留满足某一评价标准的一个上限的子集,不断和新选出的取值比较,直到找到一个满足预设条件的子集,或者到达预先设定的尝试次数,算法停止。
作为优选,所述c)步骤中评价方法采用基于依赖度的属性评价方法或者基于一致性的属性评价方法。
本发明的有益效果:本发明基于Hadoop分布式平台对并行的数据挖掘算法并行化进行分析,实现了粗糙集属性约简算法的并行化,并行后的属性约简大大降低了时间复杂度,执行中间过程大大减少了中间结果的输出,提高了大规模数据的分析效率,从而将纷繁多样的海量数据转换成具有信息和商业价值的可用数据,进而完成数据挖掘和分析优化。
本发明的特征及优点将通过实施例进行详细说明。
【具体实施方式】
为实现上述目的,本发明提出了一种基于Hadoop的粗糙集快速属性约简方法,包括以下步骤:
a)建立基于Hadoop的分布式平台:建立Hadoop分布式文件系统和MapReduce并行编程模型;所述Hadoop分布式文件系统采用主从结构体系,由一个管理者和多个工作者构成,管理者管理文件系统的命名空间,维护文件系统树及整棵树内所有的文件和目录,工作者是文件系统的工作节点,根据需要存储并检索数据块,并且定期向管理者发送“心跳”报告,如果管理者在指定的时间段内没有收到工作者的“心跳”报告,则管理者启动容错机制对其进行处理;所述MapReduce并行编程模型将任务分成若干小任务去执行,每个小任务对集群节点本地存储的数据块进行处理;
b)生成候选集:采用搜索策略生成一组待评价特征子集作为候选集,最初的候选集是空集或者特征全集或者随机产生的一组特征子集;
c)计算每个属性的重要度:建立一个Mapper类和一个Reducer类,Mapper类读入样本数据,并将样本集合按照已选的属性集合为每个待评价的属性分配对应的样本集合作为Reducer类的输入,每个reducer只接受一个属性的所有样本子集,并在一个reducer之内通过组合键数据进行分区,Reducer任务的个数就是待评价的属性个数,对应的样本集合将以不同的属性编号输入到对应的Reducer任务中,多个Reducer任务并行执行,采用相同的评价方法来评价每个属性的重要度;
d)选择重要度最大的属性加入到候选集:将c)步骤中的输出作为本步骤的输入,与之前最大的重要度值进行比较,如果当前属性的重要度值更高,则把当前的属性作为最好的特征子集添加到候选集中;
e)判断是否满足停止条件:采用特征产生过程和评价过程作为停止条件,特征产生过程的停止条件有两种:一种是判断是否已经选择了预先定义的特征个数,另一种是判断是否已经达到预先定义的迭代个数;评价过程的停止条件有两种:一种是判断是否添加或剔除了一个特征将产生一个更好的特征子集,另一种是判断是否最优特征子集已经得到;
f)保存特征选择的状态:分别保存已选择的特征集合和未选择的特征集合,c)步骤中对未选择的特征集合计算重要度,e)步骤中已选择的特征集合和未选择的特征集合进行更新,最后将已选择的特征集合和未选择的特征集合作为结果输出。
一、粗糙集以及属性约简方法。
1.1粗糙集理论基本概念。
定义1:一个知识表达系统是一个四元有序组I=(U,A,V,f),其中U是论域,U={x1,x2,L,xn},是对象的非空有限集合;A是属性集合,A={a1,a2,L,am};V是属性值的集合,对a∈C,V=UVa,Va为属性a的值域;f:U×A→V是信息函数,它为每个对象的每个属性赋予一个信息值,即x∈U,f(x,a)∈Va。通常记I=(U,A,V,f)为I=(U,A)。
定义2:记 IND ( P ) = { ( x , y ) ∈ U 2 | ∀ a ∈ P , a ( x ) = a ( y ) } , 我们称INP(P)是P关于A的不可分辨关系,也记为RP。如果(x,y)∈IND(P),则x和y是不可分辨的。
定义3:记IND(P)是不可分辨关系,我们称U/IND(P)={[x]P:x∈U}是U上的划分,其中[x]P={y:(x.y)∈IND(P)},而[x]P是x关于P的等价类。
如下表1-1的信息系统。
表1-1 信息系统
我们设P={a1,a2,a3,a4},根据上述则可以得到下面的等价类:{x1,x2},{x3},{x4},{x5}如果我们设P={a1,a3},同理有:{x1,x2},{x3,x5},{x4}。
通常属性集P不能准确表示X,这是因为X可能包含关于P的不可分辨关系中一部分对象,而剩下一部分不包括。如X={x1,x2,x3,x4,x5},P={a1,a2,a3,a4},在这里P就不能准确表示X,因为{x1,x2}是不可分辨的,故没有其他方法可以X准确表示包含x1而不包含x2。为了通过属性集P能表示X,我们引入关于X的下近似(Lower approximation)和上近似(Upper approximation)。
定义4:设则X的下近似和上近似定义为如下形式
P ‾ X = { x | [ x ] P ⊆ X }
根据上面定义可知X的下近似表示所有属于X的等价类的并集,上近似表示为与X相交不为空的集合并。对于下近似PX,我们也称为正区域,记为POSP(X)。而为边界区域,属于边界区域的对象可能属于X,也可能不一定。
定义5:设 PX是下近似,是上近似,则我们称由下近似PX和上近似组成的二元组(PX,)为粗糙集。
因此粗糙集有两部分表示,其中PX表示X的下边界,表示上边界。为了衡量PX和对粗糙集的表示效果,我们定义粗糙集的精度如下
α P ( X ) = | P ‾ X | | P ‾ X |
其中0≤αP(X)≤1,αP(X)更加直观地描述了对X的近似效果。显然最理想的情况是αP(X)=1时,即PX和是相等的,当然极端情况下,即αP(X)=0时,此时下近似PX等于空。
1.2粗糙集理论决策信息系统。
定义6:给定信息系统I=(U,A),A=C U D,CI其中C为条件属性,D为决策属性。具有条件属性和决策属性的信息系统称为决策信息系统。
事实上,信息系统分为不同的种类,常见的如:多(单)值信息系统、模糊信息系统、协调(不协调)信息系统、不完备信息系统。
1.多(单)值信息系统
给定信息系统I=(U,A),对a∈A,记a(x)表示对象x在属性的取值,如果|a(x)|>1,则称信息系统是多值的;如果|a(x)|=1,则信息系统是单值的。
2.模糊信息系统
给定信息系统I=(U,AU{d}),A={a1,a2,L,am},d是决策属性。ai,i=1,2,L,m是清晰变量,d是模糊变量,取值为模糊集D1,D2,L,DM,其中Dk(x),k=1,2,L,M。则称信息系统I=(U,AU{d})是模糊信息系统。
3.协调(不协调)信息系统
给定信息系统I=(U,A,F,D,G),其中,U是样本合,U={x1,x2,...,xn};A是条件属性集合,A={a1,a2,...,am};D是决策属性合,D={d1,d2,....,dq};F是U与A的函数关系集合,F={fk:U→Vk,k≤m},Vk是样本xk在ak的值域;G是U与A的函数关系集合,G={gk:U→Vk,k≤q},Vk是样本xk在dk的值域。
对于任意的的不可分辨关系:
R B = { ( x , y ) : f k ( x ) = f k ( y ) , ∀ a k ∈ B }
R D = { ( x , y ) : g k ( x ) = g k ( y ) , ∀ a k ∈ D }
它们在U上产生的划分分别为
U/RB={[x]B:x∈U}
U/RD={[x]D:x∈U}
其中
[x]B=[y:(x,y)∈RB]
[x]D={y:(x,y)∈RD}
分别是x关于B和D的等价类。
定义7:给定信息决策系统I=(U,A,F,D,G),如果有我们称信息决策系统是协调的,否则称信息决策系统是不协调的。
4.不完备信息系统
给定信息系统I=(U,A),A=C U D,CI对于y∈U,定义容差关系T为:
对象x∈U的容差类定义为:
T(x)={y|y∈U∧(x,y)∈T},U上的概念X的上、下近似分别定义为:
我们称信息系统I=(U,A)为不完备信息系统。
1.3邻域粗糙集。
简单说来,样本xi的邻域就是xi在某一特定空间下的附近一定距离内的对象的集合。其距离的计算,我们通常定义一个距离函数Δ来进行度量。
定义8:一个度量Δ是指一个RN×RN→R的函数,并且满足如下的性质:
1)Δ(x1,x2)≥0,x2∈RN;Δ(x1,x2)=0,当且仅当x1=x2
2)Δ(x1,x2)=Δ(x2,x1),x2∈RN
3)Δ(x1,x3)≤Δ(x1,x2)+Δ(x2,x3),x2,x3∈RN
一般而言,我们通常使用欧式空间的距离来进行计算。对于名义数据的属性,我们可以定义一个特殊的度量标准:
Δ C ( x , y ) = 1 , if x ≠ y 0 , if x = y
容易证明,ΔC满足广义度量方程。
定义9:给定一套有限且非空的对象U={x1,x2,K,xn}和一个数值属性a,用以描述这个集合,则任意对象xi∈U的δ邻域定义为:
δa(xi)={xj|Δ(xi,xj)≤δ,xj∈U}
我们也可以称δa(xi)是一个从属性a和对象xi推导出来的邻域信息颗粒。邻域信息颗粒的集合{δa(x)|x∈U}组成了一套全空间中的基础概念。
在混合属性的数据库中,一个邻域信息系统被表示为:
NIS=<U,A,V,f>
式中:U——样例的集合
A——属性的集合,
V——属性的值域,
f——信息函数:U×A→V。
更具体的,如果在系统里面包含条件和决策两种属性,一个邻域信息系统也被称为一个邻域决策表,它可以表示为:
NDT=<U,AUD,V,f>
定义10:给定NIS=<U,A,V,f>,B是一个数值特征子集,则对于B,x的邻域是
δ B ( x ) = { x i | x i ∈ δ a ( x ) , ∀ a ∈ B }
定义11:给定NIS=<U,A,V,f>,B=BnUBc,其中Bn和Bc分别是数值特征和名义特征。Bn产生邻域关系Bc产生等价关系我们定义x关于属性B的邻域颗粒为
δ B ( x ) = { x i | x i ∈ δ B n ( x ) I x i ∈ δ B c , ∀ a i ∈ B n , b j ∈ B c }
在定义了含有混合数据特征的数据集的δ邻域颗粒化以后,我们现在来考察颗粒化以后的特征与决策之间的关系。
定义12:给定一个邻域决策表NDT=<U,A U D,V,f>,X1,X2,...,Xn是决策1到N的子集,δB(xi)由特征子集生成的包含xi的信息颗粒,则决策D关于特征子集B的上下近似集定义为:
δ B D={δ B X1,δ B X2,...,δ B Xn}
δ B ‾ D = { δ B ‾ X 1 , δ B ‾ X 2 , . . . , δ B ‾ X n }
其中:
δ B ‾ X = { x i | δ B ( x i ) ⊆ X , x i ∈ U }
下近似集合表示在属性B作为维度的空间里面,完全包含在某一决策D中的对象的集合。换句话说,属于下近似集合的对象,以特征子集B作为分类依据,能够完全分类正确。下近似也被称为决策正域,表示为POSB(D)。而上近似集合,则表示在属性B作为维度的空间里面,至少部分包含决策D的对象的集合。即属于上近似集合的对象,用特征子集B来衡量,有可能分类到决策D。
将特征空间信息颗粒化,使得名义型的特征属性和数值型的特征属性在同一套系统里面得到描述,进而为将其统一在一个评价函数之下,挖掘特征属性之间的联系铺垫了基础。
为了表征特征子集B的决策准确度,我们定义一个边界函数:
BN ( D ) = δ B ‾ D - δ B ‾ D
决策边界是属于一个以上的决策类的对象的信息颗粒集合。在决策边界中的对象,都没有明确的分类,决策边界的大小可以衡量特征子集B的分类模糊度。
定义13:决策D对特征子集B的依存度定义为在特征子集B下,分类一致的对象的比例:
γ B ( D ) = | POS B ( D ) | | U |
依存度方程反映了特征B对决策D的描述能力,也可以被视为特征B对近似决策D的重要度指标。POSB(D)的值越大,则特征子集B对决策D的描述能力越强。当γB(D)=1时,则称分类问题是一致的。
1.4基于邻域粗糙集的属性约简。
数据中的部分属性对某些分类决策问题可能是无关的或者是冗余的。这些属性会造成决策正域的减少,或者降低分类器学习速度、导致学习模型的过拟合、分类器变复杂。因此有必要将这些属性进行识别并进行约简。下面是对必要属性和不必要属性的定义。
定义14:给定一个邻域决策系统NDT=<U,A U D,V,f>,如果γB(D)>γB-a(D),那么称a在B中对于分类决策D是必要属性。否则a是不必要属性。
定义15:给定一个邻域决策系统NDT=<U,A U D,V,f>,如果B满足下面两个条件,则称B是A的一个相对约简:
1)必要条件:γB(D)>γB-a(D);
2)充分条件:γB(D)=γA(D)。
第一个条件保证B中所有的属性都是必要的,在约简中不存在多余的属性。第二个条件确保特征子集B能完全描述全部属性A的分类正域。
正域(或者边界)的大小不仅与问题的特征空间B有关,而且与邻域信息粒度δ有关,在不同的特征空间和分析粒度下,分类的一致性是不同的。
性质1(属性单调性)给定一个邻域决策系统NDT=<U,A U D,V,f>,Δ是U上的度量函数,B1,设粒度为δ。如果那么
1) B 1 N ⊇ B 2 N
2) ∀ X ⊆ U , B B 1 ‾ X ⊆ N B 2 ‾ X
3) POS B 1 ( D ) ⊆ POS B 2 ( D ) , γ B 1 ( D ) ≤ γ B 2 ( D )
性质2(粒度单调性)给定一个邻域决策系统NDT=<U,A U D,V,f>,Δ是U上的度量函数,如果δ1≤δ2,那么
1) BN δ 2 ⊇ BN δ 1
2) ∀ X ⊆ U , N δ 2 ‾ X ⊆ N δ 1 ‾ X
3) POS δ 2 ( D ) ⊆ POS δ 1 ( D ) , γ δ 2 ( D ) ≤ γ δ 1 ( D )
性质1说明,相同的粒度δ下,属性越多,分类正域越大,边界越小,一致性越高。性质2说明,相同的特征空间内,邻域信息粒度越小,分类正域越大,一致性越高。当属性越多时,对样本的描述越精确。当B=A时,B于A分类一致性相同。当信息粒度越小时,用以逼近决策的基本概念越精细,对分类的描述也越准确。当δ=0时,称此系统是Pawlak一致的,也就等价关系下一致的。
定义16:给定一个邻域决策系统NDT=<U,A U D,V,f>,定义属性a的重要度计算为
SIG(a,B,D)=γB(D)-γB-a(D)
SIG(a,B,D)反应了属性a对决策属性D的重要程度。
1.5属性评价方法。
1.5.1特征选择过程。
我们知道了特征子集B对近似决策D的重要度指标,以及属性a的重要度计算方法,接下来就要通过某种策略,获得我们期望的最优特征子集。典型的特征选择过程主要有四部分:
1)生成候选集:生成下一组待评价的特征子集,
2)属性评价方法:评价特征子集,
3)停止条件:判断选择过程是否满足结束条件,
4)确认过程:核查被选出来的特征子集是否有效。
生成候选集过程采用某种搜索策略生成一组待评价特征子集。最初的候选集可以是(i)空集,(ii)特征全集,(iii)随机产生的一组特征子集。前两种情况,需要迭代地添加或删除属性,最后一种情况,也可以迭代地添加或删除属性,或者每次的搜索都是随机的产生一组特征子集。
评价方法用来评价特征子集的依存度,并且与之前最好的依存度值进行比较,如果当前子集的依存度更高,则把当前的特征子集作为最好的特征子集。最优特征子集总是对应于某种特定的评价方法(比如,通过不同的属性评价方法选出的最优特征子集很有可能是不一样的)。
如果没有一个合适的停止条件,特征选择过程有可能运行很长时间,或者完全依赖于搜索策略。特征产生和评价都可以作为停止条件。基于特征产生过程的停止条件有下面两种情况:(i)是否已经选择了预先定义的特征个数,(ii)是否已经达到预先定义的迭代个数。基于评价过程的停止条件有下面两种情况:(i)是否添加(或剔除)一个特征将产生一个更好的特征子集,(ii)是否最优特征子集已经得到。
还有很多特征选择过程的变形,但是基本的特征生成、评价和停止条件在所有的方法中都存在。
1.5.2基于依赖度的属性评价方法。
定义17:给定一个邻域决策系统NDT=<U,A U D,V,f>,δB(x)为样本x的邻域。假如D(xi)=D(x),那么就可以说,x是完全分类正确的样本,x∈POSB(D)。那么决策属性D对条件属性B的依赖度为
γ B ( D ) = | POS B ( D ) | | U |
|POSB(D)|表示样本空间U中能够完全分类正确的样本个数。
1.5.3基于一致性的属性评价方法。
依赖度函数只考虑了完全分类正确的样本,而忽略了分类存在不一致的样本。但边界域内的样本并不一定会被分错类,比如在贝叶斯(Bayes)分类器下,会根据某特征属性中占据最多数的决策类判定节点的类别,因此,特征属性的不一致的决策类的多少,对最后分类器的分类准确率也起到了作用。
一致的样本显然能够被正确分类,但一致的样本也未必会被错分,不一致的样本中只有处于少数类的样本才会被错分,而处于多数类的样本能够正确分类。一致性指标解决了Pawlak粗糙集无法容忍等价类中的不一致信息,不能精细刻画边界区域的类分布情况的问题。
假设P是所有样本的个数,N代表所有特征个数,M是选择的特征子集中特征个数,S是特征子集,c是决策类别个数,C是决策类别集合。
定义18:一致性方法是通过不一致率来定义的,下面是不一致率的计算方法:
1.一个特征子集的模式p被称作是不一致的,如果满足该模式的样例集合中存在至少两个实例,他们的决策属性不一致。
2.特征子集S的某模式p的不一致个数等于它在数据集合中出现的总次数减去在不同的分类集合中出现的最大的次数。
3.特征子集S的不一致率S(IR(S))是特征子集下所有模式的不一致个数的和除以样本总数P。
一致性方法就可以应用于下面的特征选择任务:给定一个候选的特征子集S,并计算S的不一致率IR(S)。如果IR(S)≤δ,其中δ是给定阈值,那么就认为S是一致的。
将一致性的思想引入到邻域粗糙集,从而解决混合类型变量分类能力的精细刻画问题。
定义19:给定一个邻域决策系统NDT=<U,A U D,V,f>,xi∈U,δB(xi)为样本xi的邻域。P(ωjB(xi)),j=1,2,L,c,是该邻域内的ωj类的概率,那么xi的邻域决策函数定义为
ND(xi)=ω,如果 P ( ω | δ B ( x i ) ) = max j P ( ω j | δ B ( x i ) )
其中,P(ωjB(xi))=nj/N,N是邻域δB(xi)内样本的数量,nj是邻域δB(xi)内第j类样本的数量。
引入0-1误分损失函数
λ ( ω ( x i ) | ND ( x i ) ) = 0 ω ( x i ) = ND ( x i ) 1 ω ( x i ) ≠ ND ( x i )
其中ω(xi)是xi的真实类别
定义20:邻域决策不一致率
I R ( B ) = 1 | U | Σ i = 1 | U | λ ( ω ( x i ) | ND ( x i ) )
邻域决策不一致率实质上就是根据样本邻域内的类的分布信息、按照多数决策原则重新给样本分布决策类,进而统计实际类别与重新分配的类别的差异率。
进而,我们就可以通过1-IR(B)表示邻域决策的一致率。
定义21:给定一个邻域决策系统NDT=<U,A U D,V,f>,基于一致性的决策属性D对条件属性B的依存度计算公式为
γB(D)=1-IR(B)
我们能够看出依存度函数是能完全无误的分类的实例的比例,而一致性函数是可能被正确分类的样例的比例。一致性函数不仅考虑了依存度函数中的正域,也考虑了在边界(boundary)中某分类中包含最多的样例。
1.5.4搜索策略。
有效率的搜索技术是非常重要,最理想的情况是通过枚举法,针对N个特征的特征集合,将2N个特征子集都逐一在评价函数下检验,寻找出最优的特征子集。通过穷举方式搜索最优子集往往是不切实际的。接下来我们将介绍并比较不同的搜索策略:
1)Focus:穷举法(Exhaustive Search)是机器学习中最早的算法之一。一般从空集开始,采用广度优先搜索策略,直到找到一个能够完整预测分类的最小子集。穷举法的搜索策略一定能够保证找到一个最优子集,但随着最优特征子集个数M的增长,算法的时间复杂度将严重升高,甚至无法得到结果。所有一般情况下,当相关特征的个数M越小时,算法的搜索空间就会很小,效率也会越高。相反,当N-M很小时,算法的效率就会很低。
2)ABB:完全搜索算法(Complete Search)与Focus不同,ABB从特征全集开始,每次剔除一个特征。所以,N-M很小时,ABB有很好的效率。
3)SetCover:启发式搜索算法(Heuristic Search)。当两个分属于不同类别的实例有至少一个取值不同的特征时,这两个实例便被称为“覆盖”。人们注意到,寻找一致性的特征的最小子集,等同于“覆盖”所有的不同类别的一对的实例。这个算法从空集开始,每次放入一个能够使选择的特征子集覆盖率更高的特征,直到“覆盖率”到达一个设定的值,或者所有特征被穷举完的时候,算法停止。
4)LVF:随机概率搜索算法(Probabilistic Search)。该算法以相同的概率随机的选择特征子集,并且保留满足某一评价标准的一个上限的子集,不断和新选出的取值比较,直到找到一个满足预设条件的子集,或者到达预先设定的尝试次数。
上面介绍了属性评价方法和搜索策略,结合属性评价方法和搜索策略我们就可以设计属性约简算法,下面将通过一个具体的算法介绍属性约简算法设计。
1.6基于邻域粗糙集的依赖度评价方法的属性约简算法设计。
采用启发式搜索算法的向前贪婪搜索策略(Forward Greedy Search),从空集开始,每次增加一个使得区分能力增长最大的特征,直到增加任何属性,区分能力都不再增长,或者所有属性都被选中。属性的重要度计算为
SIG(a,B,D)=γB(D)-γB-a(D)
算法中有两个重要的步骤:计算样本的邻域和分析邻域内的样本是否是一致的。计算样本的邻域的时间复杂度是O(nlogn),判断样本的邻域内的样本是否一致的时间复杂度为O(n)。当存在N个特征和n个样本时,算法的时间复杂度为O(N2nlogn)。
二、基于Hadoop的粗糙集属性约简算法的实现。
2.1粗糙集属性约简算法并行化分析。
属性约简的迭代过程主要执行两步操作:(i)计算每个属性的重要度,(ii)选择重要度最大的属性加入到候选集。第二步操作需要用到第一步的执行结果,所以这两步需要使用串行操作。我们可以使用两个子Job,采用依赖式的MapReduce作业链来完成这两步操作。两个Job执行结束后判断是否满足停止条件。最后输出约简后的子集。迭代过程中的两步操作是算法过程的主要计算部分,考虑对这两步进行并行化处理。
下面分别对上面迭代过程中的两步操作并行化分析:
1)假设N代表所有特征个数,M是已经选择的特征子集中的特征个数,n是样本个数,可以将计算N-M个属性的重要度过程并行化。因为计算每个属性重要的过程是独立的。每个属性的重要度计算方法,就是计算在特征子集BUai作为维度的空间下的样本集合,而不需要样本全集。原来计算每个属性的重要度过程的时间复杂度为O(Nnlogn),并行后时间复杂度为O(klogk),k为每个split中样本个数。
2)第一步计算出了N-M个候选属性的重要,分布式的存储在每个特征对应的HDFS文件中。第二步的操作就相当于计算分布式文件中的重要度最大值,并获得最大值对应的属性,作为候选属性。这对Hadoop来说很简单。
每次迭代的时候,第一步任务的Map要读入数据集,将处理后的样本集合通过Sort和Shuffle过程传送给Reduce任务。假如Map的读数据的时间为T1,Map中处理数据的时间为O(N),Sort和Shuffle过程的时间为T2,计算重要度的时间为O(n),那么第一步执行的时间为T1+O(N)+T2+O(n)。第二步处理的数据很小,时间暂且忽略。则迭代的属性约简算法总的时间为N*(T1+O(N)+T2+O(n)),时间复杂度为O(N*max(T1,O(N),T2,O(n)))。我们可以预测,在特征个数N不变的情况下,随着样本个数n的增加,总的运行时间是呈线性增长。
2.2粗糙集属性约简算法并行化实现。
2.2.1属性约简的算法的MapReduce框架。
并行的属性约简算法主要有两个Job,第一个Job进行属性重要度的计算,第二个Job获得重要度最大的属性。两个Job之间串行完成。停止条件判断重要度最大的属性是否满足条件,如果满足条件就把属性追加到特征选择子集中,并判断是否满足停止条件。
2.2.2属性约简算法的MapReduce算法设计。
1)Job1:需要一个Mapper类和一个Reducer类。Mapper类读入样本数据,并且将样本集合按照Feature Select中的已选的属性集合为每个待评价的属性分配对应的样本集合作为Reducer的输入。Reducer任务的个数就是待评价的属性个数,对应的样本集合将以属性编号为Key输入到对应的Reducer任务中。多个Reducer任务并行执行,从而实现属性评价的并行计算。
数据已经被划分成多个split,分布在各个DataNode节点上,Hadoop的HDFS文件系统以BlockSize大小的块为单位划分文件。一个文件可能被划分为多个块,每个块启动一个Map。所以文件大小和块的划分直接影响Map的并行度。
Job1的Mapper阶段承担了大量的数据处理操作,为了更好的了解这个阶段的任务,我们先了解粗糙集一致性的相关性质。
性质3在属性B作为维度的空间里,当两个样本x,y属于同一个正域子空间,则样本x,y决策一致,且样本x,y在属性B上的取值也一致,即:
i)D(x)=D(y),
ii) U p ∈ B x p = U p ∈ B y p .
基于性质3,下面介绍Job1中Mapper类和Reducer类的实现。
Mapper类:Map读入每个分块,以<key,value>的形式输入。我们选择输入格式InputFormat为默认的文本格式,数据集每一行作为一个文本值进行输入。key为该行起始位置相对于文件起始位置的偏移量。value为每一行的样本值。value中的每个属性对应的值通过某种分隔符分割,把这条样本记录按分隔符进行分割,保存在一个字符串数组中。字符串的长度为样本的属性维度。
根据已选择属性B和未选择属性为每个待评价的属性产生以属性BUa为维度的样本子集然后以待评价属性编号和样本子集的组合作为key,以样本的决策作为value将其输出。key:value:<D(x)>。
map的输出会根据a的值进行分区(partition),由于我们设定了reducer的个数为待评价属性的个数,所以每个分区内只有一个属性对应的数据。shuffle的过程根据分区编号将map的输出数据传输给对应的reducer。
Reducer类:因为partition保证了每个reducer只接受一个属性的所有样本子集,并且在一个reducer之内通过组合键数据进行分区。所以reduce函数需要做的是遍历组合键对应的values列表,并统计决策一致的样本个数。输出以属性BUa为维度的分类一致的样本个数POSBUa(D)。这里我们把POSBUa(D)作为特征子集BUa对近似决策D的重要度指标。最终key/value以<a,POSBUa(D)>的格式输出。
2)Job2:以Job1的输出作为输入,实现的功能很简单,就是取最大值的。Job2的任务从Job1输出的记录中获得POSBUa(D)最大的<a,POSBUa(D)>。
Mapper类:可以选择输入格式InputFormat,将<a,POSBUa(D)>读入。以<a,POSBUa(D)>的格式输出。
Reducer类:只需要一个reducer任务,获得POSBUa(D)最大的<a,POSBUa(D)>。
3)停止条件:基于特征产生过程的停止条件有下面两种情况:(i)是否已经选择了预先定义的特征个数,(ii)是否已经达到预先定义的迭代个数。基于评价过程的停止条件有下面两种情况:(i)是否添加(或剔除)一个特征将产生一个更好的特征子集,(ii)是否最优特征子集已经得到。
对上述四种情况设定停止条件优先级顺序:(1)没有产生一个更好的特征子集,即POSBUa(D)≤POSB(D);(2)已经得到最优特征子集,即POSBUa(D)=POSA(D);(3)达到了预先定义的迭代个数;(4)已经选择了预先定义的特征个数。
如果不满足第一个停止条件,那么当前新选出来的特征子集有对决策有更强的描述能力,则把新选出来的特征子集作为已选择的特征子集,B=BUa,并从未选择的特征子集中删除新加进来的属性,
4)feature select:保存特征选择的当然状态,主要包括两个数据:已选择的特征集合(selected)和未选择的特征集合(unselected)。Job1需要参照这两个数据对剩余的属性计算重要度,停止条件对其进行更新,最后将其作为结果输出。所以这两个数据需要以全局参数的形式存储。
2.3并行算法实现的关键技术。
在MapReduce架构中编写应用程序就是定制化mapper和reducer的过程,除了可以根据自身需求实现map和reduce函数,还可以自定义输入格式,定制Writable数据类型,实现全局参数等。
2.3.1自定义key和value数据类型。
Hadoop在mapper和reducer的过程中的输入输出都是key/value的形式,key和value的类型并不是任意的。为了让key/value可以在集群上移动,MapReduce框架提供了一种序列化key/value的方法。只有那些支持这种序列化的类能够在这个框架中充当key或value。
Hadoop提供的序列化格式是Writable[37]。实现Writable接口的类可以是值,如果作为键值必须实现WritableComparable<T>接口。WritableComparable继承自Writable和java.lang.Comparable接口。对键而言,它们将在Reduce阶段进行排序,所以需要实现WritableComparable,而值仅被简单的传递。
Hadoop自带的org.apache.hadoop.io包有一些预定义的Writable类。
Writable类对Java的基本类型提供封装。参见表2-1:
表2-1 Java基本类型的Writable类
NullWritable是Writable的一种特殊类型,序列化长度为0。它并不从数据流中读取数据,也不写入数据,充当占位符。ArrayWritable,TowDArrayWritable,MapWritable和SortedMapWritable是Writable的4个集合类。ArrayWritable和TowDArrayWritable是对Writable的数组和二维数组的实现。MapWritable和SortedMapWritable分别实现了java.util.Map<Writable,Writable>和java.util.SortedMap<WritableComparable,Writable>。
Hadoop的Writable实现可以满足大部分需求,有时,键和值所要求的类型超出Hadoop自身所支持的基本类型。我们可以根据自己的需求构造一个新的实现。定制的Writable类型需要实现Writable(或WritableComparable<>)接口。有了定制的类型,就可以完全控制二进制表示和排序顺序。
我们在Job1中使用了组合键,下面代码实现了组合键类型最基本的实现。
自定义的IntTextPair组合类型,第一个键的类型是IntWritable,第二个键的类型是Text,它是为Job1的map输出键设计的。随着已经选择的属性越来越多,以属性BUa为维度的样本子集的长度就会越来越长,即Job1的map输出键第二个键值的长度会变长,如果以此数据格式传输出给reduce,map的输出数据量将会很大。
IntIntPair组合类型是我们设计的第二个组合类型,第一个键的类型是IntWritable,第二个键的类型也是IntWritable。将Job1的map输出键的第二个键值用以属性BUa为维度的样本子集的hashCode替换,并且输出键类型使用IntIntPair。这样替换的好处是无论样本子集的长度是多少,其hashCode值是定长的,map的输出数据量只与输出的记录数相关。但是这样也带来了另外一个错误隐患。比如,Java中两个字符串值相同的字符串,它们的hashCode一定相等,反之却不是这样,如果两个字符串的hashCode相等,它们的字符串值则不一定相等。所以,使用hashCode代替字符串需要慎重考虑。
此外还定义了TextLongPair组合类型,第一个键的类型是Text,第二个键的类型也是LongWritable。设计这个类型的目的是为了表示每种分类和分类出现次数。我们在Job1中设计一个了Combiner,并且用TextLongPair类型作为map的输出值类型,以满足Combiner函数的要求。使用Combiner可以有效的提高MapReduce的性能。
构建了一个组合键,我们期望同一属性的记录被分到同一个reducer中。但如果仅仅是使用组合键的话,将不会得到我们期望的情况,因为记录会根据组合键进行分区,这样同一属性的记录有可能会被送到不同的reducer中。还需要设定一个按照键中的属性进行分区的partitioner,以确保同一属性的记录会被发送到同一个reducer中,需要自定义partitioner类以按照组合键的首字段进行分区。
2.3.2输入和输出格式。
Hadoop分割和读取输入文件的方式被定义在InputFormat接口的实现中。TextInputFormat是默认的InputFormat。返回的键是该行在文件中字节偏移量,值是这行的内容。而字节偏移量通常没有什么用处。
表2-2中列出了几种常用的InputFormat类。
表2-2 主要的InputFormat类。
KeyValueTextInputFormat在更结构化的输入文件中使用,由一个预定义的字符,通常为制表符(\t),将每行的键与值分开。
我们可以通过调用Job对象中的setInputFormatClass()和setOutputFormatClass()定制数据输入和输出格式。
一个MapReduce作业的输入通常是其他一些MapReduce作业的输出。我们可以设定输出格式,使之与后面作业的输入格式匹配,提高处理效率。当Hadoop输出数据到文件时,使用的是OutPutFormat类,默认的输出格式是文本输出,每个key/value由制表符进行分割。
Hadoop提供了几个标准的OutPutFormat实现,如表2-3所示。
表2-3 主要的OutPutFormat类
2.3.3全局变量。
在编程实践中,我们有时会使用全局变量,合理的使用全局变量可以提高程序的效率。比如在类里面声明一个static的变量,作为某种全局状态,有可能多个方法都要用到这个变量。
在Hadoop不支持全局变量。因为Mapper类和Reducer类是分开执行的,不同task执行的是不同的map和reduce,所以全局变量无法传递。所以直接在类中定义全局变量的方法行不通。但有时如果有一个全局变量会大大的方便程序的实现。下面介绍2个实现全局变量的方法。
i)把变量信息保存在文件中。
ii)在Configuration中设置属性值。
第一种方法的思想很简单,也很容易实现。但是保存变量信息的文件有可能会被修改或者删除,这些都是在程序中无法预料的,从而会导致程序无法预期的结果。这种方法存在数据安全隐患。
Configuration是Hadoop的配置信息的核心类,实现了Writable接口,是Hadoop指定的资源配置形式。资源以XML数据格式保存一组name/value对。每组资源字符串或路径命名。Hadoop默认两个资源路径:core-default.xml和core-site.xml。
应用程序可以添加额外的资源,Configuration提供了各种set和get方法,可以方便进行参数的配置。我们可以利用这两个方法来实现全局变量的效果。
首先构造一个Configuration对象conf,定义要全局的变量。调用set()方法把变量添加到Configuration中。使用new Job(Configuration)构造方法,将conf指定为Job的配置信息。这样就可以在Job的Mapper和Reducer类中通过Context类的getConfiguration()方法获得配置信息,然后通过调用get()方法,获得指定变量名的值。
Mapper类和Reducer类中都定义了setup()和cleanup()方法。任务开始自动调用setup(),任务结束自动调用cleanup()。我们可以重写这两个方法来对全局变量进行操作。在任务执行的过程中,全局变量都封装在Configuration类的实例中,确保了数据的安全性。
2.3.4使用Combiner提升性能。
集群上的带宽还有限的,从而限制了MapReduce作业的数量。map任务和reduce任务之间有大量的数据流,如果能减少map和reduce之间的数据传输,将会提高作业的执行效率。Combiner可以看做本地的Reducer,针对map任务的输出指定一个合并函数,合并后的输出作为reduce的输入。由于合并函数是一个优化方案,所以Hadoop无法确定针对map任务输出中任一条记录需要调用多少次合并函数。也即是说,在有无合并函数的情况下,都要保证reduce的输出结果一致。
先用一个例子来说明Combiner如何提升MapReduce性能。假设有M个数据分片,每一分片中有N个数。我们要写一个MapReduce任务,找到所有数据中的最大值。传统的MapReduce任务时:map读取M个分片中的数据,然后将M*N个数传输到reduce,reduce函数从M*N中找到最大值。map任务的输出记录个数为M*N。如果为map的输出指定一个合并函数,先在本地找到最大值,然后将M个本地的最大值传输到reduce,在得到全部数据的最大值。map的任务输出的记录数为M,一般情况下M不会很大。可见通过Combiner可以有效的减少map和reduce之间的数据传输量。但有时候不适合使用Combiner,比如求平均数。所以在MapReduce作业中使用Combiner是需要谨慎的。
我们在Job1和Job2中都使用了Combiner。Job2中的Combiner使用与Reducer相同的函数,实现的功能是求最大值。我们将详细介绍Job1中Combiner的定义。
Job1的reduce函数是统计条件属性BUa下POSBUa(D)的值,基于一致性的方法首先统计每个决策出现的频率,然后出现次数最多的决策对应的频率为POSBUa(D)。Combiner在本地对每个决策出现的频率进行统计,然后以决策类和频率作为组合值,作为reduce函数的输入值。通过Combiner的预处理,可以减少map的输出记录数,减少reduce的处理时间。我们要修改map的输出格式和reduce的输入格式,首先TextLongWritable组合类型作为map的值输出类型new TextLongWritable(D(value),1),D(value)为样本决策,并附带1的计数。TextLongWritable(D(value),count)组合类型作为reduce的值输入类型,D(value)为样本决策,count是经过合并之后的D(value)出现的频率。Job1中Combiner的具体实现代码。
Combiner需要实现reducer接口,在reduce()方法中实现合并操作。其实,Combiner执行了是等价转换,以map的输出作为输入,其输出作为reduce的输入,所以Combiner的输入和输出的键值类型必然是一致的。
2.3.5选择reducer的个数。
约简算法并行化的一个环节就是将计算N-M个属性的重要度过程并行化。直接想到的是把reducer的个数设置为N-M,已达到理论上的完全并行。然而实际情况中并不是reducer的个数越多,运行效率越高。下面我们将介绍如何设置一个合适的reducer的个数。
默认情况下,reducer只有一个。也就是只有一个分区,partitioner操作将所有的数据放到一个分区中,这样partitioner的功能就无关紧要了。并且所有的中间数据都会放到一个reducer任务中,导致作业效率极低。然而,partitioner的作用是非常重要的,因为真实的应用中,大多情况下需要多个reducer。过多的reducer,会是map输出的中间结果产生很多的分区,每个分区需要一个reducer任务处理。然而集群的处理器是有限的,每次只能运行有限个reducer任务,其它大量的reducer任务都在等待。而且map的中间结果是存储在本地磁盘,过多的reducer任务使得I/O的次数增多,反而使作业的效率降低。
reducer最优个数与集群中可用的任务槽数相关。总槽数由集群中的节点数(tasktracker)与每个节点任务槽数相乘得到。一个tasktracker可以同时运行多个map任务,由mapred.tasktracker.map.tasks.maximum属性控制,默认值是2个任务。相应的,一个tasktracker可以同时运行多个reduce任务,由mapred.tasktracker.reduce.tasks.maximum属性控制,默认值也是2。属性值可以在配置文件hadoop-env.sh中设置。实际在一个tasktracker上能同时运行的任务数取决于一台机器有多少个处理器。假设客户拥有8个处理器,并计划在每个处理器上分别跑2个进程,则可以将mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum的值分别设置为7(考虑到还有datanode和tasktracker这两个进程)。
使用Job的setNumReduceTasks(int tasks)方法来设置reducer的个数。一种常用的方法是设置比总槽数稍微少一些的reducer数,给reducer任务容忍一些错误发生,计算方法tasks=0.95*(节点数*mapred.tasktracker.reduce.tasks.maximum)。此外,也可以甚至稍微多一点的reducer数,那么高速的节点会在完成第一批reducer任务后开始计算第二批reducer任务,有利于负载均衡,可以使用计算方法tasks=1.75*(节点数*mapred.tasktracker.reduce.tasks.maximum)。
在计算N-M个属性的重要度过程中,因为每个属性对应的记录要用一个reducer任务计算,partitioner最多将map的输出结果分成N-M的分区,所以,文章的算法中reducer的个数最多只需要N-M个,reducer的个数设为min(N-M,tasks)。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

Claims (4)

1.基于Hadoop的粗糙集快速属性约简方法,其特征在于:包括以下步骤:
a)建立基于Hadoop的分布式平台:建立Hadoop分布式文件系统和MapReduce并行编程模型;所述Hadoop分布式文件系统采用主从结构体系,由一个管理者和多个工作者构成,管理者管理文件系统的命名空间,维护文件系统树及整棵树内所有的文件和目录,工作者是文件系统的工作节点,根据需要存储并检索数据块,并且定期向管理者发送“心跳”报告,如果管理者在指定的时间段内没有收到工作者的“心跳”报告,则管理者启动容错机制对其进行处理;所述MapReduce并行编程模型将任务分成若干小任务去执行,每个小任务对集群节点本地存储的数据块进行处理;
b)生成候选集:采用搜索策略生成一组待评价特征子集作为候选集,最初的候选集是空集或者特征全集或者随机产生的一组特征子集;
c)计算每个属性的重要度:建立一个Mapper类和一个Reducer类,Mapper类读入样本数据,并将样本集合按照已选的属性集合为每个待评价的属性分配对应的样本集合作为Reducer类的输入,每个reducer只接受一个属性的所有样本子集,并在一个reducer之内通过组合键数据进行分区,Reducer任务的个数就是待评价的属性个数,对应的样本集合将以不同的属性编号输入到对应的Reducer任务中,多个Reducer任务并行执行,采用相同的评价方法来评价每个属性的重要度;
d)选择重要度最大的属性加入到候选集:将c)步骤中的输出作为本步骤的输入,与之前最大的重要度值进行比较,如果当前属性的重要度值更高,则把当前的属性作为最好的特征子集添加到候选集中;
e)判断是否满足停止条件:采用特征产生过程和评价过程作为停止条件,特征产生过程的停止条件有两种:一种是判断是否已经选择了预先定义的特征个数,另一种是判断是否已经达到预先定义的迭代个数;评价过程的停止条件有两种:一种是判断是否添加或剔除了一个特征将产生一个更好的特征子集,另一种是判断是否最优特征子集已经得到;
f)保存特征选择的状态:分别保存已选择的特征集合和未选择的特征集合,c)步骤中对未选择的特征集合计算重要度,e)步骤中已选择的特征集合和未选择的特征集合进行更新,最后将已选择的特征集合和未选择的特征集合作为结果输出。
2.如权利要求1所述的基于Hadoop的粗糙集快速属性约简方法,其特征在于:所述b)步骤中搜索策略采用穷举法,从空集开始,采用广度优先搜索策略,直到找到一个能够完整预测分类的最小子集。
3.如权利要求1所述的基于Hadoop的粗糙集快速属性约简方法,其特征在于:所述b)步骤中搜索策略采用完全搜索算法,从特征全集开始,每次剔除一个特征。
4.如权利要求1所述的基于Hadoop的粗糙集快速属性约简方法,其特征在于:所述b)步骤中搜索策略采用启发式搜索算法,从空集开始,每次放入一个能够使选择的特征子集覆盖率更高的特征,直到“覆盖率”到达一个设定的值,或者所有特征被穷举完的时候,算法停止。
CN201310224737.7A 2013-06-06 2013-06-06 基于Hadoop的粗糙集快速属性约简方法 Active CN103336791B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310224737.7A CN103336791B (zh) 2013-06-06 2013-06-06 基于Hadoop的粗糙集快速属性约简方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310224737.7A CN103336791B (zh) 2013-06-06 2013-06-06 基于Hadoop的粗糙集快速属性约简方法

Publications (2)

Publication Number Publication Date
CN103336791A CN103336791A (zh) 2013-10-02
CN103336791B true CN103336791B (zh) 2015-02-25

Family

ID=49244956

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310224737.7A Active CN103336791B (zh) 2013-06-06 2013-06-06 基于Hadoop的粗糙集快速属性约简方法

Country Status (1)

Country Link
CN (1) CN103336791B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104063230B (zh) * 2014-07-09 2017-03-01 中国科学院重庆绿色智能技术研究院 基于MapReduce的粗糙集并行约简方法、装置及系统
CN104462020B (zh) * 2014-10-21 2017-07-07 西南交通大学 一种基于知识粒度的矩阵增量约简方法
CN105245498A (zh) * 2015-08-28 2016-01-13 中国航天科工集团第二研究院七〇六所 一种基于粗糙集的攻击挖掘和检测方法
CN108509280B (zh) * 2018-04-23 2022-05-31 南京大学 一种基于推送模型的分布式计算集群本地性调度方法
CN109376381A (zh) * 2018-09-10 2019-02-22 平安科技(深圳)有限公司 医保报销异常检测方法、装置、计算机设备和存储介质
CN109828996A (zh) * 2018-12-21 2019-05-31 西安交通大学 一种不完备数据集快速属性约简方法
CN109857782A (zh) * 2019-01-28 2019-06-07 中国石油大学胜利学院 一种测井数据采集处理系统
CN109857784A (zh) * 2019-02-12 2019-06-07 吉林师范大学 一种大数据统计分析系统
CN109934278B (zh) * 2019-03-06 2023-06-27 宁夏医科大学 一种信息增益混合邻域粗糙集的高维度特征选择方法
CN110322946B (zh) * 2019-07-11 2022-09-16 河南大学 一种基于多粒度决策模型的最优用药粒度计算装置
CN111259947A (zh) * 2020-01-13 2020-06-09 国网浙江省电力有限公司信息通信分公司 一种基于多模态学习的电力系统故障预警方法和系统
CN114115719B (zh) * 2021-08-24 2022-10-18 深圳市木浪云科技有限公司 基于io模式识别的io批量处理方法、装置及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
王培吉等.粗糙集属性约简的方法.《计算机工程与应用》.2011,全文. *
郝树奎.Hadoop HDFS和MapReduce架构浅析.《邮电设计技术》.2012,第37页第一端至第42页最后一段. *

Also Published As

Publication number Publication date
CN103336791A (zh) 2013-10-02

Similar Documents

Publication Publication Date Title
CN103336790B (zh) 基于Hadoop的邻域粗糙集快速属性约简方法
CN103336791B (zh) 基于Hadoop的粗糙集快速属性约简方法
US10977293B2 (en) Technology incident management platform
US9646262B2 (en) Data intelligence using machine learning
Ma et al. Big graph search: challenges and techniques
US20150317573A1 (en) User-relevant statistical analytics using business intelligence semantic modeling
CN114416855A (zh) 一种基于电力大数据的可视化平台及方法
CN114329201A (zh) 深度学习模型的训练方法、内容推荐方法和装置
Gong et al. Keywords‐driven web APIs group recommendation for automatic app service creation process
CN111126852A (zh) 一种基于大数据建模的bi应用系统
CN115564071A (zh) 一种电力物联网设备数据标签生成方法及系统
Sanin et al. Manufacturing collective intelligence by the means of Decisional DNA and virtual engineering objects, process and factory
CN111930944A (zh) 文件标签分类方法及装置
CN117171711A (zh) 一种基于云平台的企业内外部数据融合共享方法及系统
Zhang et al. Logistics service supply chain order allocation mixed K-Means and Qos matching
De Bonis et al. Graph-based methods for Author Name Disambiguation: a survey
Abdolazimi et al. Connected components of big graphs in fixed mapreduce rounds
US20220300821A1 (en) Hybrid model and architecture search for automated machine learning systems
Shouaib et al. Survey on iot-based big data analytics
Hashem et al. A review of modeling toolbox for BigData
Almasi et al. A new MapReduce associative classifier based on a new storage format for large-scale imbalanced data
CN111563178A (zh) 规则逻辑图对比方法、装置、介质及电子设备
Manu et al. A current trends in big data landscape
Hashem et al. Pre-processing and modeling tools for bigdata
AU2020104034A4 (en) IML-Cloud Data Performance: Cloud Data Performance Improved using Machine Learning.

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant