4

マップ上のポイントを距離ごとに固定数のグループにグループ化するための k-means などのアルゴリズムを探しています。グループの数はすでに決まっていますが、(少なくとも私にとっては)トリックの部分は、各グループの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  
4

1 に答える 1

3

私はあなたの質問に興味をそそられましたが、ある種のランダムなプロセスをグループ化アルゴリズムに導入する方法がわかりませんでした. データセットを並べ替えた場合 (行の順序など)、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 

ここに画像の説明を入力

于 2012-06-19T09:54:26.147 に答える