一种MapReduce平台上的海量高维数据聚类方法转让专利

申请号 : CN201110148982.5

文献号 : CN102222092B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 廖松博何震瀛汪卫

申请人 : 复旦大学

摘要 :

本发明属于云计算与数据挖掘技术领域,具体为一种MapReduce平台上的海量高维数据聚类方法。该方法首先对原始数据的每一维进行分割,用切分好的非空小格代替原数据中的点集进行聚类,减小数据规模。利用MapReduce的开源实现,使得聚类过程可以在分布式集群上并行完成,克服了单机算法在存储和计算上的限制。聚类过程采用K-mediods算法的思想,并提出高效的欧式距离计算方法。本发明适用于处理海量高维数据,用户可以根据集群的计算能力、算法的时间期望以及对聚类精确性的要求对算法进行手动调整,满足了不同用户的需要。

权利要求 :

1.一种MapReduce平台上的海量高维数据聚类方法,其特征在于具体步骤如下:(1)对于输入的海量高维数据进行预处理,设高维数据为D维,首先是对原数据各维进行标准化,之后将每一维切成N格,生成非空的D维格子集合;

(2)以步骤(1)输出的结果作为输入,实现MapReduce平台上的K-mediods并行算法,通过迭代计算对D维格子集合进行聚类;

(3)将步骤(2)得出的D维格子聚类的结果还原成原始的D维点集聚类结果,并按照用户的需求进行最终整理及输出;其中,步骤(1)中所述预处理的操作如下:

(1)由用户指定每一维切成几格,假设切成N格,N由用户指定;

(2)利用MapReduce计算每一维的最大值和最小值;

(3)利用操作(2)的结果,将原始高维数据标准化,即将每个坐标映射为[0,N)之间的某个整数;

(4)去除坐标重复的D维格子;

(5)将去重后的数据上传到HDFS上;

步骤(2)中所述K-mediods过程的操作如下:(1)首先在所有的D维格子中选出一些类中心点,作为最初的中心点集合,每个中心点管辖一个类;

(2)将中心点集合分发到集群中所有机器的本地硬盘上;

(3)分类:计算每个D维格子离哪个中心点最近,将格子分配给与其距离最近的中心点所管辖的类中;

(4)更新中心点集合:计算每个类中所有格子坐标在每一维上的中位数,作为新的中心点坐标,并输出;

(5)按照操作(4)的输出生成新的中心点集合,并分发到集群中所有机器的本地硬盘上,取代之前的集合; (6)重复操作(3)、(4)和(5),直到中心点集合中的所有坐标都不再改变;

(7)输出聚类结果;

步骤(3)中所述还原输出过程的操作如下:(1)通过点与格子进行匹配,格子与类的关系,输出每个点属于哪个类;

(2)收集每个类中的所有点,并将其输出;

(3)按用户需求进行调整,输出最终结果。

说明书 :

一种MapReduce平台上的海量高维数据聚类方法

技术领域

[0001] 本发明属于云计算与数据挖掘技术领域,具体涉及一种利用MapReduce分布式计算框架对海量高维数据的进行聚类的方法。

背景技术

[0002] 高维数据的分析一直是数据挖据中的难题,当维度达到一定高度时,很多对低维数据很有效的聚类方法便不再适用。对于海量高维数据来说,分析和挖掘更涉及到内存和硬盘的限制。
[0003] 近年来,MapReduce及其开源版本Hadoop的研究非常活跃。许多单机算法都在Hadoop上予以重新实现,为各种算法处理海量数据提供了高可用性和可扩展性。
[0004] Mahout是 Apache 旗下基于Hadoop的一个开源项目,提供一些可扩展的机器学习领域经典算法在Hadoop上的实现,包括聚类、分类、推荐过滤、频繁子项挖掘。Mahout将很多数据挖掘的经典算法,例如K-means,贝叶斯分类,SVM等在Hadoop-MapReduce平台上重新实现,使得这些传统算法具有并行处理海量数据的能力。通过使用 Hadoop,Mahout 中的各种数据挖据算法可以有效地扩展到分布式集群中。
[0005] 但是,在Mahout中针对坐标的聚类方法例如K-means,往往是面向低维数据,在对海量高维数据进行聚类时往往会出现内存不足,性能不佳等问题。

发明内容

