发明内容
本发明旨在解决以上现有技术的问题。提出了一种有效提高聚类集成结果的质量,能够为用户提供一个鲁棒性更高、扩展性更强的数据挖掘策略,提高算法效率,以满足用户需求的方法。本发明的技术方案如下:
一种基于Spark平台采用两次评价的加权选择集成三支聚类方法,其包括以下步骤:
步骤1,对大数据集进行分区管理并生成对应的弹性分布式数据集RDD;
步骤2,使用基于Spark的K-Means聚类算法对每个分区的数据进行聚类,生成多个不同的聚类成员;
步骤3,通过两次评价,构造聚类成员新的评价函数以及加权选择策略,对聚类成员进行选择,删除聚类效果不佳的聚类结果,构成新的聚类成员;
步骤4,将聚类成员进行集成,构造一个加权的投票矩阵,根据三支决策规则进行聚类划分,得到最终的三支聚类结果。
进一步的,所述步骤1对大规模数据进行分区管理具体包括步骤:首先将大规模数据集存储在分布式文件系统HDFS下;然后初始化环境变量SparkContext,再通过函数textFile()将数据集转换成弹性分布式数据集RDD形式,创建分区个数numPratitions,用函数getPartition(key:Any)对输入的key做计算,返回key的分区ID。
进一步的,所述步骤2使用基于Spark的K-Means聚类算法对每个分区的数据进行聚类,生成多个不同的聚类成员具体包括步骤:
通过设置类簇数目k以及不同的迭代次数,将类簇个数k映射到每个分区,运行算法,输出键值对(id,x),其中id标记了数据对象x的簇号,然后合并分区得到聚类结果,得到m个不同的聚类成员。
进一步的,所述K-Means聚类算法具体包括:
Step1:对输入数据集进行分区,得到K个分区的RDD1;
Step2:在前k个分区中,每个分区随机选择一个点作为初始聚类中心,存储在RDD2中;
Step3:根据欧式距离公式计算每个数据对象与聚类中心的距离,并以键值对(xi,e)的形式存储在RDD3中;
Step4:对RDD3进行Reduce操作,对数据对象进行类簇划分,并以键值对(id,xi)的形式存储在RDD4中,id记录每个数据对象的簇号;
Step5:在RDD5中计算每个类簇的平均值,得到新的聚类中心点;其中RDD1-RDD5分别表示第一弹性分布式数据集-第五弹性分布式数据集;
Step6:循环迭代Step3至Step5,直到达到最大迭代次数,输出聚类结果。
进一步的,步骤3中聚类成员的加权选择过程具体包括步骤:所述步骤4中三支聚类划分方法具体如下:
(1)OVERLAP重叠矩阵的构造,将第一个聚类成员作为参照划分,余下的m-1个聚类成员分别与该聚类成员构造一个k×k的OVERLAP矩阵,矩阵记录两个划分中每个类簇所覆盖的相同对象的个数,列表示需要标签对齐的聚类成员的簇号,行表示第一个参照划分的簇号,选择矩阵每行覆盖相同对象个数最大的类簇标签,然后将标签修改为参照划分对应的簇号标签;
(2)使用如下公式作为第一次评价,计算每个聚类成员的CH值:
其中,数据集U={x1,x2,...,xn,...,xN},表示数据集中心点,N为总的数据对象个数,k为当前类簇,m个聚类成员的集合表示为R={R(1),R(2),...,R(i),...,R(m)}。对于每个聚类成员,存在K个类簇,表示为R(i)={C1,C2,...,Ck,...,CK},表示类簇Ck的中心点,d表示计算对象间的距离。CH指标通过类间分离度和类内紧密度的比值得到,其中通过计算各类簇中心到其他类簇中心的距离得到分离度,计算一个类簇的各数据对象到该类簇中心的距离得到紧密度,取CH值最大的聚类成员作为参考划分;
求得每个聚类成员R={R(1),R(2),...,R(i),...,R(m)}的CH值,R(m)表示第m个聚类成员,R(i)表示第i个聚类成员,取CH值最大的聚类结果作为参考划分R(*);
(3)计算每个聚类成员的准确度N(a)和差异性N(d),根据得到的准确度和差异性构造评价函数E(Ri),规范化权值公式如下:
其中Z用于将权值规范化,使得聚类标记的权值满足以下条件:
(4)设置阈值权值小于这个阈值的结果不参与集成,从而选出新的聚类成员
进一步的,将得到的新的聚类成员R*,根据多数投票规则,构造一个N×k的带权重的投票矩阵,投票矩阵记录了每个数据对象被划分到不同类簇所对应的聚类成员的权重之和,根据三支决策规则,设置阈值阈值(α,β)取值范围为0≤β<α≤1,将每个数据对象依次划分到类簇的核心域和边缘域中,得到最终的三支聚类结果。
本发明的优点及有益效果如下:
本发明提出一种基于Spark平台采用两次评价的加权选择集成三支聚类,能够处理大规模不确定性数据,得到三支的聚类结果,可以直观的刻画不确定性数据的类簇划分,更加符合实际情况和很多现实应用场景。选择集成有效提高聚类集成结果的质量,能够为用户提供一个鲁棒性更高、扩展性更强的数据挖掘策略,提高算法效率,以满足用户需求。
本发明主要创新点包括:
1、基于Spark的分布式聚类算法框架,能够处理大规模数据集;
2、通过两次评价,构造新的评价函数,提出新的加权选择集成策略;
3、针对不确定数据对象,利用三支决策划分规则,对聚类结果三支表示,更直观精确的刻画了不确定数据的类簇划分。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、详细地描述。所描述的实施例仅仅是本发明的一部分实施例。
本发明解决上述技术问题的技术方案是:
图1为本发明提出的一种基于Spark平台采用两次评价的加权选择集成三支聚类流程框图,自定义分区阶段,对输入数据集进行数据分区;通过基于Spark的K-Means聚类算法,设置初始类簇数目以及不同的迭代次数,生成初始的聚类成员;将初始聚类成员进行标签对齐,然后通过两次评价,选择出新的聚类成员,其中第一次评价是为了寻找参考划分,作为第二次评价的输入,第二次评价通过计算准确度和差异性得到规范化权值;根据带权重的新的聚类成员,构造出带权重的投票矩阵,再根据三支决策规则,得到三支表示的聚类结果。
(1)自定义分区阶段
如图2所示为基于Spark的数据分块流程框图。对于输入的原始大规模数据集,将其转换为Spark平台的RDD,完成初始化操作。首先初始化环境变量SparkContext,然后通过函数textFile()将数据集转换成RDD形式,创建分布式数据集,以便之后可以对数据集进行并行处理。通过函数numPartitions:Int,返回需要创建的分区个数,函数getPartition(key:Any):Int根据键key计算分区值,返回该键key的分区ID,范围一定是0到numPartitons-1,确保返回的永远是一个非负数。最后通过函数partitionBy()使用自定义的这个分区。
如图3所示为Spark平台的执行流程图。首先客户端将生成的作业信息提交给ResourceManager,NodeManager启动SparkAppMaster,SparkAppMaster初始化作业并像ResourceManager申请资源,然后NodeManager启动相应的SparkExecutor执行任务,最后客户端可向SparkAPPMaster获得作业运行状态。
(2)聚类成员生成阶段
如图4所示为基于Spark的K-Means聚类算法的RDD转换图。旨在通过设置不同迭代次数,并行生成多个初始聚类成员,具体步骤如下:
Step1:根据上述分区方法对输入数据集进行分区,得到K个分区的RDD1;
Step2:在前k个分区中,每个分区随机选择一个点作为初始聚类中心,存储在RDD2中;
Step3:根据欧式距离公式计算每个数据对象与聚类中心的距离,并以键值对(xi,e)的形式存储在RDD3中;
Step4:对RDD3进行Reduce操作,对数据对象进行类簇划分,并以键值对(id,xi)的形式存储在RDD4中,id记录每个数据对象的簇号;
Step5:在RDD5中计算每个类簇的平均值,得到新的聚类中心点;
Step6:循环迭代Step3至Step5,直到达到最大迭代次数,输出聚类结果。
计算过程中,初始化设置不同的迭代次数,以并行得到多个不同的聚类结果作为初始聚类成员。
(3)聚类成员选择阶段
如图5为聚类成员选择流程框图。对于得到的初始聚类成员R={R(1),R(2),...,R(i),...,R(m)},以第一个聚类成员R(1)的类簇标签为标准,将剩余的m-1个聚类成员类簇标签进行对齐。得到一个k×k的OVERLAP矩阵,矩阵记录两个划分中每个类簇所覆盖的相同对象的个数,列表示需要标签对齐的聚类成员的簇号,行表示第一个参照划分的簇号。选择矩阵每行覆盖相同对象个数最大的类簇标签,然后将标签修改为参照划分对应的簇号标签。
通过第一个评价函数CH,计算每个聚类成员的CH值,选择值最大的聚类成员作为参考划分,用于第二次评价函数计算。构造第二次评价函数主要通过计算每个聚类成员的准确度和差异性,从而得到一个新的评价函数。将第二个评价函数根据公式(5)和(6)计算得到每个聚类成员的权重w={w(1),w(2),...,w(i),...,w(n)},再通过阈值λ得到新的聚类成员R*。
(4)三支投票阶段
根据新的聚类成员以及每个聚类成员的权重,构造一个N×k的投票矩阵,矩阵记录每个数据对象被划分到类簇Ci的权重之和。然后根据三支决策规则,设置阈值其中,数据对象在某个类簇的得票数大于等于α,将其划分在该类簇的核心域Co(Ck);若票数大于等于β,将其划分在这些类簇的边缘域Fr(Ck);若以上条件都不满足,则找到该数据对象得票数大于0的类簇,将其划分在这些类簇的边缘域。
以下举例对本发明的实施作进一步说明。本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
假设一个数据集有10个对象,维度为2,数据集具体为{(1,3),(2,2),(9,2),(7,1),(5,4),(4,5),(4,4),(1,5),(9,4),(2,3)},初始类簇个数k设置为3,迭代次数分别为2,3,4,5,6次。
首先,读取数据集并将数据集转换为RDD形式,设置分区个数为3,假设划分结果为{((1,3),(2,2),(9,2)),((7,1),(5,4),(4,5)),((4,4),(1,5),(9,4),(2,3))},每个分区中选择一个数据对象作为初始聚类中心,分别是(2,2),(4,5),(9,4)。根据欧氏距离计算数据对象到聚类中心的距离如下表:
|
1 |
5 |
8 |
0 |
1.414214 |
3.605551 |
8.062258 |
2 |
7 |
5.830952 |
2 |
3 |
5.09902 |
5 |
3.605551 |
4 |
3.605551 |
1.414214 |
4 |
6 |
2.828427 |
1 |
5 |
7 |
3.162278 |
3 |
8.062258 |
9 |
1 |
2.828427 |
7.071068 |
所以第一次迭代得到的聚类结果是{((1,3),(2,2),(2,3)),((5,4),(4,5),(4,4),(1,5)),((9,2),(7,1),(9,4))},求每个类簇的平均值,更新聚类中心,得到第二次迭代的聚类中心为(1.6667,2.6667),(3.5,4.5),(8.3333,2.3333)。再次计算距离为:
所以第二次迭代得到的聚类结果是{((1,3),(2,2),(1,5),(2,3)),((5,4),(4,5),(4,4)),((9,2),(7,1),(9,4))}。假设通过基于Spark的K-Means聚类算法得到5个聚类结果,分别是R(1)={((1,3),(2,2),(2,3)),((5,4),(4,5),(4,4),(1,5)),((9,2),(7,1),(9,4))}、R(2)={((1,3),(2,2),(1,5),(2,3)),((5,4),(4,5),(4,4)),((9,2),(7,1),(9,4))}、R(3)={((1,3),(2,2),(1,5),(2,3)),((5,4),(4,5),(4,4),(9,4)),((9,2),(7,1))}、R(4)={((1,3),(2,2),(2,3),(7,1)),((5,4),(4,5),(4,4),(1,5)),((9,2),(9,4))}、R(5)={((1,3),(2,2),(1,5),(2,3)),((5,4),(4,5),(4,4)),((9,2),(7,1),(9,4))}。
然后,根据公式(1)计算以上每个聚类成员的CH值,分别为:10.88,16.95,5.58,3.60,8.98,其中,R(2)的CH值最大,说明其聚类效果最好,故选择R(2)作为参考划分。
公式(2)到公式(5),利用第一次评价结果,构建第二次新的评价函数,目的在于衡量聚类成员的聚类质量,然后将评价函数转换为权重。选择权重大于等于1/m=1/5=0.2的聚类成员进行三支投票,得到最终三支的聚类结果。计算得到R(1)-R(5)的权重分别为0.201332,0.217771,0.192346,0.173162,0.217771,故选择权重大于等于0.2的聚类结果得到新的聚类成员。
得到带权的投票矩阵为:
计算阈值故将数据对象(1,3),(2,2),(1,5),(2,3)划分到类簇1的核心域,数据对象(5,4),(4,5),(4,4)划分到类簇2的核心域,数据对象(9,2),(7,1),(9,4)划分到类簇3的核心域,数据对象(1,5)划分到类簇2的边缘域。最终三支聚类结果示意图如图6所示。
以上这些实施例应理解为仅用于说明本发明而不用于限制本发明的保护范围。在阅读了本发明的记载的内容之后,技术人员可以对本发明作各种改动或修改,这些等效变化和修饰同样落入本发明权利要求所限定的范围。