使用OpenCL加速的快速全局K-均值聚类方法与流程

文档序号:14941198发布日期:2018-07-13 20:51阅读:240来源:国知局

本发明属于数据处理技术领域,更进一步涉及数据挖掘技术领域中的一种使用开放运算语言opencl(opencomputinglanguage)硬件设备加速的快速全局k-均值(fastglobalk-means)聚类方法。本发明可以实现并行加速快速全局k-均值聚类方法,可在开放运算语言opencl硬件设备上实现对海量数据进行实时处理。



背景技术:

快速全局k-均值算法采用不依赖于任何初始参数值的确定性方法而不是随机搜索来得到初始聚类中心,解决了传统基于局部搜索的k-均值聚类方法聚类结果稳定性差的问题,并通过优化全局k均值增加新聚类中心的计算方法从而减小了运行时间。

tcl集团股份有限公司在其申请的专利文献“一种并行化k-means改进方法及系统”(申请日:2016年6月22日,申请号:201610455944.7,公开号:cn106127244a)中公开了一种并行化k-means改进方法。该方法通过spark大数据平台读取存放在分布式文件系统上的数据对象集,生成弹性数据集rdd;采用map操作将所述弹性数据集rdd转化为向量数据集;通过map操作对所述向量数据集进行canopy计算,得到p个canopy集合以及各个canopy集合的中心点,将p个canopy集合的中心点赋值给k个cluster的中心点;通过map操作对所述向量数据集进行k-means计算,输出聚类结果。该方法存在不足之处是,使用spark平台实现的并行化k-means,代码无法在各种支持开放运算语言opencl的硬件设备上移植,可移植性不高,只适用于分布式系统,无法在gpu、fpga、mic等硬件设备上进行并行加速,大大限制了其应用范围。

zhuh等人在其发表的论文“parallelfastglobalk-meansalgorithmforsyntheticapertureradarimagechangedetectionusingopencl”([c]geoscienceandremotesensingsymposium.ieee,2015:322-325)中提出一种使用开放运算语言opencl实现并行快速全局k-均值算法,并用于sar图像变换的检测方法。该方法首先在主机端使用对数比值算法对两幅同一地区不同时相的sar图像进行处理,生成差异图,然后选取差异图数据的质心作为第一个聚类中心,计算所有数据到质心的欧氏距离,再将差异图与欧氏距离拷贝到异构设备中,在异构设备上并行完成新的聚类中心的选取,并将新的聚类中心初始点拷贝回主机端,在主机端使用k-means算法将差异图数据聚为两类,最终根据每个像素点的类别生成sar图像的变化检测结果。该方法将算法中最耗时的选择初始聚类中心点的步骤使用开放运算语言opencl在异构设备上进行并行加速。但是,该方法仍然存在不足之处是,该方法在异构设备端加速算法时需要存储大量的中间计算结果,当输入图像数据量太大时,超过了异构设备的存储容量,由此导致该方法无法实现更大图像数据的处理。



技术实现要素:

本发明的目的在于针对上述现有技术的不足,提供了一种使用opencl加速的快速全局k-均值聚类方法,可在异构设备上实现对海量数据进行实时处理。

实现本发明目的的思路是:使用开放运算语言opencl硬件设备上运行快速全局k-均值聚类算法中计算任务最密集的选取聚类中心步骤,算法中的其他步骤在主机端上运行,利用opencl的高可移植性,使得该方法可以在任何支持开放运算语言opencl的硬件设备上执行,并且通过增加每个线程的任务量,避免产生大量的中间计算结果,使得该方法可实现更大数据量的处理。

本发明使用开放运算语言opencl硬件设备,采用快速全局k-均值聚类算法实现的,具体步骤包括如下:

(1)读入数据集和聚类总数:

(1a)读入以二维矩阵方式存储的数据集,矩阵的行表示数据的个数,列表示数据的属性;

(1b)读入聚类总数;

(2)对二维矩阵的数据集进行转置操作:

