【问题标题】:Regarding quality of different k-means algorithms关于不同k-means算法的质量
【发布时间】:2012-12-01 00:38:37
【问题描述】:

我看到对于 k-means,我们有 Lloyd 算法、Elkan 算法,并且我们还有 k-means 的分层版本。

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

【问题讨论】:

    标签: algorithm machine-learning k-means


    【解决方案1】:

    要比较质量,您应该有一个带标签的数据集,并按照NMI等标准衡量结果

    【讨论】:

      【解决方案2】:

      双月数据集的病态案例怎么样?无监督的 k-means 会严重失败。我知道的一种高质量方法采用了一种使用互信息和组合优化的概率更高的方法。基本上,您将聚类问题转换为在两个聚类的情况下找到完整点集的最佳 [聚类] 子集的问题。

      您可以找到 relevant paper here(第 42 页)和相应的 Matlab code here 来玩(查看两个月亮的案例)。如果您对加速超过 30 倍的 C++ 高性能实现感兴趣,您可以找到它here HPSFO

      【讨论】:

      • 虽然内容丰富,但没有回答问题:between all these k-means algorithms, which algorithm would be able to give you the better quality? Is it possible to measure such thing?
      【解决方案3】:

      更好的解决方案通常是具有更好(更低)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 簇 |c| = k)
      • distance(a,b)(有时表示为 ||a-b|| 是“点”a 到“点”b 之间的距离(在欧几里得二维空间中为sqrt((a.x-b.x)^2 + (a.y-b.y)^2)
      • centroid(i) - 最接近x(i) 的质心/平均值

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

      【讨论】:

      • 请注意,由于许多寻找解决方案的方法都是从随机初始化开始的,这会从根本上影响解决方案的质量,因此值得在中等数量的运行以确定准确的功效
      【解决方案4】:

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

      【讨论】:

      • 聚类是无监督的学习技术,你到底在说什么交叉验证?你不知道标签的真实情况,这不是监督分类问题。
      • 您始终可以手动标记一些数据,在该数据上运行聚类算法,然后将原始标签与算法输出进行比较。
      • 然后叫test settrain set,不是交叉验证。这也不是解决方案,因为这并不是要评估算法在一般情况下的表现如何(根据我对问题的理解),而是要为特定问题选择最佳集群,因为聚类算法是启发式的,因此两次运行可能会产生不同的结果,您需要为这个特定实例选择 - 哪个更好。
      猜你喜欢
      • 2013-07-03
      • 2013-04-20
      • 1970-01-01
      • 2010-12-05
      • 2017-04-20
      • 2013-04-22
      • 2022-01-01
      • 2017-04-10
      • 2020-02-21
      相关资源
      最近更新 更多