具有大的数据集确定为簇的最优数量的k-means

问题描述 投票:2回答:3

我有62列和181408行的矩阵,我打算使用k均值被群集。我会非常喜欢的是识别集群的最佳数目应该是什么样的方法。我已尝试使用实施clusGap从集群包(下面再现的代码)的间隙统计技术,但是这在OS X产生与所述向量的大小(122 GB)几个错误消息和memory.limitproblems在Windows和一个“Error in dist(xs) : negative length vectors are not allowed”有没有人有技术,将在确定与大型数据集簇的最佳数量的工作有什么建议?或者,如何让我的代码功能(并且不花费数天才能完成)?谢谢。

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
3个回答
1
投票

在62级的尺寸,其结果将可能是毫无意义的,由于维数的诅咒。

K均值确实最小SSQ分配,这在技术上等于最小化的平方欧几里德距离。然而,欧氏距离是已知不高维数据很好地工作。


1
投票

如果你不知道的簇的数目k提供尽可能所以有三种方式automaticaly发现参数K-手段:

  • G-装置algortithm:它自动发现使用统计测试簇的数目来决定是否一个k均值中心分成两个。该算法需要一个分层方法来检测聚类的数量,根据统计测试该数据的子集如下的高斯分布(连续函数近似事件的确切二项式分布)的假设,如果没有它将该簇。它以一个小数目中心,说只有一个簇(K = 1),则算法分割成两个中心(K = 2),并再次将每个这两个中心的(K = 4),具有四个在中心总。如果G-手段不接受这四个中心那么答案是上一步骤:在该情况下(K = 2)两个中心。这是集群数据集将分为数。 G-手段,当你不具备集群分组的情况后,你会得到的数量的估计是非常有用的。请注意,不方便选择为“K”参数可能给你错误的结果。的G-手段并行版本称为p-means。 G-指来源:source 1 source 2 source 3
  • x-means:一种新的算法能够有效地,搜索簇位置和群集的数量的空间来优化贝叶斯信息准则(BIC)或赤池信息量准则(AIC)量度。此的k均值版本发现的数目k和也加速k-均值。
  • 在线k均值或串流k均值:它允许通过一次扫描整个数据执行k均值和它发现automaticaly k的最优数量。星火实现它。

0
投票

这是来自R博客。 qazxsw POI

你可以做到以下几点:

https://www.r-bloggers.com/k-means-clustering-from-r-in-action/

这将创建一个这样的情节。 从此,你可以选择k的值是3或4,即 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)

有1至3个集群移动时是一个明显的下降“基团内的平方和的”。后三个簇,这种减少脱落,这表明3-簇溶液可以是良好拟合该数据。

但是,像Anony鼠指出,维数灾难影响归因于在k表示正在使用欧几里德距离的事实。 我希望这个答案可以帮助你在一定程度上。

© www.soinside.com 2019 - 2024. All rights reserved.