本发明涉及计算机技术领域,具体涉及一种并行计算环境下分布式轮廓系数计算方法。
背景技术:
本部分向读者介绍可能与本发明的各个方面相关的背景技术,相信能够向读者提供有用的背景信息,从而有助于读者更好地理解本发明的各个方面。因此,可以理解,本部分的说明是用于上述目的,而并非构成对现有技术的承认。
spark作为主流的开源分布式计算框架,广泛的应用于分析计算领域。spark提供了基于其计算框架的用于机器学习的ml和mllib库。其中已有各种聚类算法,如k-means,高斯混合等。由于初始点选取,迭代收敛性等问题,造成聚类效果很不稳定。为了得到理想的聚类结果,通常会进行多次探索,对各种方法和参数进行调整。这时,如何正确衡量聚类效果的问题就变得非常重要。k-means常用的衡量类效果的方法是代价(cost)计算方法。这种方法计算所有点到最近类中心点的距离之和,比较不同聚类结果的距离和的大小。这种计算方法只计算了类内距离,并没有考虑类间距离。
轮廓系数(silhouettecoefficient)方法结合了聚类的凝聚度(cohesion)和分离度(separation),用于评估聚类的效果。该值处于-1~1之间,值越大,表示聚类效果越好。轮廓系数方法比代价计算方法更准确的衡量聚类效果。
但是,轮廓系数的计算复杂度非常高,甚至高于k-means聚类方法本身。当大规模数据进行k-means聚类时,算法复杂度为o(i*k*n),其中i为迭代次数,k为聚类数,n为聚类点规模。一般情况下,i<50,k<10,而n非常大。计算轮廓系数的复杂度为o(n*k*n)。当n很大时,采用轮廓系数作为衡量方法的代价非常高。目前spark中并没有提供轮廓系数的计算方法。其他的分布式平台上,如hadoop平台,也没有并行计算轮廓系数的算法实现。
现有的方法在spark上并不适用,只能用于hdfs存储环境。
技术实现要素:
要解决的技术问题是如何提供一种并行计算环境下分布式轮廓系数计算方法和系统。
针对现有技术中的缺陷,本发明提供一种并行计算环境下分布式轮廓系数计算方法和系统,可以快速得到轮廓系数的值。
第一方面,本发明提供了一种并行计算环境下分布式轮廓系数计算方法,包括:
计算当前聚类的任意两个元素之间的距离;
根据所述任意两个元素之间的距离计算任意一个元素与任意类数据距离的平均值,得到元素与类间距离,通过元素与所在类距离得到凝聚度;
根据所述任意一个元素与任意类距离的最小值计算任意元素与非所在类之间的离散度;
根据所述凝聚度和所述离散度计算元素的轮廓系数。
可选地,还包括:创建源数据文件步骤。
可选地,所述源数据文件包括文本文件、数据库或数据表。
可选地,所述当前元素的轮廓系数按下式计算:
si=(bi–ai)/max(ai,bi)
其中,si表示轮廓系数,ai表示凝聚度,bi表示离散度。
可选地,所述整体轮廓系数计算所有元素的轮廓系数后取平均值得到的。
另一方面,本发明提供一种并行计算环境下分布式轮廓系数计算系统,包括:
元素距离计算单元,用于计算当前聚类的任意两个元素之间的距离;
元素与类距离计算单元,用于根据任意两个元素之间的距离计算任意一个元素与任意类数据距离的平均值,通过元素与所在类间距离得到凝聚度;
离散度计算单元,用于根据所述任意一个元素与非所在类距离的最小值计算当前聚类的类之间的离散度;
轮廓系数计算单元,用于根据所述凝聚度和所述离散度计算元素的轮廓系数。
可选地,还包括:
源数据文件创建单元,用于创建源数据文件。
可选地,所述源数据文件包括文本文件、数据库或者数据表。
可选地,所述当前元素的轮廓系数按下式计算:
si=(bi–ai)/max(ai,bi)
其中,si表示轮廓系数,ai表示凝聚度,bi表示离散度。
可选地,所述整体轮廓系数计算单元,用于计算所有元素的轮廓系数并取平均得到当前聚类的整体轮廓系数。
由上述技术方案可知,本发明提供的并行计算环境下分布式轮廓系数计算方法和系统,能够有效的利用分布式计算的优势,快速得到轮廓系数的值。本发明采用基于sql的计算方法,并不限于mepreduce和hdfs,如果数据是分布存储的,可以方便的在任何支持sql或者类sql的分布式计算平台上复制。本发明可以忽略算法细节,无需编程即可实现复杂的轮廓系数计算,并不用关心数据的重新分布,是利用dataframe数据结构的分布式能力与sql描述性表达的有效结合,利用spark系统本身的优化能力,达到分布式计算的效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一个实施例中一种并行计算环境下分布式轮廓系数计算方法构示意图;
图2为本发明一个实施例中一种并行计算环境下分布式轮廓系数计算系统构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明提供一种并行计算环境下分布式轮廓系数计算方法,包括:计算当前聚类的任意两个元素之间的距离;根据所述任意两个元素之间的距离计算任意一个元素与任意类数据距离的平均值,得到元素与类间距离,通过元素与所在类距离得到凝聚度;根据所述任意一个元素与任意类距离的最小值计算任意元素与非所在类之间的离散度;根据所述凝聚度和所述离散度计算元素的轮廓系数。下面对本发明提供的并行计算环境下分布式轮廓系数计算方法展开详细的说明。
spark是apache开源分布式计算框架,基于rdd数据结构,具有比mapreduce更灵活的运行机制和更高的效率,被广泛的应用于大数据分析和计算中。spark提供了用于机器学习的组件ml和mllib,内置了基于分布式计算的聚类等方法,如k-means和混合高斯模型等。spark提供基于rdd的dataframe分布式数据结构,用于操作有确切schema的数据,并可以用sparksql对df进行操作,并不关心数据的分布情况。本发明基于spark的dataframe和sparksql查询语言。本发明用轮廓系数衡量基于距离的聚类,更精确的计算类的凝聚度和离散度。为目前spark上实现的聚类方法提供的更准确,更方便的衡量方法。
源数据dataframe用于聚类的源数据是具有统一的数据结构。用dataframe表示为:
pointindex:dataframe(pointid:int,
features:vector[double],
prediction:int)
其中,pointid样本标识;features为样本的值;prediction为样本类别标识。本发明可以采用类scala语言描述算法逻辑。用dataframe数据结构作为计算的基本数据结构,实现的分布式的轮廓系数计算。本发明的轮廓系数计算方法的源数据,计算中间结果和最终结果均采用统一的dataframe数据结构,无需在计算中间做数据重构。减少了数据在计算和存储节点之间转移的代价。dataframe作为spark一种基础数据结构,可以从多种数据源进行构建,如文本,hive,hbase,mongodb或者关系数据库中。也可以缓存或存储于上述存储介质中,保证了计算和存储之间的流畅性和扩展性。
根据样本数据和计算目的的不同,有多重计算距离的方法。例如欧式距离,余弦夹角距离等。sparksql支持用户自定义函数(udf),基于udf定义不同的距离计算公式,并可以在sql中调用这个udf用于轮廓系数计算。本发明以欧式距离为例定义了一个udf如下:
本发明的轮廓系数计算方法基于sql语言,sql是一种描述语言,可以屏蔽计算的细节,应用者无需关心具体的计算算法和实现语言,只需关注计算逻辑,spark计算系统根据sql语句转换为可执行的分布式spark任务。本发明仅用4个sql语句,实现了需要数百行代码才能实现的复杂计算逻辑。大大减少了实现难度。使用sql语句实现轮廓系数计算的另一个优势是跨平台的扩展性。虽然本发明是基于spark的分布式计算平台,但是本发明提供的sql语句可以非常方便的扩展到任何支持sql或者类sql的分布式计算或者存储平台上,如hive,impala,mongodb,druid等。对于一些mpp架构的数据仓库,如greenplum,postgressql等同样适合。
首先,介绍计算当前聚类的任意两个元素之间的距离。
具体地,以当前聚类中的所有元素为数据集1和数据集2,两个数据集进行连接运算,连接运算的公式为数据集1的元素标识不等于数据集2的元素标识。计算当前聚类的任意两个元素之间的距离方案举例如下:
上述实施例程序(scala)中举例说明了源数据dataframe的创建过程。在实际的应用中,源数据可由文本文件,数据库(nosql,关系等)数据表等源生成。利用基于不等式的连接运算,计算任意两个样本(point1,point2)之间的距离。在df3的数据结构中,保留了样本所属类用于后续步骤的计算。其中point1所属类用cluster1表示;point2所属类用cluster2表示。
其次,介绍根据所述任意两个元素之间的距离计算任意一个元素与任意类数据距离,其中任意元素与所在类元素距离的平均值得到凝聚度。
根据当前聚类中的任意两个元素之间的距离,按照元素所在类,元素标识,和目标元素所在类进行分组,计算每组中的平均距离。计算如下:
在上述实施例的程序中,计算了任意一个样本point1到任意一类cluster2的距离a_distance。其中样本point1所属类别为cluster1,如果cluster1=cluster2,则距离为凝聚度。在本步计算中得到了凝聚度的值,并且为计算离散度准备了样本点到任意类的距离,用于下一步的计算。
再次,介绍根据所述任意一个元素与非所在类数据距离的最小计算当前聚类的类之间的离散度。
在本发明中,以元素到任意类距离集合为基础,过滤元素与目标元素不等的类,得到所有元素到非所在类的距离集合。在此集合中按照元素类别,和元素标识进行分组,分别计算组内距离的最小值。计算当前聚类的类之间的离散度方案举例如下:
在样本到不同类的距离中选择最小的距离作为离散度。在上述例子程序中,计算了任意一个样本point1到任意其他类的最小距离b_distance。
第三,根据所述凝聚度和所述离散度计算元素的轮廓系数;
具体地,对于任一样本xi,轮廓系数si=(b_distance–a_distance)/max(a_distance,bi_distance)。其中,si表示轮廓系数,a_ditance表示凝聚度,b_distance表示离散度。计算了任意一点point1的轮廓系数s如下:
在上述实施例的程序中,以第二步得到的凝聚度集合,和第三步得到的离散度集合进行连接计算,连接计算表达式为元素标识,和元素类别相等。df6为任意一点point1的轮廓系数si的集合。最后,介绍计算所有元素的轮廓系数并计算当前聚类的整体轮廓系数,计算方法为取所有点轮廓系数的平均值。df7聚类结果的平均轮廓系数。
在本发明的实施例中,按照上述方法,计算当前聚类中所有元素的轮廓系数,将这些元素的轮廓系数累加计算所有x的轮廓系数,求出平均值即为当前聚类的整体轮廓系数。
本发明提供了基于sparksqludf的自定义距离函数。应用者可根据需求自定义距离公式,无需修改sql语句,即可实现基于不同距离公式的轮廓系数计算。
为进一步体现本发明提供的一种并行计算环境下分布式轮廓方法的优越性,本发明还提供一种应用上述方法的一种并行计算环境下分布式轮廓系数计算系统,如图2所示,该系统包括:元素距离计算单元,用于计算当前聚类的任意两个元素之间的距离;凝聚度计算单元,用于根据任意两个元素之间的距离计算任意一个元素与任意类数据距离的平均值,其中到所在类聚类为凝聚度;离散度计算单元,用于根据所述任意一个元素与任意类距离的最小值计算当前聚类的类之间的离散度;轮廓系数计算单元,用于根据所述凝聚度和所述离散度计算元素的轮廓系数;整体轮廓系数计算单元,计算所有元素的轮廓系数并计算当前聚类的整体轮廓系数。下面对本发明提供的并行计算环境下分布式轮廓系数计算系统展开详细的说明。
在本发明中,并行计算环境下分布式轮廓系数计算系统,其还包括:源数据文件创建单元,用于创建源数据文件。所述源数据文件包括文本文件、数据库和数据表。用于聚类的源数据具有统一的数据结构。用dataframe表示为:
pointindex:dataframe(pointid:int,
features:vector[double],
prediction:int)
其中,pointid样本标识;features为样本的值;prediction为样本类别标识。本发明可以采用类scala语言描述算法逻辑。用dataframe数据结构作为计算的基本数据结构,实现的分布式的轮廓系数计算。本发明的轮廓系数计算方法的源数据,计算中间结果和最终结果均采用统一的dataframe数据结构,无需在计算中间做数据重构。减少了数据在计算和存储节点之间转移的代价。dataframe作为spark一种基础数据结构,可以从多种数据源进行构建,如文本,hive,hbase,mongodb或者关系数据库中。也可以缓存或存储于上述存储介质中,保证了计算和存储之间的流畅性和扩展性。
元素距离计算单元,用于计算当前聚类的任意两个元素之间的距离;具体地,以当前聚类中的所有元素为数据集1,和数据集2,两个数据集进行连接运算,连接运算的公式为数据集1的元素标识不等于数据集2的元素标识。计算当前聚类的任意两个元素之间的距离方案举例如下:
上述实施例程序(scala)中举例说明了源数据dataframe的创建过程。在实际的应用中,源数据可由文本文件,或数据库(nosql,关系等)数据表等源生成。利用基于不等式的连接运算,计算任意两个样本(point1,point2)之间的距离。在df3的数据结构中,保留了样本所属类用于后续步骤的计算。其中point1所属类用cluster1表示;point2所属类用cluster2表示。
凝聚度计算单元,用于根据所述任意两个元素之间的距离计算任意一个元素与任意类数据距离,其中任意元素与所在类元素距离的平均值得到凝聚度。
根据当前聚类中的任意两个元素之间的距离,按照元素所在类,元素标识,和目标元素所在类进行分组,计算每组的平均距离。计算如下:
在上述实施例的程序中,计算了任意一个样本point1到任意一类cluster2的距离a_distance。其中样本point1所属类别为cluster1,如果cluster1=cluster2,则距离为凝聚度。在本步计算中得到了凝聚度的值,并且为计算离散度准备了样本点到任意类的距离,用于下一步的计算。
离散度计算单元,用于根据所述任意一个元素与非所在类数据距离的最小值计算当前聚类的类间的离散度。
在本发明中,以元素到任意类距离集合为基础,过滤元素与目标
元素不等的类,得到所有元素到非所在类的距离集合。在此集合中按照元素类别,和元素标识进行分组,分别计算组内距离的最小值。用于量化类之间的分离度。计算当前聚类的类之间的离散度方案举例如下:
在样本到不同类的距离中选择最小的距离作为离散度。在上述例子程序中,计算了任意一个样本point1到任意其他类的最小距离b_distance。
轮廓系数计算单元,用于根据所述凝聚度和所述离散度计算元素的轮廓系数;
具体地,对于任一样本xi,轮廓系数si=(b_distance–a_distance)/max(a_distance,bi_distance)。其中,si表示轮廓系数,a_ditance表示凝聚度,b_distance表示离散度。计算了任意一点point1的轮廓系数s如下:
在上述实施例的程序中,以第二步得到的凝聚度集合,和第三步得到的离散度集合进行连接计算,连接计算表达式为元素标识,和元素类别相等。df6为计算任意一点point1的轮廓系数si的结果集。,
整体轮廓系数计算单元,取所有元素的轮廓系数的平均值计算当前聚类的整体轮廓系数。df7为聚类结果的平均轮廓系数。在本发明的实施例中,按照上述方法,计算当前聚类中所有元素的轮廓系数,将这些元素的轮廓系数累加计算所有x的轮廓系数,求出平均值即为当前聚类的整体轮廓系数。
本发明在以spark为代表的分布式计算框架中可以用于计算和衡量各种聚类的效果。从聚类衡量效果角度看,本发明具有更客观准确的衡量效果。从计算复杂度角度看,利用sql语言屏蔽了复杂的轮廓计算实现方法,仅用4个sql语句就实现了轮廓系数计算。从数据处理角度,本发明提出的方法适用于任何支持sql或者类sql的分布式计算平台上大规模数据聚类的场景。
综上所述,本发明提供的并行计算环境下分布式轮廓系数计算方法和系统能够有效的利用分布式计算的优势,快速得到轮廓系数的值。本发明采用基于sql的计算方法,并不限于mepreduce和hdfs,如果数据是分布存储的,可以方便的在任何支持sql或者类sql的分布式计算平台上复制。本发明可以忽略算法细节,无需编程即可实现复杂的轮廓系数计算,并不用关心数据的重新分布,是利用dataframe数据结构的分布式能力与sql描述性表达的有效结合,利用spark系统本身的优化能力,达到分布式计算的效果。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
本发明的说明书中,说明了大量具体细节。然而能够理解的是,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本发明公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释呈反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。本发明并不局限于任何单一的方面,也不局限于任何单一的实施例,也不局限于这些方面和/或实施例的任意组合和/或置换。而且,可以单独使用本发明的每个方面和/或实施例或者与一个或更多其他方面和/或其实施例结合使用。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。