(2a)将数据集中的二维矩阵拷贝至硬件设备全局存储器中;

(2b)每个线程负责数据集二维矩阵中的一个数据点,计算每个线程的数据点在转置之后矩阵中的索引,将转置之后的二维矩阵存储在硬件设备全局存储器中;

(3)选取第一个初始聚类中心点向量:

计算二维矩阵数据集每列数据的质心,将所有列数据的质心组成第一个初始聚类中心点向量,加入到聚类中心向量集合中;

(4)对二维矩阵数据集使用k-means算法进行聚类操作:

(4a)使用欧式距离公式,计算二维矩阵数据集每行数据与聚类中心向量集合中每个聚类中心向量之间的欧氏距离值,得到欧式距离二维矩阵,矩阵的行表示数据个数,列表示聚类中心向量集合中聚类中心向量的个数;

(4b)找出各个数据与所有聚类中心向量欧氏距离最小值对应的聚类中心向量,将所有聚类中心向量相同的数据划分为同一类;

(4c)采用聚类中心更新公式,更新聚类中心向量集合中的聚类中心向量;

(4d)判断更新后的聚类中心向量是否等于更新前的聚类中心向量,若是,执行步骤(5),否则,执行步骤(4a);

(5)选取新的初始聚类中心点:

(5a)将二维矩阵数据集每行数据与所有聚类中心向量欧氏距离的最小值拷贝至开放运算语言opencl硬件设备全局存储器中;

(5b)按照增量公式,计算每个线程的增量值,将增量值存储在硬件设备全局存储器中;

(5c)从每个线程的增量值中找出最大增量值对应的索引值,将其存储在硬件设备全局存储器中;

(5d)将存储在硬件设备全局存储器的最大增量值对应的索引值拷贝至主机端内存中;

(5e)将最大增量值对应的索引值在二维矩阵数据集中对应数据,作为新的初始聚类中心向量,加入聚类中心向量集合中;

(6)判断当前聚类中心向量的总数是否小于或者等于步骤(1b)所读入的聚类总数,若是,则执行步骤(4),否则,执行步骤(7);

(7)输出聚类中心向量集合和对应的二维矩阵数据集划分结果。

本发明与现有技术相比,具有以下优点:

第一,由于本发明采用开放运算语言opencl硬件设备,并行完成快速全局k-均值算法中计算密集度高的选取新的初始聚类中心步骤,实现了快速全局k-均值算法的实时性要求,克服了现有技术采用spark平台实现算法时可移植性差的问题,使得本发明可以在任何支持开放运算语言opencl的硬件设备上实现对海量的聚类数据实时处理。

第二,本发明采用开放运算语言opencl硬件设备,按照增量公式,计算每个线程的增量值,增加了单个线程的负载,避免产生大量的中间结果,节省了开放运算语言opencl硬件设备的存储空间,克服了现有技术中在解决大量数据的处理时,由于中间结果所占的存储空间太大,导致了开放运算语言opencl硬件设备的存储空间无法满足处理更大图像数据的问题,使得本发明在对图像数据进行聚类时能够处理更大的图像数据,提高处理更大图像数据的效率。

附图说明

图1是本发明的流程图;

图2是本发明从每个线程的增量值中找出最大增量值对应的索引值步骤中并行规约方法示意图。

具体实施方式

下面结合附图对本发明作进一步的描述。

本发明利用开放运算语言opencl硬件设备,采用快速全局k-均值聚类算法实现的。

参照图1,对本发明的实现步骤作进一步的描述。

步骤1,读入数据集和聚类总数。

读入以二维矩阵方式存储的数据集,矩阵的行表示数据的个数,列表示数据的属性。

读入聚类总数。

步骤2,对二维矩阵的数据集进行转置操作。

将数据集中的二维矩阵拷贝至硬件设备全局存储器中。

每个线程负责数据集二维矩阵中的一个数据点,计算每个线程的数据点在转置之后矩阵中的索引,将转置之后的二维矩阵存储在硬件设备全局存储器中。

