我有62列和181408行的矩阵,我打算使用k均值被群集。我会非常喜欢的是识别集群的最佳数目应该是什么样的方法。我已尝试使用实施clusGap
从集群包(下面再现的代码)的间隙统计技术,但是这在OS X产生与所述向量的大小(122 GB)几个错误消息和memory.limit
problems在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)
在62级的尺寸,其结果将可能是毫无意义的,由于维数的诅咒。
K均值确实最小SSQ分配,这在技术上等于最小化的平方欧几里德距离。然而,欧氏距离是已知不高维数据很好地工作。
如果你不知道的簇的数目k提供尽可能所以有三种方式automaticaly发现参数K-手段:
这是来自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表示正在使用欧几里德距离的事实。 我希望这个答案可以帮助你在一定程度上。