K-Means Initial Cluster Center Selection Based on Spatial Translation
K-means clustering algorithm is an important content in the field of machine learning and is widely used because of its simplicity and efficiency. In order to solve the problem that the initial cluster center selection of traditional K-means algorithm is random, an initial cluster center selection algorithm based on space segmentation is proposed. The minimum space containing all sample sets is divided to calculate the density, and the initial cluster centers with the highest density are selected one by one. The selected cluster centers are replaced by random initial cluster centers for K-means clustering. Twelve datasets were tested separately at UCI. The experimental results show that compared with traditional K-means, K-means++ and other algorithms, the improved algorithm has lower iteration times and higher clustering accuracy.
K-Means
K-means作为最简单高效的聚类算法之一,是学者MacQueen
对于k值的确定,Rezaee
在筛除离群点方面,唐东凯
为了获得更科学的初始簇心,张玉芳
大多数选取初始簇心的文献都是基于密度来选取的,虽然这些文献对K-means初始簇心的优化有所改进,但却忽略了统计各样本点密度时的庞大计算量。针对此问题,本文提出一种划分空间的算法SK-means算法(Space-divided-based K-means),该算法通过划分空间来降低统计样本点密度时的计算量;另一方面针对文献
K-means算法是一种基于划分的聚类算法,通过在迭代中更新簇及簇心将数据集划分到若干个不相交的簇。该算法原理为:给定类簇数k,随机选取k个样本点作为初始簇心,并将样本点划分到距离最近的簇,在一次划分完毕后更新簇心,继续重复划分和更新簇心直至簇心不再变化或达到最大迭代次数
定义1
,(1)
第t次迭代簇 的簇中心为
, ,(2)
其中 为簇 的基数,即 中所含样本点的个数。第t次迭代聚类结果的平方误差为
(3)
簇心依据距离度量将一个簇内的样本点平均化,作为一个簇中心;平方误差是评价聚类好坏的最基本的指标,它直观地反映了样本点与其所属簇心之间的距离关系。传统K-means聚类算法具体步骤如下:
算法1
|
输入:数据集 ,类簇数k。输出:聚类的k个簇。 |
输入:数据集 ,类簇数k。输出:聚类的k个簇。 |
步骤1 ,随机选取k个样本点 作为初始簇心, , ;步骤2 根据公式(1)计算每个点到簇心的距离,将其划分到距离最近的簇心所在的簇,即 ,令 , ;步骤3 ,根据公式(2)更新簇心 , , ;步骤4根据公式(1)计算每个点到簇心的距离,将其划分到距离最近的簇心所在的簇,即 ,令 , ;步骤5 重复步骤3、步骤4直至簇心不再发生变化,即 时,停止迭代。 |
由于初始点选取的随机性,若选取到离群点作为初始簇心,则初始簇心距离最终聚类结果簇心较远,容易陷入局部最优解
SK-means算法思想是:首先构造包含所有样本点的最小d维多面体,记该多面体体积为 ,用一个体积为 (k为类簇数)的d维正多面体从包含所有样本点的最小d维多面体的一角出发,以一定步长遍历上述d维多面体,在各个较小的正多面体中找出k个密度最大的初始点作为初始簇心。
设 为一组d维数据集,样本 ,记 , 。称包含数据集X中所有样本的最小d维多面体
(4)
为容纳空间,则容纳空间体积 。
定义2 设 为一组维度为d的数据集,数据集X的容纳空间 ,称 是索引指标为 的棱空间,其中棱长 ,k为类簇数,步长 , , 。
例1 考虑一组2维数据集
(见
样本点 | 样本点 | 样本点 | 样本点 |
棱空间 | 棱空间 | 棱空间 |
由于各棱空间的位置明确,易得各棱空间所包含的样本点及包含的样本点数量。记 包含的样本点数量为 ,包含样本点数量最多的棱空间的索引指标集合为 ,显然 。只需找到索引指标在 的棱空间中密度最大的样本点即可,样本点密度定义为一定范围内样本点的个数与数据集大小的比值。
定义3 设 为一组d维的数据集,样本 , 为 的样本数量, 为包含样本点数量最多的棱空间的索引指标集合,阈值半径为
,(5)
样本 在 中的R邻域样本集为
,(6)
样本 在 中的密度为
。(7)
在得到包含样本点数量最多的棱空间后,需要在这些棱空间中找到密度最大的点。设 为棱空间索引指标,记 中密度最大的样本点集合为 ,则 。考虑到 , ,即密度最大的样本点可能不唯一。需要进一步细化算法,挑选出更为紧凑的样本点。
定义4 设 为一组维度为d的数据集, 为包含样本点数量最多的棱空间的索引指标集合, 为x在 中的R邻域样本集。 , ,x在 中的紧凑度为
(8)
紧凑度定义为样本周围的点到自身距离的平均值,紧凑度越小,反映了周围点到该点的距离越小,该点越紧凑。记 为挑选出的第i个初始簇心,为了使得第 个初始簇心不在已经挑选出的簇心周围,需要对样本点进行剔除。在挑选出样本点后,将 从X中剔除,从 中重复统计棱空间样本点数量、计算样本点密度、挑选初始点及剔除样本点,直至选出k个初始簇心。
SK-means算法避开了计算所有样本点两两之间的距离,只在个别棱空间计算部分样本点的密度。在降低计算量的同时,又细化了算法,解决了密度最大的样本点同时存在只能随机挑选的问题。下面给出SK-means初始簇心选取算法的具体步骤。在已经挑选出的簇心周围,需要对样本点进行剔除。在挑选出样本点后,将 从X中剔除,从 中重复统计棱空间样本点数量、计算样本点密度、挑选初始点及剔除样本点,直至选出k个初始簇心。
算法2 SK-means初始簇心选取算法 |
输入:数据集 ,簇个数k。输出:k个初始簇心。 |
步骤1 构造棱空间;步骤2 ,判断x属于哪些棱空间;步骤3 统计各空间样本点个数 , , 。找到包含样本点个数最多的棱空间的索引指标集合 ;步骤4 , ,计算 中样本点的密度,找到 中密度最大的样本点 , ,找出使得 最小的x以及所属的棱空间的索引指标 ,初始簇心 , ;步骤5 在X中剔除 中的样本点, ;步骤6 重复步骤3-5直至选出k个初始簇心。 |
实验设备的处理器是12th Gen Intel(R) Core(TM) i5-12450H 2.00 GHz,内存为16.0 GB,Microsoft Windows11的操作系统,系统类型为64位操作系统,基于x64的处理器,算法编写和编译是在Python3.12.2环境下实现的。
为了验证本文算法对降低聚类迭代次数的有效性,本文选取了UCI数据库中的Iris等十二个数据集来进行实验分析。这些数据集的维度从几维到十几维不等,数据量也比较广泛,从而反映出SK-means算法有一定的适用性。具体数据集及基本信息见
数据集 | 数据集大小 | 数据维度 | 数据类别 |
Balance | 625 | 4 | 3 |
Tae | 151 | 5 | 3 |
Haberman | 306 | 3 | 2 |
Iris | 150 | 4 | 3 |
Led | 500 | 7 | 10 |
Seeds | 210 | 7 | 3 |
Titanic | 2201 | 3 | 2 |
Wine | 178 | 13 | 3 |
Heart | 270 | 13 | 2 |
Appendicitis | 106 | 7 | 2 |
Phoneme | 5405 | 5 | 2 |
Hayes-Roth | 160 | 4 | 3 |
为了验证所提算法在聚类分析上的有效性,采用三个指标来评价算法,分别为准确率(ACC)、平方误差(SSE)、轮廓指数
(9)
其中 , 。则整个聚类结果的轮廓指数为
(10)
轮廓指数的取值范围为 ,取值越大聚类结果越紧凑,聚类效果越好。
为了验证SK-means算法在降低迭代次数和提高聚类准确性方面是否有效,本文将SK-means算法与传统K-means、K-means++聚类算法,与文献
算法 | Iris | Wine | Tae | ||||||
准确率 | SSE | 迭代次数 | 准确率 | SSE | 迭代次数 | 准确率 | SSE | 迭代次数 | |
K-means | 0.813 | 89.272 | 7.25 | 0.682 | 2.43e+7 | 7.84 | 0.337 | 17,315 | 6.41 |
K-means++ | 0.889 | 78.943 | 6.39 | 0.663 | 2.48e+7 | 6.58 | 0.318 | 17,325 | 7.77 |
SK-means | 0.893 | 78.940 | 5 | 0.702 | 2.37e+7 | 9 | 0.364 | 17,666 | 10 |
算法 | Heart | Haberman | Seeds | ||||||
准确率 | SSE | 迭代次数 | 准确率 | SSE | 迭代次数 | 准确率 | SSE | 迭代次数 | |
K-means | 0.500 | 5.82e+6 | 8.55 | 0.448 | 31,330 | 8.74 | 0.890 | 588.04 | 8.99 |
K-means++ | 0.469 | 5.82e+6 | 8.38 | 0.520 | 31,455 | 7.46 | 0.893 | 587.85 | 6.08 |
SK-means | 0.590 | 5.82e+6 | 6 | 0.520 | 30,533 | 10 | 0.895 | 587.31 | 5 |
算法 | Titanic | Phoneme | Appendicitis | ||||||
准确率 | SSE | 迭代次数 | 准确率 | SSE | 迭代次数 | 准确率 | SSE | 迭代次数 | |
K-means | 0.709 | 4273.5 | 3.04 | 0.667 | 12,947 | 12.25 | 0.804 | 17.522 | 7.38 |
K-means++ | 0.732 | 4172.7 | 2.71 | 0.666 | 12,916 | 12.3 | 0.807 | 17.530 | 6.53 |
SK-means | 0.776 | 4059.6 | 2 | 0.668 | 12,838 | 12 | 0.830 | 17.482 | 5 |
算法 | Hayes-Roth | LED | New-Thyroid | ||||||
准确率 | SSE | 迭代次数 | 准确率 | SSE | 迭代次数 | 准确率 | SSE | 迭代次数 | |
K-means | 0.332 | 358.67 | 7.43 | 0.540 | 271.97 | 6.41 | 0.801 | 28,968 | 10.03 |
K-means++ | 0.386 | 356.88 | 7.27 | 0.643 | 240.84 | 4.77 | 0.771 | 28,942 | 9.71 |
SK-means | 0.450 | 360.04 | 5 | 0.742 | 222.27 | 4 | 0.860 | 28,917 | 8 |
数据集 | Iris | Wine | Tae | Heart |
K-means | 9.84% | 2.93% | 8.01% | 18.00% |
K-means++ | 0.45% | 5.88% | 14.47% | 25.80% |
数据集 | Haberman | Seeds | Titanic | Phoneme |
K-means | 16.07% | 0.56% | 9.45% | 0.15% |
K-means++ | 0 | 0.22% | 6.01% | 0.30% |
数据集 | Appendicitis | Hayes-Roth | LED | New-Thyroid |
K-means | 3.23% | 35.54% | 37.41% | 7.37% |
K-means++ | 2.85% | 16.58% | 15.40% | 11.54% |
UCI数据集 | K-means | K-means++ | 文献
|
SK-means | ||||
SI | ACC | SI | ACC | SI | ACC | SI | ACC | |
Iris | 0.546 | 0.825 | 0.552 | 0.888 | 0.549 | 0.887 | 0.553 | 0.893 |
Wine | 0.567 | 0.669 | 0.565 | 0.631 | 0.571 | 0.702 | 0.571 | 0.702 |
Hayes-Roth | 0.198 | 0.442 | 0.204 | 0.450 | 0.571 | 0.432 | 0.201 | 0.450 |
Heart | 0.365 | 0.500 | 0.365 | 0.469 | 0.377 | 0.589 | 0.367 | 0.590 |
Tae | 0.313 | 0.337 | 0.312 | 0.318 | 0.328 | 0.358 | 0.293 | 0.364 |
Haberman | 0.395 | 0.447 | 0.395 | 0.520 | 0.393 | 0.500 | 0.399 | 0.520 |
为了更直观的展示SK-means算法的聚类效果,将Iris数据集前2维分别用K-means、K-means++聚类,得到效果如
图1. Iris数据集三种算法的聚类效果
图中相同的颜色的样本点为一类,叉号为最终聚类簇心。可以看到K-means算法将右下角都聚为一类,左上角分为两类。Iris数据集真实标签为三类均分,每个簇各有50个样本点。就数量而言,K-means算法聚类效果不佳。而K-means++和SK-means算法效果相似,但SK-means算法迭代次数更少且准确率更高。
由
随着大数据时代的到来,传统的K-means聚类算法已经不能满足数据挖掘的需求,为了提高聚类效果,本研究在传统K-means聚类算法的基础上,提出了一种数据预处理的算法,通过对高密度差异数据集的处理,成功降低了K-means的迭代次数,提高了聚类的准确率。实验结果表明,SK-means算法排除了传统K-means聚类算法在选取初始簇心的随机性,科学选取初始簇心,降低了陷入局部最优的可能性。通过对比准确率,SK-means算法有着较好的聚类效果。尽管本研究主要关注了初始聚类中心和样本数据密度差异对算法性能的影响,但仍有许多方面值得进一步研究和探索。譬如在SK-means算法步骤4中,剔除样本点的范围可以根据数据集的稀疏程度来选取,以期获得更快的迭代和更优的聚类效果;可以排除掉离群点对内群点单独做聚类,聚类稳定后再将其归为最近的簇。未来的工作将重点关注这两方面以及优化算法的收敛性和复杂度,以期发现更优的方式提高算法的效率和应用范围。