[0006] 本发明的目的是针对海量高维数据的聚类问题,提出一种利用MapReduce分布式计算框架对海量高维数据的进行高效聚类的方法,为用户提供可定制性和可扩展性,并优化算法效率。
[0007] 本发明提出的高维数据聚类方法,利用Hadoop分布式计算框架,结合切格处理和高效距离计算,对海量高维数据进行分布式并行聚类,实现了高可扩展性和可定制性,提高了聚类的效率和实际应用价值。
[0008] 首先对一些基本概念进行介绍和定义:
[0009] 定义1. MapReduce:MapReduce是谷歌提出的分布式并行计算框架,它让程序员只需关注数据的处理,而数据的分布式存储和容错都交给计算框架来解决。在MapReduce平台上的计算过程中,数据首先被切分到集群的不同节点上,以Key→Value的形式存储在分布式文件系统中;计算过程主要分为两个阶段:Map阶段和Reduce阶段。集群中的每台机器都有一些几个Map和Reduce任务,Map过程是生成一些,共享同一个key的由同一个Reduce来处理。而我们所使用的Hadoop是MapReduce的开源实现,由Apache基金会开发。
[0010] 定义2. K-mediods算法:K-mediods算法是一种基于坐标的聚类算法,算法基本过程是首先选择一些中心点代表每个类,之后按每个点与中心点的距离将所有点分配到类中,再将每个类中的所有点坐标求中位数得到新的类中心点,反复迭代,直到中心点不再变化。K-mediods算法类似于K-Means算法,但克服了K-Means算法对孤立点的敏感性。
[0011] 定义3. 切格:设初始数据中的每个点都有D维,本方法将每一维切成N等份(N由用户指定),切分完毕后,,每个点都落入唯一的格子中,所有格子在每一维的坐标都是[0,N )的一个整数。本发明在聚类过程中使用所有非空格子代替初始点集进行聚类。
[0012] 定义4. 记录:在处理过程中,本发明用每一行记录代表一个点或一个非空格子的所有维坐标。例如“0 7 6 3 5”,代表一个5维格子的坐标。
[0013] 定义5. 用ASCII码计算欧氏距离:在计算欧式的距离过程中,由于每一维的切格数N往往小于128,一般情况下常常小于10,可以用每一行记录的各有效位的ASCII码直接相减,再求平方和得到欧式距离。例如N=10,两个格子坐标行分别为“7 5 6 2”和“4 6 80”,可以用两行的单数位ASCII码直接相减,不用将每个坐标字符转换为数字再相减,大大提高了计算效率;
[0014] 根据以上定义,给定海量高维数据集合,每一行为一个点的D维坐标,本发明提出的聚类方法是基于以下性质的:
[0015] (1)在将每一维切成N格后,每个点都落入唯一的D维格子中,N越大,每个D维格子中的点越少,用D维格子进行聚类与用原始点集进行聚类的结果越接近。
[0016] (2)由于非空的D维格子数量小于原始点集的数量,而且D维格子的所有坐标均为整数,而原始点集的坐标往往为浮点数,所以数据规模必然下降。
[0017] (3)在K-mediods迭代聚类过程中,当所有中心点坐标不再变化,每个D维格子已经分配给固定的类,聚类过程完毕。
[0018] (4)在计算欧式距离时,当坐标值小于128,用两个ASCII码直接相减和两个数字相减求距离结果是一样的。
[0019] 基于以上性质,本发明方法利用切格和高效距离计算方法,在MapReduce平台上实现海量高维数据聚类,整个聚类过程具体步骤为:
[0020] (1)对于输入的海量高维数据(假设为D维)进行预处理,首先是对原数据各维进行标准化,之后将每一维切成N格,生成非空D维格子的集合;
[0021] (2)以步骤(1)输出的结果作为输入,实现MapReduce平台上的K-mediods并行算法,通过迭代计算对所有非空的D维格子进行聚类;
[0022] (3)将步骤(2)得出的D维格子聚类的结果还原成原始的D维数据聚类结果,并按照用户的需求进行最终整理输出。
[0023] 整个聚类过程步骤(1)中,所述预处理的操作如下:
[0024] (1)由用户指定每一维切成几格,假设切成N格。N越大,聚类效果越精确,但聚类时间会更长。N越小,聚类的时间越短,但聚类效果会较差; N由用户根据需求自己设定;
[0025] (2)利用MapReduce计算每一维的最大值和最小值:Map过程读入所有数据,将每行记录中每一维分别输出,而每个Reduce处理所有记录在某一维上的坐标,并计算出所有点在此维的最大值和最小值;
[0026] (3)利用操作(2)的结果,将原始数据每个坐标标准化即映射为[0,N)之间的某个整数。假设输入坐标为doublenum,此维度的最大值最小值分别为Max和Min,则标准化后的此维度的坐标值为(doublenum-Min)*10/(Max-Min),省略小数部分,输出整数结果。即所有切格后非空的D维格子的坐标;
[0027] (4)去除坐标重复的D维格子,通过排序后一边扫描进行去重;
[0028] (5)将去重后的数据上传到HDFS(Hadoop的分布式文件系统上)。 [0029] 整个聚类过程步骤(2)中,所述K-mediods并行算法的操作如下:
[0030] (1)首先在所有的D维格子中选出一些类中心点:假设要求将所有点聚成C个类,在上述说明2中所生成的非空格子集合中随机选择C个格子作为中心点,作为最初的中心点集合;
[0031] (2)将中心点集合分发到集群中所有机器的本地硬盘上;
[0032] (3)分类过程:Map过程将所有格子均匀分布到每台机器上,每台机器的Reduce过程收集分配给它的所有D维格子,并从本地读取此时的中心点集合,计算每个D维格子离哪个中心点最近,将格子分配给与其距离最近的中心点所管辖的类中。在计算距离过程中,由于每一维的切格数N往往小于128,可以用两个格子的坐标记录中各有效位的ASCII码直接相减再求平方和得到欧式距离。可以极大提高计算效率;
[0033] (4)更新中心点集合:Map过程将离每个中心点所管辖的类中的所有D维格子分配给同一个Reduce来处理。而每个Reduce计算本类中所有格子坐标在每一维上的中位数,作为新的中心点坐标,并输出;
[0034] (5)按照操作(4)的输出生成新的中心点集合,并分发到集群中所有机器的本地硬盘上,取代之前的集合;
[0035] (6)重复操作步骤(3)、(4)和(5),直到中心点集合中的所有坐标都不再改变;
[0036] (7)输出聚类结果。
[0037] 整个聚类过程步骤(3)中所述还原输出过程的操作如下:
[0038] (1)匹配过程:Map输入数据为两部分:一是所有的D维格子及其所属的类编号,二是原始数据,即所有的初始点坐标。Map根据这两部分数据计算每个点坐标在哪个格子内,并根据每个格子所属的类,将其匹配关系及每个点的类号输出给Reduce;
[0039] (2)每个Reduce收集属于一个类的所有点,并将其输出;
[0040] (3)将输出结果按用户需求进行相关格式调整,输出最终结果。
[0041] 根据以上步骤进行的聚类方法,在预处理阶段减小了数据规模,在聚类阶段使用了高效的距离计算方法,从而改善了系统运行的时间。附图2为采用切格方法与不采用切格方法的聚类时间对比,附图3为用ASCII码计算欧氏距离与将坐标记录转换为数字再计算距离的时间对比。从图中可以看出,本发明方法的显著的改善了聚类的执行时间。
[0042] 综上所述,本发明首先对原始数据的每一维进行分割,用切分好的非空小格代替原数据中的点集进行聚类,减小数据规模。分割规则可以由用户指定,实现了良好的可定制性。利用MapReduce的开源实现——Hadoop,使得聚类过程可以在分布式集群上并行完成,克服了单机算法在存储和计算上的限制。聚类过程采用K-mediods算法的思想,并提出高效的欧式距离计算方法。本发明适用于处理海量高维数据,用户可以根据集群的计算能力、算法的时间期望以及对聚类精确性的要求对算法进行手动调整,满足了不同用户的需要。