步骤3,选取第一个初始聚类中心点向量。

计算二维矩阵数据集每列数据的质心,将所有列数据的质心组成第一个初始聚类中心点向量,加入到聚类中心向量集合中。

所述的二维矩阵数据集中每列数据的质心是由如下公式计算得到的:

步骤4,对二维矩阵数据集使用k-means算法进行聚类操作。

第1步,使用欧式距离公式,计算二维矩阵数据集每行数据与聚类中心向量集合中每个聚类中心向量之间的欧氏距离值,得到欧式距离二维矩阵,矩阵的行表示数据个数,列表示聚类中心向量集合中聚类中心向量的个数。

所述的欧式距离公式如下:

其中,表示二维矩阵数据集中第n行数据与聚类中心向量集合中第k个聚类中心向量之间的欧氏距离值,m表示二维矩阵数据集列的总数,m表示二维矩阵数据集列的序号,xn,m表示二维矩阵数据集中第n行第m列的数据,表示第k个聚类中心向量中的第a个值,a与m的取值对应相等。

第2步,找出各个数据与所有聚类中心向量欧氏距离最小值对应的聚类中心向量,将所有聚类中心向量相同的数据划分为同一类。

第3步,采用聚类中心更新公式,更新聚类中心向量集合中的聚类中心向量。

所述的聚类中心更新公式如下:

其中,表示更新后的第h个聚类中心向量中的第p个值,hh表示属于第h类别的数据向量的总数,t表示第h类别中数据向量的序号,表示第h类别中第t个数据向量的第c个值,c与p的取值对应相等。

第4步,判断更新后的聚类中心向量是否等于更新前的聚类中心向量,若是,执行步骤,否则,执行第1步。

步骤5,选取新的初始聚类中心点。

第1步,将二维矩阵数据集每行数据与所有聚类中心向量欧氏距离的最小值拷贝至开放运算语言opencl硬件设备全局存储器中。

第2步,通过合并访存的方式访问存储在硬件设备全局存储器中的转置之后的二维矩阵,按照增量公式,计算每个线程的增量值,将增量值存储在硬件设备全局存储器中。

所述的增量公式如下:

其中,bi表示第i个线程对应的增量值,i=1,...,q,q表示转置后的二维矩阵列的总数,q表示转置后的二维矩阵的列序号,max(.)表示取最大值操作,de表示二维矩阵数据集中第e行数据与所有聚类中心向量欧氏距离的最小值,e与q的取值对应相等,g表示转置后的二维矩阵行的总数,g表示转置后的二维矩阵的行序号,wg.f表示转置后的二维矩阵第g行第f列的数据,f与i的取值对应相等,wg,q表示转置后的二维矩阵第g行第q列的数据。

第3步,参照图2,对采用并行规约方法从每个线程的增量值中找出最大增量值对应的索引值作进一步的描述。第一次规约时,每个线程对应共享内存中的一对数据,线程j对应数据j和数据j+8,比较二者大小,共得到8个最大值,存储在共享内存中。第二次规约,线程j对应数据j和数据j+4,比较二者大小,共得到4个最大值,存储在共享内存中。第三次规约,线程j对应数据j和数据j+2,比较二者大小,共得到2个最大值,存储在共享内存中。最后一次规约,线程j对应数据j和数据j+1,比较二者大小,得到1个最大值,将该最大值存储到硬件设备全局内存中。

第4步,将存储在硬件设备全局存储器的最大增量值对应的索引值拷贝至主机端内存中。

第5步,将最大增量值对应的索引值在二维矩阵数据集中对应数据,作为新的初始聚类中心向量,加入聚类中心向量集合中。

步骤5,判断当前聚类中心向量的总数是否小于或者等于步骤1所读入的聚类总数,若是,则执行步骤4,否则,执行步骤7。

步骤7,输出聚类中心向量集合和对应的二维矩阵数据集划分结果。

下面结合仿真实验对本发明的效果做进一步的说明:

1、仿真条件:

