K-means++算法

Posted

技术标签:

【中文标题】K-means++算法【英文标题】:K-means++ algorithm 【发布时间】:2013-07-03 00:44:30 【问题描述】:

我阅读了k-means++: The Advantages of Careful Seeding 的论文,并不太明白提供的算法是:

“令 D(x) 表示从数据点 x 到我们已经选择的最近中心的最短距离。

1a。随机均匀地选择一个初始中心c1 来自 X。

1b。选择下一个中心 ci,选择 ci = x' ∈ X 概率为 (D(x')^2) / Sum_of(D(x)^2)

1c。重复步骤 1b,直到我们总共选择了 k 个中心。

2-4。继续使用标准的 k-means 算法"

(最好看上面链接中的算法)

尤其是步骤 1b。 “以概率 (D(x')^2) / Sumof(D(x)^2) 选择 ci = x' ∈ X”是什么意思。他们的意思是选择比例最大的元素吗?以及如何执行这样的计算才能导致选择最佳质心?

【问题讨论】:

不确定为什么会收到 -1。 【参考方案1】:

http://en.wikipedia.org/wiki/K-means%2B%2B

   1. Choose one center uniformly at random from among the data points.
   2. For each data point x, compute D(x), the distance between x and the nearest center that has already been chosen.
   3. Choose one new data point at random as a new center, using a weighted probability distribution where a point x is chosen with probability proportional to D(x)2.
   4. Repeat Steps 2 and 3 until k centers have been chosen.
   5. Now that the initial centers have been chosen, proceed using standard k-means clustering.

【讨论】:

【参考方案2】:

函数D(x)是为所有点x ∈ X定义的。

在步骤 1b 中,我们必须选择某个点作为新中心。我们将在所有点(还不是中心)之间随机选择。但我们不会对每一点都给予平等的机会;在我们选择之前,我们会为不同的点分配不同的概率。这些概率加起来必须为 1。

考虑 D(x)^2。我们可以在每一点上评估它,并将这些值相加:Sum_of(D(x)^2)。

然后我们可以为每个点 x' 分配一个等于 D(x')^2 / Sum_of(D(x)^2) 的概率。这些概率加起来为 1,并提供了一个更好的机会点远离所有现有中心。

【讨论】:

为什么我们不选择概率最高的点而不是随机选择一个? @LongPhan:我怀疑这根本不像随机选择中心那样有效。请记住,选择中心只是第一步;然后必须对其进行调整和调整,直到系统稳定为止。这篇论文的重点是加权概率比均匀概率更有效。也许如果按照您的建议选择初始中心,他们将有更远的路要走。经验性的答案需要数小时的实验工作;一个准确的答案可能需要数周(或更多)的工作来证明。 你认为论文[Single Pass Seed Selection Algorithm for k-Means][thescipub.com/pdf/10.3844/jcssp.2010.60.66]的算法比K-Means++更好吗? @LongPhan:该文档似乎是空的。 抱歉,链接末尾不应该有括号:thescipub.com/pdf/10.3844/jcssp.2010.60.66【参考方案3】:

K-Means 和 K-Means++ 最大的区别在于初始中心的选择方式。 K-means 随机选择初始中心。在选择初始中心之前,K-Menas++会计算所有点到第一个中心的距离,使所有中心 这将被选择远离彼此。如果选择一个中心靠近其他中心,则分配给相应中心的点需要迭代多次以分离集群。但是,如果两个中心的距离足够远,它们属于一个簇的概率很小,并且很容易将簇分开。

【讨论】:

以上是关于K-means++算法的主要内容,如果未能解决你的问题,请参考以下文章

4.K-MEANS聚类算法

关于K-Means算法

K-Means聚类算法原理

K-Means聚类算法原理

K-Means聚类算法原理

简单易学的机器学习算法——K-Means++算法