我对为 K-means 选择初始种子(聚类中心)的现有技术很感兴趣。
谷歌搜索导致两个流行的选择:
- 随机选择初始种子,并且,
- 使用 KMeans++ 选择技术:Arthur & Vassilvitskii 2006 k-means++: The Benefits of Careful Seeding
是否还有其他任何人都知道但可能不那么受欢迎的有前途的方法?
我对为 K-means 选择初始种子(聚类中心)的现有技术很感兴趣。
谷歌搜索导致两个流行的选择:
是否还有其他任何人都知道但可能不那么受欢迎的有前途的方法?
请允许我,不用走太远,只需从我自己的函数(SPSS 的宏)中复制粘贴选项列表,该函数可在此处的“聚类”集合中找到。!kmini
创建或选择初始聚类中心的方法。选择:
k
,这些组的质心被指定为初始中心。因此,中心是计算出来的,而不是从现有的数据集案例中选择的。这种方法产生的中心彼此靠近并靠近数据的一般质心。k
随机选择数据的不同案例作为初始中心。k
将案例作为中心,然后在遍历数据集的其余案例期间,逐步完成中心之间的替换;替换的目的是k
在可变空间中获得彼此最远的端点。这些在数据云中占据外围位置的点(案例)是产生的初始中心。(该方法在 SPSS k-means 过程中用作默认值QUICK CLUSTER
。请参阅 SPSS 算法中的详细信息。另请参阅此处描述)。k
最具代表性的“副案”。第一个中心被认为是最接近一般数据质心的情况。然后以这样一种方式从数据点中选择其余的中心,即每个点都被认为是否比一组点更接近(以及多少,就平方欧几里得距离而言)。是到任何现有的中心。即,每个点都作为候选点进行检查,以代表一些尚未由已收集的中心很好地代表的点组。在这方面最具代表性的点被选为下一个中心。(Kaufman, L. Rousseeuw, PJ 在数据中寻找组:聚类分析简介。,1990 年。另见:Pena, JM 等。K-means 算法的四种初始化方法的经验比较 // Pattern Recognition Lett。 20 (10), 1999,k
随机统一但“随机性低于随机”的点,介于随机和贪婪之间;见该方法的潜在理论基础]k
它产生的簇的平均值是k-means过程的初始种子。Ward 优于其他层次聚类方法,因为它与 k-means共享共同的目标目标。方法 RGC、RP、SIMFP、KMPP 依赖于随机数,并且可能在每次运行中改变它们的结果。
方法 RUNFP 可能对数据集中的大小写顺序很敏感;但方法 GREP 不是(除了在数据中有许多相同的情况、联系的情况外)。如果相对于数据中的病例数 ( ) 而言,方法 GREP 可能无法收集所有k
中心,尤其是在. [如果数据不允许该方法收集中心,宏将通知]。方法 GREP 是最慢的一种,它[在我的实现中]计算所有案例之间的距离矩阵,因此如果有数万或数百万个案例,它就不适合了。但是,您可以对数据的随机子样本执行此操作。k
n
k>n/2
k
我目前不讨论哪种方法“更好”以及在什么情况下,因为到目前为止我还没有对这个问题进行广泛的模拟探索。我非常初步和肤浅的印象是 GREP 特别值得(但它很贵),如果你想要真正便宜的方法仍然足够有竞争力,那么随机 k 点,RP,是一个不错的选择。
上一次我对此进行了全面的文献回顾,这是近 20 年前公认的,两个主要建议是:
在大数据应用中,Ward 的方法效果不是很好,尽管它可以应用于子样本。
我做了一些模拟,但我从未有机会发表,并发现:
我从中得出的主要结论是 SPSS 算法出奇的好,但如果有资源,1000+ 随机起点是必经之路。
使用 ttnphns 命名法,我测试了 RGC、RP 和 KMPP:
我不推荐 RGC,因为生成的中心彼此非常接近:许多点的平均值接近全局平均值(大数定律)。这会大大减慢收敛速度:集群开始个性化需要一些时间。
RP 通常很好,建议作为第一个简单的选择。
KMPP 非常流行,并且在小维度上效果很好:与 RP 相比,它倾向于降低以局部最小值结束的概率。
然而,当我处理大型数据集(1M 点,即来自大尺寸文本文档的词袋)时,RP 的表现略优于 KMPP,因为它以略少的迭代结束。我对此感到惊讶。在大数据集/高维度中,收敛到全局最小值是不可能的,您将质量衡量为“局部最小值有多好”=“最终 SOD 有多小”。两种方法具有相同的质量。
请注意,如果您想使用复制来提高质量,使用随机方法很重要。
我从您的问题中假设您对 k-means 问题的良好解决方案感兴趣(否则任何初始化方法都可以)。您可能想看看“Breathing K-Means”算法(我是发明者)。它不仅仅是 Lloyd 算法(又名 k-means 算法)的一种初始化方法,它在每个添加或删除步骤之后运行 Lloyd 算法时,根据错误和实用程序添加和删除质心组。该算法在 40 个测试问题中的 39 个上击败了 k-means++,主要取自文献。它与 k-means++ 找到最优值(因此无法被击败)的一个测试问题相提并论。软件:https : //pypi.org/project/bkmeans(API 兼容 scikit-learn) 预印本:https ://arxiv.org/abs/2006.15666 。