本发明的仿真实验的软件环境为红帽企业linux服务器版本v6.2操作系统,用于opencl应用程序的英特尔软件开发工具包sdkv2。使用的硬件设备为12核、16gb内存的intele5-2692v2cpu,5.2gb显存的nvidiak20gpu,61核、16gb内存的intel7110pmic。

本发明的仿真实验使用了美国加州欧文分校uci数据库中的twenty数据集和wine数据集。

本发明仿真实验所使用的仿真参数如下:

假设s={s1,...,sy}是本方法得到的聚类集合,p={p1,...,py}是已知的聚类集合,从数据点中任意挑选一对数据点(xu,xv)应用如下定义相关变量:

ss:两个数据在聚类集合s中都属于一类同时在聚类集合p中都属于一类。

sd:两个数据在聚类集合s中都属于一类同时在聚类集合p中不属于一类。

ds:两个数据在聚类集合s中不属于一类同时在聚类集合p中都属于一类。

dd:两个数据在聚类集合s中不属于一类同时在聚类集合p中不属于一类。

令a,b,c,d分别表示数据点对在ss,sd,ds,dd中的个数。令a+b+c+d=d,d表示数据中所能组成点对的最大数量。

使用如下评价标准来衡量s和p的相似性,计算公式如下:

rand统计rand:

jaccard系数jac:

folksandmollows指数fm:

以上三个评价标准取值范围为0-1,值越大代表s和p的相似性越大。

2、仿真内容与结果分析:

本发明的仿真实验采用本发明方法与两种现有技术(基于模糊c均值聚类的fcm方法、k均值聚类方法),对twenty数据集和wine数据集进行聚类分析,并将聚类结果进行对比分析。

采用本发明方法,分别在上述gpu硬件设备和mic硬件设备上对twenty数据集和wine数据集进行聚类分析,改变输入的数据大小,测得不同数据大小的运行时间,与快速全局k-均值算法在cpu上以串行方式运行的时间进行对比分析。

表1是本发明的仿真实验采用两种现有技术(基于模糊c均值聚类的fcm方法、k均值聚类方法)和本发明方法对rand统计、jaccard系数和folksandmollows指数进行对比的统计表。表1中的“k-means”表示采用k-均值聚类方法类型、表1中的“fcm”表示采用基于模糊c均值聚类的fcm方法类型、表1中的“pfgkm”表示本发明采用的基于快速全局k-均值的方法类型。

表1仿真聚类结果评价标准比较一览表

从表1中看出,本发明方法三种评价标准在twenty数据集上的k-means结果分别为0.9836,0.7439,0.8542,fcm结果分别为0.9855,0.7423,0.8523,p-fgkm结果都为1,p-fgkm结果高于其他两种方法。本发明方法三种评价标准在wine数据集上的k-mean结果分别为0.7111,0.4151,0.5776,fcm结果分别为0.7145,0.4166,0.5789,p-fgkm结果分别为0.7204,0.4189,0.5905,p-fgkm结果高于其他两种方法。本发明的p-fgkm三种评价标准在twenty数据集和wine数据集上的结果都高于其他两种方法,聚类效果良好。

表2是采用本发明方法,分别在上述gpu硬件设备和mic硬件设备上对twenty数据集和wine数据集进行聚类分析的运行时间和快速全局k-均值算法在cpu硬件设备上以串行方式运行的时间统计表。

表2本发明方法在各种硬件设备上运行时间与串行方法时间对比表

表2中的“gpu”表示使用gpu硬件设备运行本发明方法类型、表2中的“mic”表示使用mic硬件设备运行本发明方法类型。

从表2中看出,本发明方法在gpu硬件设备上相比于cpu上的串行方法,最高取得了285.134倍的加速比,在mic硬件设备上相比于cpu上的串行方法,最高取得了32.985倍的加速比。本发明方法在两种硬件设备上相比于cpu上的串行方法都获得了加速效果,并且gpu硬件设备的表现优于mic硬件设备。

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