附图说明

[0043] 图1显示了MapReduce分布式框架的计算处理过程。
[0044] 图2显示了采用切格方法与不采用切格方法的聚类时间对比。二者均不采用ASCII码计算欧氏距离。取的时间为K-mediods每轮迭代的时间。
[0045] 图3显示了在同是切成6格和10格的情况下,使用ASCII码计算欧氏距离与将坐标记录转换为数字再计算距离的时间对比。取的时间为K-mediods每轮迭代的时间。
[0046] 图4显示了一部分聚类结果。

具体实施方式

[0047] 本发明所描述的高维聚类方法是基于MapReduce分布式计算平台和K-mediods算法的,下面将通过一个例子详细描述本发明所述方法的具体实施方式:
[0048] 输入数据为2000个音乐特征文件,是从2000首中文歌曲中提取出的。每首歌被分割成约5000帧,每帧有26个属性,用浮点数表示,要求将所有帧聚成1500个类。我们将此约1000万帧看做点集合,每个点的26个属性作为26维坐标,按照以下步骤进行聚类:
[0049] (1)首先将每一维切成10格(N=10),得到所有非空的26维格子,并去重。由于N=10,所以每一维的坐标值为 [0,9]范围内的整数。
[0050] (2)在步骤(1)输出的所有26维格子中随机选择1500个格子作为最初的中心点。
[0051] (3)将步骤(1)输出的所有26维格子在MapReduce分布式平台上进行聚类。在计算距离时,用两个格子坐标记录中的0,2,4…50为的ASCII码直接相减求平方和得到欧氏距离。
[0052] (4)用当前每个类中所有格子在每一维上坐标求中位数,作为新的类中心点坐标。更新所有的中心点坐标。
[0053] (5)重复步骤(3)、(4)直到所有中心点坐标不再变化。
[0054] (6)将已经聚好类的26维格子还原成原本的点集。并按用户的需求输出最终结果。