基于Spark的快速寻找聚类中心的方法和系统与流程

文档序号:16975772发布日期:2019-02-26 18:58阅读:711来源:国知局
基于Spark的快速寻找聚类中心的方法和系统与流程

本发明涉及一种基于spark的快速寻找聚类中心的方法和系统,涉及计算机信息获取和处理技术。



背景技术:

本发明致力于解决大数据背景下高效解决聚类问题,基于spark分布式平台实现cfsfdp(clusteringbyfastsearchandfindofdensitypeaks)算法的并行化,使得这个优秀的聚类算法可以应用于大数据环境下。

在无监督学习中,训练样本的标记信息是未知的,目标是通过无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。聚类在这类研究中扮演着重要角色,聚类是通过将数据划分为若干个不相关的簇来探索数据中固有的规律和分布结构,在数据划分过程中基于物以类聚的原则,尽可能将类似的数据分到同一类簇,将不同的数据组织成不同的类簇。聚类应用领域广泛,如图像处理、网络安全、模式识别、生物信息学、蛋白质分析和社交网络等。目前有多种聚类算法,大致可分为原型聚类、层次化聚类、划分式聚类、基于密度和网格的聚类算法和其他聚类算法。在数据驱动时代的背景下,将聚类算法并行化是聚类算法应用于大数据的有效途径。目前基于spark并行化的聚类算法有k-means和混合高斯聚类。

k-means算法是目前应用最广的算法之一,对于数值属性的数据,他能很好的体现聚类在几何和统计学上的意义。k-means算法的基本思想是随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心.对剩余的每个对象,根据其与各个簇中心的距离,将它赋给最近的簇.然后重新计算每个簇的平均值.这个过程不断重复,直到目标函数收敛.通常定义为公式(1)的目标函数,采用启发式方法使得目标函数值最小。

其中p对象空间中的一个数据数据对象,m为类ci的均值,公式(1)在一定程度上刻画了类簇内样本围绕簇均值向量的紧密程度。e值越小则簇内样本相似度越高。

高斯混合模型(gaussianmixturemodel,简称gmm)是最成熟的聚类方法之一,基本思想是假设待聚类的数据集是从多个混合在一起的多元高斯分布,从而用极大似然估计的思想来聚类。gmm是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。通俗点讲,无论观测数据集如何分布以及呈现何种规律,都可以通过多个单一高斯模型的混合进行拟合。所以gmm模型就是通过由单一高斯分布混合成的混合高斯分布去拟合数据从而达到聚类的目的。单高斯分布基本定义是:若随机变量x服从一个数学期望为、方差为σ2的高斯分布,则记为n(μ,σ2)。数学期望μ指的是均值(算术平均值),σ为方标准差(方差开平方后得到标准差)。一维高斯分布的概率密度函数为:

多维高斯分布模型下的概率密度函数:

在(3)公式中,x是维度为d的列向量,μ是模型期望,σ是模型方差。在实际应用中μ通常用样本均值来代替,σ通常用样本方差来代替。很容易判断一个样x本是否属于类别c。因为每个类别都有自己的μ和σ,把x代入公式中,当概率大于一定阈值时我们就认为x属于c类。从几何形状上讲,单高斯分布模型在二维空间应该近似于椭圆,在三维空间上近似于椭球。但单高斯分布模型的问题是在很多分类问题中,属于同一类别的样本点并不满足“椭圆”分布的特性。因此,就需要引入高斯混合模型来解决这个问题。基于单高斯模型的混合高斯模型公式如下所示:

其中,k需要事先确定好,就像k-means中的k一样,只要k足够大,这个gaussianmixturemodel就会变得足够复杂,就可以用来逼近任意连续的概率密度分布。πk是权值因子。其中的任意一个高斯分布n(x;μk,σk)叫作这个模型的一个component(成分)。gmm是一种聚类算法,每个component就是一个聚类中心。接下来就是求解,gmm通常使用最大期望(expectationmaximum,简称em)进行参数评估。em算法的基本思路是:随机初始化一组参数θ(0),根据后验概率r(y|x;θ)来更新y的期望e(y),然后用e(y)代替y求出新的模型参数θ(1)。如此迭代直到θ趋于稳定。

