R 具有最小尺寸测度的K-均值算法变异

R 具有最小尺寸测度的K-均值算法变异,r,maps,cluster-analysis,k-means,R,Maps,Cluster Analysis,K Means,我正在寻找一些算法,比如k-均值算法,用于按距离将地图上的点分组为固定数量的组。 组的数量已经确定,但关键部分(至少对我来说)是要满足每个组的MOS之和应该在一定范围内(比如大于1)的标准。有什么办法可以做到这一点吗 ID MOS X Y 1 0.47 39.27846 -76.77101 2 0.43 39.22704 -76.70272 3 1.48 39.24719 -76.68485 4 0.15 39.25172

我正在寻找一些算法,比如k-均值算法,用于按距离将地图上的点分组为固定数量的组。 组的数量已经确定,但关键部分(至少对我来说)是要满足每个组的MOS之和应该在一定范围内(比如大于1)的标准。有什么办法可以做到这一点吗

ID MOS          X        Y

1 0.47   39.27846 -76.77101    
2 0.43   39.22704 -76.70272    
3 1.48   39.24719 -76.68485    
4 0.15   39.25172 -76.69729    
5 0.09   39.24341 -76.69884  

我对你的问题很感兴趣,但不确定你如何在分组算法中引入某种随机过程。如果您排列数据集(例如,行的顺序),kmeans算法似乎确实会给出不同的结果。我找到了这些信息。下面的脚本用一组随机数据演示了这一点。该图以黑色显示原始数据,然后通过排列(颜色)将一段绘制到每个簇的中心

因为我不确定MOS变量是如何定义的,所以我在数据帧中添加了一个随机变量,以说明如何查找满足给定条件的集群。计算每个簇的MOS总和,结果存储在MOS.sums对象中。为了重现有利的聚类,可以使用用于排列的随机种子值,该值存储在种子对象中。您可以看到排列结果是几个不同的聚类:

set.seed(33)
nsamples=500
nperms=10
nclusters=3

df <- data.frame(x=runif(nsamples), y=runif(nsamples), MOS=runif(nsamples))

MOS.sums <- matrix(NaN, nrow=nperms, ncol=nclusters)
colnames(MOS.sums) <- paste("cluster", 1:nclusters, sep=".")
rownames(MOS.sums) <- paste("perm", 1:nperms, sep=".")

seeds <- round(runif(nperms, min=1, max=10000))

    plot(df$x, df$y)
COL <- rainbow(nperms)
for(i in seq(nperms)){
    set.seed(seeds[i])
    ORD <- sample(nsamples)
    K <- kmeans(df[ORD,1:2], centers=nclusters)
    MOS.sums[i,] <- tapply(df$MOS[ORD], K$cluster, sum)
    segments(df$x[ORD], df$y[ORD], K$centers[K$cluster,1], K$centers[K$cluster,2], col=COL[i])
}
seeds
MOS.sums 
set.seed(33)
nsamples=500
nperms=10
nclusters=3
df