我读到k-means算法仅收敛到局部最小值,而不收敛到全局最小值。为什么是这样?我可以从逻辑上考虑初始化如何影响最终的聚类,并且存在次优聚类的可能性,但是我没有找到任何可以从数学上证明这一点的东西。
另外,为什么k-means是一个迭代过程?我们不能仅将目标函数wrt与质心进行部分区分,将其等于零以找到使该函数最小化的质心吗?为什么我们必须使用梯度下降来逐步达到最小?
我读到k-means算法仅收敛到局部最小值,而不收敛到全局最小值。为什么是这样?我可以从逻辑上考虑初始化如何影响最终的聚类,并且存在次优聚类的可能性,但是我没有找到任何可以从数学上证明这一点的东西。
另外,为什么k-means是一个迭代过程?我们不能仅将目标函数wrt与质心进行部分区分,将其等于零以找到使该函数最小化的质心吗?为什么我们必须使用梯度下降来逐步达到最小?
Answers:
您可以将k-means视为EM算法的特殊版本,可能会有所帮助。
说你是估计用于与固定到为所有的单位矩阵的协方差矩阵的每个集群中的多元正态分布,而是可变的均值其中我是群集的索引。显然,如果参数{ μ 我 }是已知的,就可以分配给每个点p其似群集(即,所述μ 我要为其距离p中最小的)。用于此问题的EM算法几乎等同于k均值。
周围的其他方法,如果你知道哪些点属于哪个集群,可以估算出最优的。封闭的形式解决这个(指找到全局最优)基本上说,找到最大似然模型{ μ我 }您点的所有可能的任务集成到集群。由于即使只有三十个点和两个聚类,仍然有大约十亿个这样的可能分配,因此这是不可行的。
取而代之的是,我们可以对隐藏参数(或模型参数)进行一些猜测,并重复执行这两个步骤(可能会以局部最大值结尾)。如果让每个集群对一个点承担部分责任,那么最终将获得EM,如果仅分配最优集群,则得到k-均值。
因此,执行摘要:从概率上讲,有一个全局解决方案,但是它要求您遍历所有可能的群集。显然,如果您具有目标函数,则同样如此。您可以遍历所有解决方案并最大化目标函数,但是迭代次数与数据大小成指数关系。
这是您要解决的问题:
二进制变量指示是否将点i分配给聚类j。符号p i和c j分别表示第j个簇的第i个点和质心的坐标。它们都位于R d中,其中d是数据点的维数。
第一组约束条件是,应将每个点精确分配给一个群集。第二组约束条件(我们尚未在数学上定义)说,群集的质心坐标实际上取决于x i j变量的值。例如,我们可以将约束表达如下: c j = ∑ i x i j p i j
但是,代替处理这些非线性约束,在K-Means中,我们(近似)解决了一个不同的问题,该问题的最优解与我们的原始问题相同:
我们没有最小化到质心的距离,而是最小化了到任何点集的距离,这将提供更好的解决方案。事实证明,这些点恰好是质心。
现在要解决此问题,我们在该算法的步骤2-3中进行迭代,直到收敛为止:
在每个步骤中,目标函数都会提高(或在算法收敛时保持不变),因为在上一步中找到的解决方案位于当前步骤的搜索空间中。但是,由于我们在每个步骤中都固定了一些变量,因此这是一个局部搜索过程,不能保证最优性。
一个简单的例子可能会有所帮助。
让我们定义要聚类为的点集A = {1,2,3,4}
。
假设您要为A(2均值)找到2个合适的群集。至少有两个不同的设置可以满足k均值的固定条件。
设置1:
Center1 = 1, Cluster1 = {1}
Center2 = 3, Cluster1 = {2,3,4}
这里的目标是2。事实上,这是一个鞍点(try center1 = 1 + epsilon
和center1 = 1 - epsilon
)
设置1:
Center1 = 1.5, Cluster1 = {1,2}
Center2 = 3.5, Cluster1 = {3,4}
这里的目标是1/4。
如果将k均值初始化为第一个设置,则它将卡住..这绝不是全局最小值。
您可以使用前面示例的变体来创建两个不同的局部最小值。对于A = {1,2,3,4,5}
,设置cluster1={1,2}
并cluster2={3,4,5}
在相同的客观价值将结果cluster1={1,2,3}
和cluster2={4,5}
最后,如果您选择
A = {1,2,3,4,6}
center1={2.5} cluster1={1,2,3,4} and
center1={6} cluster1={6}
与
center1={2} cluster1={1,2,3} and
center1={5} cluster1={4,6}
?
[这是@Peter回答之前的内容]
经过简短的讨论(在“评论”部分中),我觉得我必须回答自己的问题。
我相信,当我部分区分某个质心的目标函数时,另一质心的簇中的点在导数中会消失。因此,我们可以获得的质心将仅使特定簇的平方距离之和最小。
@whuber添加:
只是部分原因,但并不能真正解释其行为。更重要的是,将点分配给质心是k-means所做的很大一部分。(一旦完成分配,就很容易计算出质心,而无需执行任何操作。)该分配是离散的:根本无法区分。
如果有人要添加更多,那就太棒了。
每个人都已经解释了所有内容,但是我想补充一点,如果样本数据没有以高斯分布的形式分布,那么它可能会停留在局部最小值上。在K-means算法中,我们实际上是在尝试实现这一点。