cfsfdp(clusteringbyfastsearchandfindofdensitypeaks)聚类算法是2014年由alexrodriguez和alessandrolaio提出,并发表在美国《科学》(science)杂志上,该聚类算法思想新颖,简单明快。cfsfdp算法最具创新性的思想是对聚类中心的刻画,即聚类中心应该同时具备两个特点:1.本身的密度大,即该聚类中心被密度均不超过它的邻居包围;2.与其它更大的数据点之间的距离相对更大,即该聚类中心之间的距离应该尽可能的远。算法首先定义局部密度ρi和距离δi,具体定义如下:

局部密度ρi:

其中

距离δi:

其中dc是一个阈值,是用来计算密度时所需要的参数,所以ρi相当于距离点i的距离小于的点的个数,δi这样计算,首先先找到所有比i点密度大的所有样本集合s,计算出s中每个样本点距离i点的距离,得到距离集合d,d中最小值即为δi。对于密度最大的点,由定义可知,局部密度最大的点肯定是一个中心点。

具体的算法步骤:

计算密度ρi,首先计算两两之间的距离,然后根据密度定义计算每个点的密度,实际过程中可以使用高斯核函数(gaussiankernel),即

计算每个点的距离δi,即寻找比i点密度大的点中最短的距离,对应的点定义为邻居点(neighbor)。

根据计算得到的ρi、δi确定聚类中心,ρi、δi同时大的点为聚类中心。

类别指定,i点与其对应的neighbor点类别一致,首先按照密度将数据点排序,然后进行类别指定。

基于spark的并行实现k-means和高斯混合聚类算法,使得聚类算法可以处理的数据量大大增加,并且大幅度提高了数据处理的效率,应用范围很广。但算法本身还是有不足地方。

k-means算法需要输入类别数目,对初始值设定很敏感,需要一定的先验知识,并且不能解决非凸数据,只能识别圆状和球状簇,不能识别非球状簇,对于不规则形状,k-means完全没办法用,而且k-means对噪声觉离群值非常敏感。

gmm(混合高斯聚类)算法主要是基于概率生成模型,同一类的数据属于同一概率分布,这中方法的优点是以概率形式表现,每一类的特征也可以用参数来表达;但缺点就是执行效率不高,特别是分布数量很多并且数据量很少的时候。cfsfdp聚类算法主要基两个假设,一是聚类中心的密度很大,二是聚类中心之间的距离很大,基于这两个很朴素的假设,设计出思想新颖的算法,对数据分布没有约束,并且能很好的处理噪音数据。在大数据背景下,cfsfdp聚类算法对数据的处理效率和数据处理规模方面表现出严重不足。



技术实现要素:

为解决上述问题,本发明公开了一种基于spark并行计算框架将cfsfdp算法并行化的算法,调高cfsfdp算法的数据处理效率和规模,解决了cfsfdp处理数据效率低的问题,可以弥补其他并行算法的不足,在大数据环境下充分发挥出cfsfdp聚类算法的优势

具体来说,本发明涉及一种快速寻找聚类中心的方法,包括:

步骤1,基于spark并行计算框架读取储存在分布式文件系统中的数据集,并生成弹性分布式数据集;

步骤2,对该弹性分布式数据集进行并行处理,得到第一数据点到第二数据点之间的第一距离;设定阈值,将该第一距离和该阈值,并行处理得到该第一数据点的密度;将该密度生成广播变量并分配到计算结点;

步骤3,对该广播变量和第一距离并行处理,得到近邻点,以及该第一数据点到该近邻点的第二距离;

步骤4,根据该密度和该第二距离选出聚类中心,进行类别指定,完成聚类。

本发明所述的快速寻找聚类中心的方法,所述步骤1之前还包括:

步骤0,配置spark参数,包括数据读取路径、数据存储路径和阈值设置参数,初始化spark环境。

本发明所述的快速寻找聚类中心的方法,所述步骤2具体包括:

步骤21,定义该第二数据点为该弹性分布式数据集中,除该第一数据点以外的所有数据点;

步骤22,将所有该第一数据点的该第一距离进行升序排序,并根据阈值设置参数,选取排序序列中某一该第一距离作为该阈值。

步骤23,该密度其中其中dij为该第一距离,dc为该阈值。

本发明所述的快速寻找聚类中心的方法,所述步骤3还包括:

