Algorithm 关于不同k-均值算法的质量

Algorithm 关于不同k-均值算法的质量,algorithm,machine-learning,k-means,Algorithm,Machine Learning,K Means,我看到对于k-means,我们有劳埃德算法,埃尔坎算法,还有k-means的分层版本 对于所有这些算法,我认为Elkan的算法可以在速度方面提供提升。但我想知道的是,所有这些k-均值算法的质量。每次我们运行这些算法,结果都会不同,这是由于它们的启发式和概率性质。现在,我的问题是,当涉及到像k-means这样的聚类算法时,如果我们想在所有这些k-means算法之间获得更好的质量结果(比如在较小的失真等),哪种算法能够给你更好的质量?有可能测量这种情况吗?据我所知,您需要一些带有标签的数据来交叉验证

我看到对于k-means,我们有劳埃德算法,埃尔坎算法,还有k-means的分层版本


对于所有这些算法,我认为Elkan的算法可以在速度方面提供提升。但我想知道的是,所有这些k-均值算法的质量。每次我们运行这些算法,结果都会不同,这是由于它们的启发式和概率性质。现在,我的问题是,当涉及到像k-means这样的聚类算法时,如果我们想在所有这些k-means算法之间获得更好的质量结果(比如在较小的失真等),哪种算法能够给你更好的质量?有可能测量这种情况吗?

据我所知,您需要一些带有标签的数据来交叉验证聚类算法。

更好的解决方案通常是具有更好(更低)的
J(x,c)
值的解决方案,其中:

J(x,c) = 1/|x| * Sum(distance(x(i),c(centroid(i)))) for each i in [1,|x|]
当:

  • x
    是示例列表
  • | x |
    x
    的大小(元素数)
  • [1,| x |]
    从1到
    |x |
    的所有数字(包括在内)
  • c
    是簇的质心(或平均值)列表(即对于
    k
    clusters | c |=k)
  • 距离(a,b)
    (有时表示为| | a-b | |是“点”a到“点”b之间的距离(在欧几里德二维空间中,它是
    sqrt((a.x-b.x)^2+(a.y-b.y)^2)
  • 质心(i)-最接近
    x(i)

请注意,这种方法不需要切换到有监督的技术,并且可以完全自动化!

两个卫星数据集的病理情况如何?无监督的k-均值将严重失败。我知道的一种高质量方法使用了一种更为概率的方法,使用互信息和组合优化。基本上您将聚类问题转换为在两个簇的情况下找到完整点集的最佳[cluster]子集的问题


您可以找到(第42页)和相应的玩法(查看two moons案例)如果你对C++的高性能实现感兴趣,速度快于>30x,那么你可以找到它。

< p>比较质量,你应该有一个标签数据集,并用一些标准来衡量结果,比如

集群是无监督的学习技术,你到底在说什么交叉验证?你不知道。标签的基本事实,这不是监督分类问题。您可以随时手动标记一些数据,对这些数据运行聚类算法,然后将原始标签与算法输出进行比较。然后它被称为测试集和训练集,而不是交叉验证。这也不是解决方案,因为这并不意味着评估数据的质量算法在一般情况下(根据我对问题的理解),这意味着为特定问题选择最佳的群集,因为群集算法是启发式的,所以两次运行可能会产生不同的结果,您需要为此特定实例选择更好的群集。请注意,由于许多查找解决方案的方法都是从随机初始化开始的,这可能会从根本上影响考虑到解决方案的质量,值得取平均值(和方差)其中,通过中等次数的运行来确定准确的效率虽然信息丰富,但它并没有回答以下问题:
在所有这些k-均值算法中,哪种算法能够为您提供更好的质量?是否有可能测量这种情况?