基于划分的聚类分析算法的改进基于划分的聚类分析算法的改进
对传统的K-平均算法作了简单的介绍和讨论,提出了一种具有单纯型法思想的K-中心点轮换法。分别对比了K-
均值算法与K-中心点轮换算法的时间复杂度,针对K-中心点轮换算法的时间复杂度提出了一种基于抽样原理的
改进算法,并对K-中心点轮换算法聚类数目的选择进行了各种改进方法的探索。同时,基于主流的weka开源数
据挖掘工具实现了改进算法。实验结果表明了算法的有效性。
摘摘 要:要: 对传统的K-平均算法作了简单的介绍和讨论,提出了一种具有单纯型法思想的
关键词:关键词: K-均值;K-中心点轮换;抽样;聚类数目;weka
作为统计学的一个分支,聚类分析已经被研究了许多年[1-5],但主要集中在基于距离的聚类分析上。在机器学习领域,聚
类是无指导学习的一个例子。与分类不同,聚类不依赖于预先定义的类和带标号的训练实例,可见,聚类是观察式学习,而不
是示例式学习[1]。在概念聚类中,一组点只有当它们可以被一个概念描述时才形成一个簇。这不同于基于几何距离来度量相
似度的传统聚类。目前在文献中存在着大量的聚类算法,算法的选择取决于数据集的类型、聚类的目的和应用。如果聚类分析
被用作描述或探查的工具,可以对同样的数据集尝试多种算法,以发现数据集可能揭示的结果。
1 基于划分的聚类分析算法及改进基于划分的聚类分析算法及改进
聚类分析,一般认为就是试图发现数据点集中内在的结构,使同一簇内的数据点相似度高,不同簇之间的数据点相异度高
[3]。由于相似度、相异度的定义往往根据具体情况而定,而且什么是最好的聚类结果,往往也与具体问题、具体要求有关。
将聚类问题转化为一种优化问题,再通过数学规划的方法来进行求解是研究聚类分析的一个重要方向。
给定n个对象或者数据元组的数据库,应用划分方法构建数据的k个划分,每个划分表示一簇,k≤n。也就是说,将数据划分
为k组,并满足如下要求:(1)每一组至少包含一个对象;(2)每个对象必须只属于一组。
给定要构建的划分数目k,应用划分方法创建一个初始划分。然后采用迭代重定位技术,尝试通过对象在组间移动来改进划
分。
设在m维欧氏空间中有n个点,在这个空间中的某个范围内选取k个中心位置mi(i=1,2,…,k),使得这n个点到各自最近的
中心位置的距离平方之和最小。这是最初的一种优化目标函数。
1.1 传统的传统的K-均值算法均值算法[1]
K-均值算法(K-means)是最基本的聚类分析算法,以k为参数,把n个对象分为k个簇,以使簇内具有较高的相似度,而簇间
的相似度较低。相似度的计算根据一个簇中点的平均值(被看作簇的重心)来进行。K-means聚类算法的描述和处理流程[1-2]如
下:
K-means是用于划分的K-均值算法,每个簇的中点用簇中对象的均值表示。其输入为簇的数目k和包含n个对象的数据集,
输出为k个簇的集合。
算法流程:
(1)从D中随机选择k个对象,每个对象初始地代表一个簇的平均值或质心;
(2)repeat;
(3)根据簇中对象的均值,将每个对象(重新)指派给最相似的簇;
(4)更新每个簇的平均值,即计算每个簇中点的均值;
(5)直到准则函数收敛。
1.2 K-means算法的不足算法的不足
K-means算法有以下不足:(1)算法对初始值的选取依赖性极大。初始值不同,往往得到不同的局部极小值。(2)由于将均值
点作为聚类中心进行新一轮计算,远离数据密集区的孤立点和噪声点会导致聚类中心偏离真正的数据密集区,所以K-均值算法
对噪声点和孤立点很敏感。
1.3 K-中心点轮换算法中心点轮换算法
K-平均算法在计算簇内平均值时很容易被“噪声”和孤立点所影响。为了改进这个缺点,可以采用用簇中位置最中心的点(中
心点)来取代K-平均算法中簇中点的平均值。这种划分方法仍然是基于最小化所有点与其参照点之间的相异度(如常采用欧氏
距离来度量)之和的原则来执行的。
K-中心点轮换算法(K-mediods)是以k为输入参数,试图以穷举的方式重复地使用目标函数值更小的对象来代替当前的中心
点,从而将n个对象分为k个簇。具体的算法过程描述如下:对基于中心点的划分的一种K-中心点变种算法,其输入为结果簇
的数目k、包含n个对象的数据集;输出为k个簇,使得所有对象与其最近中心点的偏差准则函数最小。
K-mediods算法流程如下:
(1)随机选择k个对象,每个对象初始地代表了一个簇的中心点,这k个对象就组成了当前的中心点集;
(2)repeat;
(3)将每个对象(重新)指派给离它最近的中心点所代表的簇,按照式(1)计算当前的目标函数值;
(4)对n个对象中的每一个对象Oj(j=1,2,…,n)依次执行下面的过程:试图用当前对象Oj去依次替换现有的k个中心点中
的每一个中心点mi(i=1,2,…,k),并计算试图替换后的目标函数值,最终选择替换后能获得目标函数值最小的那个中心
点进行替换。如果这k个待替换的中心点所对应的目标函数值比当前的目标函数值还要大,则不进行替换;
(5)直到不发生变化;