【问题标题】:Determining optimum number of clusters for k-means with a large dataset确定具有大型数据集的 k-means 的最佳聚类数
【发布时间】:2013-02-28 20:08:25
【问题描述】:

我有一个 62 列和 181408 行的矩阵,我将使用 k-means 进行聚类。理想情况下,我想要一种确定最佳集群数量的方法。我已经尝试使用集群包中的clusGap 实现间隙统计技术(下面的可重现代码),但这会产生一些与向量大小(122 GB)和 Windows 中的memory.limitproblems 和“@ 987654324@" 在 OS X 中。是否有人对可用于确定具有大型数据集的最佳集群数量的技术有任何建议?或者,或者,如何使我的代码起作用(并且不需要几天才能完成)?谢谢。

library(cluster)
inputdata<-matrix(rexp(11247296, rate=.1), ncol=62)
clustergap <- clusGap(inputdata, FUN=kmeans, K.max=12, B=10)

【问题讨论】:

标签: r cluster-analysis k-means


【解决方案1】:

在 62 维时,由于维度诅咒,结果可能毫无意义。

k-means 进行最小 SSQ 分配,这在技术上等于最小化平方欧几里得距离。然而,众所周知,欧几里得距离不适用于高维数据。

【讨论】:

    【解决方案2】:

    如果您不知道要作为参数提供给 k-means 的聚类 k 的数量,那么可以通过三种方式自动找到它:

    • G-means 算法:它使用统计测试自动发现集群的数量,以决定是否将 k-means 中心一分为二。该算法采用分层方法来检测集群的数量,基于对数据子集遵循高斯分布(近似于事件的精确二项式分布的连续函数)的假设的统计检验,如果不是,则拆分集群.它从少量中心开始,比如只有一个集群 (k=1),然后算法将其拆分为两个中心 (k=2) 并再次拆分这两个中心中的每一个 (k=4),其中有四个中心全部的。如果 G-means 不接受这四个中心,那么答案是上一步:在这种情况下是两个中心 (k=2)。这是您的数据集将分成的集群数量。当您无法估计分组实例后将获得的集群数量时,G-means 非常有用。请注意,“k”参数的不方便选择可能会给您错误的结果。 g-means 的并行版本称为p-means。 G-均值来源: source 1 source 2 source 3

    • x-means:一种新算法,可有效搜索集群位置空间和集群数量,以优化贝叶斯信息准则 (BIC) 或 Akaike 信息准则 (AIC) 度量。这个版本的 k-means 找到数字 k 并且还加速了 k-means。

    • 在线 k-means 或 Streaming k-means:它允许通过扫描整个数据一次来执行 k-means,并自动找到最佳 k 数。 Spark 实现了它。

    【讨论】:

      【解决方案3】:

      这是来自 RBloggers。 https://www.r-bloggers.com/k-means-clustering-from-r-in-action/

      您可以执行以下操作:

      data(wine, package="rattle")
      head(wine)
      df <- scale(wine[-1])
      wssplot <- function(data, nc=15, seed=1234){
                 wss <- (nrow(data)-1)*sum(apply(data,2,var))
                 for (i in 2:nc){
                      set.seed(seed)
                      wss[i] <- sum(kmeans(data, centers=i)$withinss)}
                  plot(1:nc, wss, type="b", xlab="Number of Clusters",
                       ylab="Within groups sum of squares")}
      
       wssplot(df)  
      

      这将创建一个这样的情节。
      从中您可以选择 k 的值为 3 或 4。即

      当从 1 个集群移动到 3 个集群时,“组内平方和”明显下降。在三个集群之后,这种下降会下降,这表明 3 集群解决方案可能非常适合数据。

      但是就像 Anony-Mouse 指出的那样,维度诅咒的影响是因为 k 中使用了欧几里得距离。
      我希望这个答案能在一定程度上帮助到你。

      【讨论】:

        猜你喜欢
        • 2019-01-25
        • 1970-01-01
        • 2018-04-22
        • 2012-07-22
        • 2013-02-07
        • 2020-10-08
        • 1970-01-01
        • 2020-10-01
        • 2019-06-01
        相关资源
        最近更新 更多