我已经在很多K-means实现中看到过,例如VLFeat k-means或OpenCV k-means,基本上有两种选择起始质心的方法:
然而,我没有得到哪种情况,另一种情况更好,特别是因为起始方法被认为是重要的。你能帮我理解这一点吗?
答案 0 :(得分:1)
理论上,k-means ++更好。这是一种有偏差的随机抽样,更喜欢彼此距离较远的点,并避免接近点。随机初始化可能不吉利,并选择附近的中心。
因此从理论上讲,k-means ++应该需要更少的迭代次数,并且更有可能找到全局最优值。
然而,k-means ++并不完全是“免费的”,在我的实验中,我没有看到两者之间有更先进的k-means算法的任何系统差异。 k-means ++需要O(k n)计算 - 关于一次完整迭代的成本。但是有一些改进的k-means算法迭代的次数要少得多。使用这些算法,k-means ++可能会占总运行时间的10-20%(教科书k-意味着它通常不到1%)。
我想我现在更喜欢简单的随机初始化,尝试多次,每次尝试10次迭代来优化样本,然后继续使用最好的。