以比该第一数据点的密度大的该第二数据点中,距离该第一数据点最近的数据点为该近邻点;

以该第一数据点到该近邻点的距离,为该第二距离;

该第二距离其中ρi为第一数据点的密度,ρj为第二数据点的密度。

本发明所述的快速寻找聚类中心的方法,所述步骤4具体包括:

步骤41,通过该密度和该第二距离画出决策图,并以该决策图确定聚类中心;

步骤42,将所有数据点按照该密度降序排列后,遍历该数据集;根据该聚类中心的类别信息进行类别指定,输出聚类结果。

本发明还涉及一种快速寻找聚类中心的系统,包括:

初始化模块,用于配置系统算法参数,包括数据读取路径、数据存储路径和阈值确定参数,初始化spark环境;

数据读取模块,用于基于spark并行计算框架读取储存在分布式文件系统中的数据集,并生成弹性分布式数据集。

密度获取模块,用于对该弹性分布式数据集进行并行处理,得到第一数据点到第二数据点之间的第一距离;设定阈值,将该第一距离和该阈值,并行处理得到该第一数据点的密度;将该密度生成广播变量并分配到计算结点;

第二距离获取模块,用于通过对该广播变量和第一距离并行处理,得到近邻点,以及该第一数据点到该近邻点的第二距离;

聚类模块,用于对该密度和该第二距离并行处理,获得聚类中心,进行类别指定,完成聚类。

本发明所述的快速寻找聚类中心的系统,所述密度获取模块还包括:

第一距离模块,用于得到得到第一数据点到第二数据点之间的第一距离;

阈值获取模块,用于将所有该第一数据点的该第一距离进行升序排序,并根据阈值设置参数,选取排序序列中某一该第一距离作为该阈值。

本发明所述的快速寻找聚类中心的系统,所述第二距离获取模块还包括:

近邻点获取模块,用于获取该近邻点,其中以比该第一数据点的密度大的该第二数据点中,距离该第一数据点最近的数据点为该近邻点;

第二距离模块,用于获取该第二距离,其中以该第一数据点到该近邻点的距离,为该第二距离。

本发明所述的快速寻找聚类中心的方法,所述聚类模块还包括:

聚类中心获取模块,用于通过该密度和该第二距离,画出决策图,并以该决策图确定聚类中心;

类别指定模块,将所有数据点按照该密度降序排列后,遍历该数据集;根据该聚类中心的类别信息进行类别指定,输出聚类结果。

本发明首次实现了基于spark的并行cfsfdp聚类算法,利用内存计算框架解决了该聚类算法处理数据规模小、效率低的问题。并且在处理数据中充分发挥了cfsfdp算法的优点,弥补一些常用并行聚类算法的不足

附图说明

图1rdd计算示例图;

图2sparkonyarn逻辑结构框图;

图3并行cfsfdp算法流程框图;

图4cfsfdp算法rdd依赖图;

图5聚类效果图;

图6cfsfdp聚类算法speedup测试结果;

图7cfsfdp聚类算法sizeup测试结果图;

图8cfsfdp聚类算法scaleup测试结果。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种基于spark的快速寻找聚类中心的聚类算法进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明是基于spark计算框架并行cfsfdp算法。

在spark计算框架中核心内容是对弹性分布式数据集(rdd)的转换操做(transformationsoperation)和行动操作(actionoperation)、资源管理与作业调度。

rdd的转换操作和行动操作:转换操作(如:map,filter,groupby,join等),返回值还是一个rdd,转换是惰性执行的的,也就是说从一个rdd转换生成另一个rdd的操作不是马上执行,spark在遇到转换操作时只会记录需要这样的操作,并不会去执行,需要等到有行动操作的时候才会真正启动计算过程进行计算。行动操作(如:count,collect,save等),行动操作会返回结果或把rdd数据写到存储系统中。行动操作是触发spark启动计算的动因。详细示例如图1所示:

资源管理与作业调度:spark对于资源管理与作业调度可以使用standalone(独立模式),apachemesos及hadoopyarn来实现。sprkonyarn遵循yarn的官方规范实现,得益于spark天生支持多种scheduler和executor的良好设计,对yarn的支持也就非常容易,sparkonyarn的大致框架图如图2所示:

