我读到k-means算法只收敛到局部最小值而不是全局最小值。为什么是这样?我可以从逻辑上思考初始化如何影响最终的聚类,并且有可能出现次优聚类,但我没有找到任何可以在数学上证明这一点的东西。
另外,为什么k-means是一个迭代过程? 我们不能仅仅部分区分目标函数w.r.t.到质心,把它等于零,找到最小化这个函数的质心?为什么我们必须使用梯度下降来逐步达到最小值?
答案 0 :(得分:9)
考虑:
. c .
. c .
其中c是聚类质心。该算法将停止,但更好的解决方案是:
. .
c c
. .
关于证明 - 您不需要数学证明来证明某些事情并非总是如此,您只需要一个反例,如上所述。您可以将上述内容转换为数学证明,但这是不必要的,通常需要大量工作;即使在学术界,仅仅举一个反例来反驳某些东西也是可以接受的。
k-means算法根据定义是一个迭代过程,它只是它的工作方式。 The problem of clustering is NP-hard,因此使用精确的算法计算质心将花费非常长的时间。
答案 1 :(得分:6)
不要混淆问题和算法。
k-means问题是找到质心的最小二乘分配。
有多种算法可供查找解决方案。
有一种明显的方法可以找到全局最优:枚举所有k^n
可能的分配 - 将产生全局最小值,但是在指数运行时。
在更快时间内找到一个近似解决方案的重点更多。
Lloyd / Forgy算法是一种EM风格的迭代模型细化方法,保证收敛到局部最小值,因为存在有限数量的状态,并且目标函数必须减少在每一步。此算法通常在O(n*k*i)
i << n
运行,但通常只能找到本地最小值。
MacQueens方法在技术上不是迭代的。它是一种单通道,一元一元的算法,甚至在Lloyd意义上也找不到局部最小值。 (然而,您可以在数据集上多次传递,直到收敛,以获得局部最小值!)如果您执行单次传递,则在O(n*k)
中,对于多次传递,添加i
。它可能会或可能不会超过劳埃德。
然后是Hartigan和Wong。我不记得细节,IIRC它是Lloyd / Forgy的一个聪明,更懒惰的变种,所以可能也在O(n*k*i)
中(尽管可能不会重新计算所有n*k
距离以供以后迭代?)
你也可以做一个只测试l
随机分配的随机算法。它可能根本找不到最小值,但以“线性”时间O(n*l)
运行。
哦,您可以尝试不同的随机初始化,以提高找到全局最小值的机会。为试验次数添加因子t
...