使用带有 L 方法的平滑器来确定 K-Means 聚类的数量

Posted

技术标签:

【中文标题】使用带有 L 方法的平滑器来确定 K-Means 聚类的数量【英文标题】:Using a smoother with the L Method to determine the number of K-Means clusters 【发布时间】:2011-05-01 08:01:35 【问题描述】:

在应用 L 方法来确定数据集中 k 均值聚类的数量之前,有没有人尝试过对评估指标应用更平滑的方法?如果是这样,它是否改善了结果?或者允许较少数量的 k-means 试验,从而大大提高速度?您使用了哪种平滑算法/方法?

“L-方法”在以下内容中有详细说明: Determining the Number of Clusters/Segments in Hierarchical Clustering/Segmentation Algorithms, Salvador & Chan

这会计算一系列不同试验集群计数的评估指标。然后,为了找到拐点(出现在最佳数量的聚类中),使用线性回归拟合两条线。应用一个简单的迭代过程来改善膝关节拟合 - 这使用现有的评估度量计算并且不需要重新运行任何 k-means。

对于评估指标,我使用的是 Dunns 指数的简化版本的倒数。为速度而简化(基本上我的直径和集群间计算被简化了)。倒数是为了使索引在正确的方向上工作(即,通常越低越好)。

K-means 是一种随机算法,因此通常会运行多次并选择最佳拟合。这工作得很好,但是当您为 1..N 个集群执行此操作时,时间很快就会增加。因此,控制运行次数符合我的利益。总体处理时间可能决定我的实现是否实用 - 如果我不能加快速度,我可能会放弃此功能。

【问题讨论】:

进一步考虑这一点,我认为均匀(即运行平均)平滑器不会有任何显着效果,因为 L 方法然后使用最小二乘法拟合线。但是,形状平滑器(例如高斯)可能表现不同。我将尝试实现一个中等大小的高斯(半宽大约 6-10 对我来说似乎是正确的)。这将是一个定性测试。 我确实认为这将是一个很好的中等规模的研究项目。如果有任何大学生正在寻找一个项目,我会对合作/指导/共同创作感兴趣。这样的项目应该进行定量比较,并且比我的具体应用更通用。我会将 project-ideas 标签添加到问题中。 我一直在做的,是跳过一些 N 值的计算。如果我们感兴趣的集群计数从 M 到 N,那么我计算到 2N,在右边给出足够的一行手边。通过删除其中一些高计数(例如,仅在某个点之外进行交替),我获得了类似的准确性,并节省了一些可观的时间。几周前,我还对代码进行了多线程处理,这对 Core i7 有很大影响 :-) 我只是计算备用(例如奇数值)值。我只在不太重要的高端产品上这样做。 还有 X-means,一种 k-means 变体,以 k=2 开头,然后迭代地进一步拆分集群。 【参考方案1】:

我过去曾在 SO 上问过similar question。我的问题是想出一种一致的方法来找到你描述的 L 形膝盖。有问题的曲线代表了模型的复杂性和拟合度量之间的权衡。

best solution是根据图示找到距离d最大的点:

注意:我还没有阅读您链接到的论文..

【讨论】:

感谢您的回复。这看起来对论文采用了更几何的方法,但如果它简化为相同(或非常相似)的数学,我不会感到惊讶。我的问题是,首先对数据进行平滑处理是否更好,并且对于一个非常具体的应用程序(数据点是不同计数集群的拟合度量)。 @Amro:您是否发现这种技术比二阶导数测试更有效?这种技术有标准名称吗? L 方法就是本文所说的。我认为我的二阶导数噪声太大,无法准确找到膝盖。 @Legend:正如@winwaed 提到的,二阶导数对噪声非常敏感,这就是为什么我使用上面的几何方法... @@winwaed 和@Amro:谢谢你的解释。

以上是关于使用带有 L 方法的平滑器来确定 K-Means 聚类的数量的主要内容,如果未能解决你的问题,请参考以下文章

使用 k-means 聚类时如何确定 k?

使用 k-means 聚类时如何确定 k?

使用 k-means 聚类时如何确定 k?

使用 k-means 聚类时如何确定 k?

使用啥分类器来确定两个数据集是不是描绘了同一个人?

使用带有 Silhouette 函数的 k-means 聚类时如何选择 k?