图3给出了基于spark的算法运行的流程框图。算法主要并行了三个部分:一、计算数据两两之间的距离,将数据从hdfs分布式文件系统中读取数据,将数据分片,并行计算;二、根据计算完得到的距离计算阈值dc,之后根据dc计算每个点的密度rho和近邻点neighbor;三、根据计算的两两距离和密度rho并行计算得到每个点的“距离”delta。经过计算后将得到的delta和rho汇总到一台服务器上,串行计算得到聚类中心,得到的rho是经过降序排序的,最后的类别规则是与该点的neighbor类别一致,所以只需遍历一次所有点即可以完成聚类。spark的程序的数据流主要体现在rdd的计算上,具体数据流可以体现在rdd以依赖图中。图4为并行cfsfdp算法的rdd依赖图。

并行cfsfdp算法的详细步骤如下:

(1)并行计算数据样本两两之间的距离distances。首先将读入数据并存储为广播变量分配到各个计算结点,之后再读取数据将数据分片存储在各个结点计算两两之间的距离,达到并行计算的目的。

(2)并行计算delta和rho。首先需要计算出阈值dc,经过大量实验,dc的取值为经过排序后的有序距离集合的1%-2%处的距离值,参数t就是用来确定dc的百分比,也就是说排序之后是数量为n距离集合,取集合中n*t位置的距离做为阈值dc。计算完距离后取相应的值即可。计算出距离后形成以每个点的唯一标号id为键,该点到所有的距离(字符串拼接得到的)为值的键值对,将数据分配到各个结点进行计算,密度计算公式为:

计算完密度之后,将密度存储到各个结点,储存内容是每个点的密度值。跟据密度和计算出来的距离找出比该点密度值大的点的集合distances_rho,其中的信息有点的该点编号,密度和比该点密度大的点到该点的距离,然后计算出该集合中的距离值值最小的数值m,m即数据点的delta值,并将这个邻居点的编号存储。

(3)聚类中心选取以及类别指定。根据delta值和rho值存储到本地,画出决策图,找到聚类中心,并进行标记。之后将密度值进行排序,存到本地,排序好集合中信息包括数据编号、neighbor和类别,没有类别的数据点标记为-1,一开始只有聚类中心具有类别。遍历该集合,有用数据点的类别与其neighbor点一致,并且neighbor点的密度要比原数据点大,所以只需遍历一次即可完成类别指定。将分好类的数据存储,聚类完成。

其中,dc为在计算每个点密度时的阈值;distances为样本数据间的两两距离;t为确定dc时的参数;rho为每个数据点的密度;neighbor为比该数据点密度大的数据点中,距离该点最近的点为该点近邻点,用数据编号表示;delta为数据点和近邻点之间的距离。

具体来说,本发明涉及一种快速寻找聚类中心的方法,包括:

步骤1,基于spark并行计算框架读取储存在分布式文件系统中的数据集,并生成弹性分布式数据集;

步骤2,对该弹性分布式数据集进行并行处理,得到第一数据点到第二数据点之间的第一距离;设定阈值,将该第一距离和该阈值,并行处理得到该第一数据点的密度;将该密度生成广播变量并分配到计算结点;

步骤3,对该广播变量和第一距离并行处理,得到近邻点,以及该第一数据点到该近邻点的第二距离;

步骤4,根据该密度和该第二距离选出聚类中心,进行类别指定,完成聚类。

本发明所述的快速寻找聚类中心的方法,所述步骤1之前还包括:

步骤0,配置spark参数,包括数据读取路径、数据存储路径和阈值设置参数,初始化spark环境。

本发明所述的快速寻找聚类中心的方法,所述步骤2具体包括:

步骤21,定义该第二数据点为该弹性分布式数据集中,除该第一数据点以外的所有数据点;

步骤22,将所有该第一数据点的该第一距离进行升序排序,并根据阈值设置参数,选取排序序列中某一该第一距离作为该阈值。

步骤23,该密度其中其中dij为该第一距离,dc为该阈值。

本发明所述的快速寻找聚类中心的方法,所述步骤3还包括:

以比该第一数据点的密度大的该第二数据点中,距离该第一数据点最近的数据点为该近邻点;

以该第一数据点到该近邻点的距离,为该第二距离;

