"k means"和"fuzzy c means"目标函数有什么区别?

31

我试图通过它们所处理的目标函数来比较它们的性能是否可以进行比较?


9
加油!不要关闭......聚类与排序算法或形式语法问题一样,是与程序相关的。 - mjv
5个回答

28

顺便提一下,Fuzzy-C-Means(FCM)聚类算法也被称为Soft K-Means

目标函数基本相同,唯一的区别在于引入了一个向量,用于表示给定点属于每个聚类的归属百分比。该向量会经过“刚度”指数处理,以便更加注重强连接(相应地最小化较弱连接的权重)。顺带一提,当刚度因子趋近于无穷大时,得出的向量成为二元矩阵,这使得FCM模型与K-Means模型相同。

我认为,除了某些可能存在未分配点的聚类问题外,可以通过模拟无限刚度因子(即通过引入一个将向量中最大值变为1并将其他值清零的函数来替代向量的指数运算)来模拟K-Means算法的FCM算法。当然,这是非常低效的运行K-Means的方法,因为该算法必须像使用真正的FCM一样执行许多操作(即使只使用1和0值,这简化了算术部分,但不影响复杂度)。

关于性能方面,FCM因此需要为每个点的每个维度执行k(即聚类数)次乘法运算(不计算用于计算和管理接近度向量的开销以及指数运算)。这加上了计算和管理接近度向量所需的额外开销,解释了为什么FCM比纯K-Means慢。

但是,当涉及到细长的聚类时(即在其他维度上一致的点倾向于沿着一个或两个特定维度散布时),FCM/Soft-K-Means比Hard-K-Means更聪明,这就是它还存在的原因;-)

从我的原始回复中:

另外,我刚刚想到一个问题,但还没有进行任何“数学”思考,模糊C均值可能比硬K均值更快地收敛,这在一定程度上抵消了FCM更大的计算需求。

2018年5月修改:

实际上,我无法找到任何可靠的研究支持我对FCM更快收敛速度的猜测。感谢Benjamin Horn让我保持诚实;-)


为什么FCM应该更快收敛?实际上它根本不会收敛,您必须在某个阈值处停止,当相对分配不再足够改变时;就像GMM-EM聚类一样。 - Has QUIT--Anony-Mousse
@Anony-Mousse:FCM和K-Means在数学意义上都是收敛的,这与您所描述的“当相对分配不再发生足够大的变化时”非常相似。换句话说,这些算法的连续迭代提供的聚类解决方案在开始时会从一次迭代到下一次迭代发生很大变化,但随着函数接近其极限,变化会变得越来越小。安全起见,在达到实际变化阈值后停止迭代,因为函数是收敛的:继续迭代不会产生显着不同的结果... - mjv
我还没有尝试和研究的是,FCM是否比硬K-Means更快地收敛。换句话说,使用FCM是否需要更少的迭代次数(比使用纯K-Means)才能达到所需的“稳定”解决方案。 - mjv
2
k-means算法在epsilon=0时会收敛,而模糊C均值聚类则不会。因此,在本质上它们的收敛方式是不同的。 - Has QUIT--Anony-Mousse
1
我认为这应该被编辑,因为没有硬的数学或研究支持说FCM比K-Means更快地收敛。 - doedotdev
@BenjaminHorn 感谢你让我保持诚实!我最初想调查这个问题,必要时进行研究...但从未有时间去做。受到你的评论的推动,在最近几周里,我检查了关于这个主题的文献,但发现很少有材料可以支持或反驳我的直觉。 - mjv

19

K-Means 聚类 Fuzzy-C Means 聚类 的方法非常相似。主要区别在于,在 Fuzzy-C Means 聚类中,每个点都有一个与特定群集相关联的加权值,因此一个点不会像“处于群集”那样,而是具有对群集的弱或强关联性,这是由到群集中心的反向距离决定的。

Fuzzy-C means 运行速度通常比 K-Means 慢,因为它实际上做了更多的工作。每个点都要与每个群集进行评估,并且每个评估中涉及更多的操作。K-Means 只需要进行一次距离计算,而 Fuzzy-C means 需要进行完整的反向距离加权。


5

C-means是模糊的,而k-means则是硬性的(不是模糊的) 。在K-means中,每个点都属于一个质心,但在模糊C-means中,每个点可以属于两个质心,但具有不同的质量。

enter image description here

每个点要么是第一质心的一部分,要么是第二质心的一部分。但是在C-means中,一个点可以是第一质心的一部分(90%)和第二质心的一部分(10%)。例如,如果学生得了49分,则有些情况下是及格的,而事实上是不及格的,这时我们称之为模糊。


2

人们写的都是技术性的内容,每个答案都写得很好。但我想用通俗易懂的语言说同样的话。 K均值聚类将整个数据集聚类成K个簇,其中一个数据只能属于一个簇。 模糊C均值创建k个簇,然后将每个数据分配给每个簇,但有一个因素将定义数据属于该簇的强度。


0
C-Means; 意味着数据点可以属于多个具有不同程度的簇,这对于处理本质上不确定或不明确属于单一类别的数据非常有用。而K-Means则将每个数据点专属地分配给一个簇。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接