【问题标题】:Kmeans without knowing the number of clusters? [duplicate]Kmeans 不知道集群的数量? [复制]
【发布时间】:2011-09-30 17:38:19
【问题描述】:

我正在尝试在一组高维数据点(大约 50 维)上应用 k-means,并且想知道是否有任何实现可以找到最佳集群数量。

我记得在某处读到,算法通常这样做的方式是最大化集群间距离和最小化集群内距离,但我不记得我在哪里看到的。如果有人能指出任何讨论这个问题的资源,那就太好了。我目前正在将 SciPy 用于 k-means,但任何相关的库也可以。

如果有其他方法可以实现相同或更好的算法,请告诉我。

【问题讨论】:

标签: python machine-learning data-mining k-means


【解决方案1】:

如果不知道簇号,为什么不使用层次聚类呢?

一开始,每一个孤立的都是一个簇,然后每两个簇的距离小于一个阈值就会被合并,当没有再合并时算法结束。

层次聚类算法可以为您的数据执行一个合适的“K”。

【讨论】:

    【解决方案2】:

    一种方法是使用大 k(比您认为的正确数字大得多)运行 k-means,例如 1000。然后,在这 1000 个点上运行均值偏移算法(均值偏移使用整个数据,但您只会“移动”这 1000 个点)。然后,均值偏移将找到簇的数量。 在没有 k-means 的情况下运行 mean shift 是可能的,但它通常太慢 O(N^2*#steps),所以在之前运行 k-means 会加快速度:O(NK#steps)

    【讨论】:

      【解决方案3】:

      有些可视化应该暗示好的参数。对于 k-means,您可以使用 Graphgrams 可视化具有不同 k 的多个运行(请参阅 WEKA graphgram 包 - 最好由包管理器或 here 获得。也可以在 here 找到介绍和示例。

      【讨论】:

        【解决方案4】:

        一种方法是cross-validation

        本质上,您选择数据的一个子集并将其聚类到 k 个聚类中,然后询问与其余数据相比,它聚类的程度如何:您是否将数据点分配给相同的集群成员资格,还是属于不同的集群?

        如果成员资格大致相同,则数据很适合 k 个集群。否则,您尝试不同的 k

        另外,您可以进行 PCA (principal component analysis) 将您的 50 个维度减少到一些更易于处理的数字。如果 PCA 运行表明您的大部分方差来自 50 个维度中的 4 个,那么您可以在此基础上选择 k,以探索如何分配四个集群成员资格。

        【讨论】:

        • 维数和簇数有什么联系?我可以轻松地为任意 K 构建具有 k 个簇的一维分布。
        • “如果成员资格大致相同” - 这是假设数据被均匀分成集群,这是一个相当强的假设。
        • “相同的集群成员”是什么意思?您是否将训练折叠上的聚类与测试折叠上的聚类进行比较?如果是这样,我不确定如何比较它们,因为它们具有完全不重叠的数据点。
        【解决方案5】:

        您还应该确保每个维度实际上是独立的。许多所谓的多维数据集对同一事物有多种表示。

        在您的数据中包含这些并没有错。使用同一事物的多个版本来支持集群参数是错误的。

        http://en.wikipedia.org/wiki/Cronbach's_alpha

        【讨论】:

          【解决方案6】:

          看看这个wikipedia page on determining the number of clusters in a data set

          你也可以试试Agglomerative hierarchical clustering。这种方法不需要知道集群的数量,它会逐渐形成集群的集群,直到只有一个存在。这种技术也存在于 SciPy (scipy.cluster.hierarchy) 中。

          【讨论】:

            【解决方案7】:

            一种有趣的方法是 Fred 和 Jain 的 evidence accumulation。这是基于将多次运行的 k-means 与大量集群相结合,将它们聚合成一个整体解决方案。该方法的优点包括集群的数量在此过程中确定,并且最终的集群不必是球形的。

            【讨论】:

              猜你喜欢
              • 2021-05-02
              • 2020-11-21
              • 2019-11-26
              • 2017-06-01
              • 1970-01-01
              • 2014-06-24
              • 1970-01-01
              相关资源
              最近更新 更多