k-means++算法有助于原始k-means算法的以下两点:
但是k-means ++有什么缺点吗?从现在开始我们应该总是使用它而不是k-means吗?
答案 0 :(得分:16)
没有人声称k-means++在O(lg k )时间内运行;它的解决方案质量是O(lg k ) - 与最佳解决方案竞争。 k -means ++和常用方法(称为Lloyd算法)都是NP-hard优化问题的近似值。
我不确定 k -means ++的最坏情况运行时间是多少;请注意,在Arthur & Vassilvitskii's原始描述中,算法的步骤2-4涉及Lloyd的算法。他们确实声称它在实践中既更好又更快,因为它从更好的位置开始。
k -means ++的缺点是:
也就是说,如果您的 k -means库支持 k -means ++,那么请务必尝试一下。
答案 1 :(得分:7)
不是你的问题,但对于大型N的任何kmeans方法都很容易加速:
1)首先对点数为sqrt(N)的随机样本进行k均值 2)然后从这些中心运行完整的k-means。
我发现这比Kmeans ++快5到10倍,对于N 10000,k 20,结果相似 它的效果如何取决于sqrt(N)样本的效果 近似整体,以及N,dim,k,ninit,delta ......
你的N(数据点数),暗淡(特征数量)和k是什么? 用户的N,dim,k,数据噪声,指标的巨大范围...... 更不用说缺乏公共基准,难以比较方法。
补充:kmeans()和kmeanssample()的Python代码是 here关于SO;欢迎提出意见。