k-means是人工智能领域最常用的快速基础算法之一,广泛用于聚类、数据预分析及与改进其他机器学习算法等。为了进一步提高k-means算法效率,很多优秀的k-means算法通过对每个样本维持一个上下界来减少样本距离计算次数,达到加速目的。比如最早的Elkan,以及在此基础上发展出来的harmly, ann, exp, yingyang等等。本文基于重庆邮电大学王国胤与夏书银共同提出的多粒度-粒球计算理论(Xia S , Liu Y , Ding X , Wang G et al. Granular Ball Computing Classifiers for Efficient, Scalable and Robust Learning[J]. Information Sciences, 2019, 483:136-152.),使用球体来划分度量空间簇,提出了一种简单、高效的Ball-k-means算法。由于使用超球体来量化空间簇,获得了更加精确的近邻关系,该近邻关系不需要额外参数,消除了现有大多数优秀加速算法中单个样本上下界,单个样本点的计算次数远小于现有的同类顶尖算法。(原文链接:https://ieeexplore.ieee.org/document/9139397;可下载链接:https://www.researchgate.net/publication/342914449_A_Fast_Adaptive_k-means_with_No_Bounds)
一、核心基本概念
定义1 (球簇)
该概念借鉴于多粒度-粒球计算理论(Xia S , Liu Y , Ding X , Wang G et al. Granular Ball Computing Classifiers for Efficient, Scalable and Robust Learning[J]. Information Sciences, 2019, 483:136-152.),用超球体这种最简单的模型(不管数据多少维,只有半径和中心两个参数)来量化和表示簇,可以获得更精确的空间关系刻画。
定义2 (近邻球簇)
使用近邻球簇可大大缩减了一个球簇内的点在下一次的迭代中的距离计算范围:其距离计算范围从所有点限制到了它的近邻球内部。一个球簇的点在下一次迭代中只会在它的近邻簇中调整,不需要计算该簇中点到其他所有点的距离,从而降低了计算次数,该特性由定理1保证。
近邻球的关系示意图如图1所示:C1和C2是C3的近邻球,C4不是C3的近邻球,所以C3的点可能被分配到C1和C2中,不可能被分配到C4中。
图1. 近邻球簇的关系示意图
证明过程省略,具体证明过程可参见原文。
二、球簇内部量化,进一步加速
每个球簇内部被进一步划分为稳定域和活动域,具体定义如下定义3。稳定域中的点不需要在下一次迭代中进行调整,因此这些点在下一次迭代中的距离计算次数为零,该特性由定理2保证。
如图2所示,球C1有两个近邻簇C2和C3, 其稳定域是由C2确定的、由绿色虚线包围的区域。
图2. 近邻球簇的关系示意图
证明过程省略,具体证明过程可参见原文。
三、球簇活动域划分为环,进一步加速
将活动域划分为环后(具体定义见定义4),每个环内的近邻球数进一步降低,从而进一步减少距离计算次数。如图2所示: 第一层环(绿色虚线和蓝色虚线之间)中的点只可能被分配到C2中,而不是所有的近邻簇(即C2和C3),该特性由定理3来保证。
证明过程省略,具体证明过程可参见原文。
四、降低求近邻簇过程中的簇与簇中心的距离计算次数
为了降低近邻簇的距离计算次数,对于某个球簇C,当其他簇满足中心距离达到如定理4描述的界限后,其在下一次迭代中不可能成为球簇C的近邻簇。因此不同球簇中心之间的距离计算次数得到了缩减。该特性由定理4保证。如图3所示,Cj在下一次迭代中不可能成为Ci的近邻球,因此下一次迭代中不需要计算两者之间的距离。
证明过程省略,具体证明过程可参见原文。
图 3. Cj在下一次迭代中不可能成为Ci的近邻球
五、稳定簇
这是最终的加速过程。对于某个球簇,如果一个簇中的点没有发生任何变化,我们称之是稳定的。如果一个簇的近邻簇在上一代都是稳定簇,那么该簇在当前迭代过程中不需要参与任何计算。该特性由定理5保证。随着迭代过程的推进,稳定簇会越来越多,基于稳定簇的算法加速作用也会越来越明显。
证明过程省略,具体证明过程可参见原文。
六、时间复杂度分析
以下是与其他算法的时间复杂度分析与对比,具体请参见原文。
结论
Ball k-means 突破了现有大多数优秀精确k-means算法基于单一样本上下界约束调整的思路,消除了单一样本需要维护的上下界,实现个一个更加精确、简单和自适应的计算过程。整体算法简单、高效。
本文的c语言源代码,以及python调用版本可从以下链接下载(包含单精度和双精度两种版本),执行速度远高于sklearn中的k-means算法。欢迎大家使用(请引用原文:S. Xia et al., "A Fast Adaptive k-means with No Bounds," in IEEE Transactions on Pattern Analysis and Machine Intelligence, doi: 10.1109/TPAMI.2020.3008694.)并提出宝贵意见:
https://github.com/syxiaa/ ball-k-means;
http://www.cquptshuyinxia.com/ball-k-means.html.