Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 我们应该使用k-means++;而不是k-means?_Algorithm_Performance_Comparison_Cluster Analysis_K Means - Fatal编程技术网

Algorithm 我们应该使用k-means++;而不是k-means?

Algorithm 我们应该使用k-means++;而不是k-means?,algorithm,performance,comparison,cluster-analysis,k-means,Algorithm,Performance,Comparison,Cluster Analysis,K Means,该算法有助于原始k-均值算法的以下两点: 原始的k-means算法在输入大小上具有超多项式的最坏情况运行时间,而k-means++声称是O(logk) 在目标函数方面,与最优聚类相比,所发现的近似可以产生不太令人满意的结果 但是k-means++有什么缺点吗?从现在起,我们应该一直使用它而不是k-均值吗?没有人声称在O(lgk)时间内运行;它的解决方案质量是O(lgk)-与最优解决方案竞争。k-means++和常用的劳埃德算法都是NP难优化问题的近似算法 我不确定k-means++最糟糕的运行时

该算法有助于原始k-均值算法的以下两点:

  • 原始的k-means算法在输入大小上具有超多项式的最坏情况运行时间,而k-means++声称是O(logk)
  • 在目标函数方面,与最优聚类相比,所发现的近似可以产生不太令人满意的结果
  • 但是k-means++有什么缺点吗?从现在起,我们应该一直使用它而不是k-均值吗?

    没有人声称在O(lgk)时间内运行;它的解决方案质量是O(lgk)-与最优解决方案竞争。k-means++和常用的劳埃德算法都是NP难优化问题的近似算法

    我不确定k-means++最糟糕的运行时间是多少;注意,在最初的描述中,算法的步骤2-4是指劳埃德算法。他们确实声称它在实践中运行得更好更快,因为它从一个更好的位置开始

    因此,k-means++的缺点是:

  • 它也可以找到次优的解决方案(仍然是近似值)
  • 它并不总是比劳埃德算法快(参见Arthur&Vassilvitskii的表格)
  • 这比劳埃德的算法更复杂
  • 这是相对较新的,而劳埃德已经证明它的价值超过50年
  • 对于特定的度量空间,可能存在更好的算法

  • 这就是说,如果您的k-means库支持k-means++,那么请务必尝试一下。

    这不是您的问题,而是对大N的任何kmeans方法的简单加速:

    1) 首先对点的任意样本(如sqrt(N))进行k均值检验
    2) 然后从这些中心运行完整的k-means

    对于N 10000,k 20,我发现这个速度比kmeans++快5-10倍,结果类似。
    它对您的效果将取决于sqrt(N)样本的效果 近似于整体,以及N、dim、k、ninit、delta

    您的N(数据点数量)、dim(特征数量)和k是多少?
    用户的N、dim、k、数据噪声、度量的巨大范围。。。 更不用说缺乏公共基准了,这使得比较方法变得很困难

    添加:kmeans()和kmeanssample()的Python代码为
    依此类推;欢迎评论。

    只是吹毛求疵。这是log K与optimal竞争,而不是与Lloyd竞争。事实上,劳埃德可以是任意糟糕的w.r.t最优,并且没有合理的近似保证。@Suresh:这不是吹毛求疵,而是我的想法。更正。Bradley和Fayyad撰写的论文《为K-均值聚类细化初始点(1998)》,更详细地描述了一种类似的技术:感谢预测;你用过这个吗?(好主意会被重新发现,但也不是很好的主意。)你有没有试过先在随机样本上运行k-means++然后再进行改进?@Anony mouse,听起来很合理,但没有。请纠正我,数据集变化如此之大,以至于说“在像Y这样的数据上使用变量X”是不可能的?好吧,k-means++是一种比选择随机对象更聪明的方法,可以在几乎任何类型的数据上播种。因此,实际上没有什么理由不总是使用k-means++除非您有一个特定于领域的启发式方法来选择更好的种子。