该第二距离其中ρi为第一数据点的密度,ρj为第二数据点的密度。

本发明所述的快速寻找聚类中心的方法,所述步骤4具体包括:

步骤41,通过该密度和该第二距离画出决策图,并以该决策图确定聚类中心;

步骤42,将所有数据点按照该密度降序排列后,遍历该数据集;根据该聚类中心的类别信息进行类别指定,输出聚类结果。

本发明还涉及一种快速寻找聚类中心的系统,包括:

初始化模块,用于配置系统算法参数,包括数据读取路径、数据存储路径和阈值确定参数,初始化spark环境;

数据读取模块,用于基于spark并行计算框架读取储存在分布式文件系统中的数据集,并生成弹性分布式数据集。

密度获取模块,用于对该弹性分布式数据集进行并行处理,得到第一数据点到第二数据点之间的第一距离;设定阈值,将该第一距离和该阈值,并行处理得到该第一数据点的密度;将该密度生成广播变量并分配到计算结点;

第二距离获取模块,用于通过对该广播变量和第一距离并行处理,得到近邻点,以及该第一数据点到该近邻点的第二距离;

聚类模块,用于对该密度和该第二距离并行处理,获得聚类中心,进行类别指定,完成聚类。

本发明所述的快速寻找聚类中心的系统,所述密度获取模块还包括:

第一距离模块,用于得到得到第一数据点到第二数据点之间的第一距离;

阈值获取模块,用于将所有该第一数据点的该第一距离进行升序排序,并根据阈值设置参数,选取排序序列中某一该第一距离作为该阈值。

本发明所述的快速寻找聚类中心的系统,所述第二距离获取模块还包括:

近邻点获取模块,用于获取该近邻点,其中以比该第一数据点的密度大的该第二数据点中,距离该第一数据点最近的数据点为该近邻点;

第二距离模块,用于获取该第二距离,其中以该第一数据点到该近邻点的距离,为该第二距离。

本发明所述的快速寻找聚类中心的方法,所述聚类模块还包括:

聚类中心获取模块,用于通过该密度和该第二距离,画出决策图,并以该决策图确定聚类中心;

类别指定模块,将所有数据点按照该密度降序排列后,遍历该数据集;根据该聚类中心的类别信息进行类别指定,输出聚类结果。

本发明采用了四组公开聚类数据集测试了算法的效果,四组数据集分别是“s-sets”、“aggregation”、“flame”、“spiral”,有很好的聚类效果,说明并行之后算法依然有效,聚类效果图如图5所示

测试效率时,由于网站中给的数据集较小。数据基于aggregation数据以及高斯分布生成噪音合成的人工数据。数据名为datas1,datas2,datas3,datas4,条数分别是2.4万、4.8万、9.6万和19.2万。

并行算法通常包含三种评价的方法,用来评价算法各方面的优劣,评测指标分别是speedup(加速比)、sizeup(可扩展性)和scaleup(规模增长性)。

评测speedup的方法是,保持数据不变,增加计算机的数目。计算机数目为m时的speedup计算方法如下:speedup(m)=在一台机器上面使用的时间/在m台机器上面使用的时间。

评测scaleup的方法是,在扩大数据的同时,增加计算机的数目。scaleup计算方法如下:

scaleup(db,m)=使用1台电脑在db上运行算法使用的时间/使用m台电脑在m*db上运行算法使用的时间。评测sizeup的方法是,保持计算机的数目不变,扩大数据。用来测试算法本身的一个时间复杂度。scaleup计算方法如下:sizeup(db,m)=在m*db数据上面所花费的时间÷在db上面所花费的时间。测试结果见图6、图7、图8。

从图6可以看出,当数据规模比较小的时候,由于数据通信的时间占的比重较大,而计算量相对于通信代价占小部分,所以增加节点也得不到好的效果。数据量变大时,需要大量计算,所以加速比趋近于线性;从图7可以看出,sizeup的值很大,随着节点数增多,数据量变大的时候,sizeup的值变化比一个节点的时候小,说明节点数增多的时候,运行时间随着数据规模增大,变化会没那么明显得增长;从图8可以看出,该并行算法的scaleup是下降的,对数据集的大小有很好的适应性;综上,并行cfsfdp算法提高了数据的处理效率和处理规模。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1