2 つの異なるクラスタリング手法を比較するモンテカルロ シミュレーションを実行しようとしています。次のコードは、ランダム クラスタリングに従ってデータセットを生成し、2 つのクラスタリング手法 (kmeans とスパース k 平均) を適用します。
私の問題は、これら 3 つの手法がクラスターに異なるラベルを使用していることです。たとえば、私がクラスター 1 と呼んでいるものは、kmeans はそれをクラスター 2 と呼び、スパース k 平均はそれをクラスター 3 と呼ぶかもしれません。ラベルが一致する場合もあれば、一致しない場合もあります。
これらのラベルを「標準化」する方法を誰かが提供できるので、毎回手動でラベル付けの違いを解決する必要なく、シミュレーションを n 回繰り返し実行できますか?
私のコード:
library(sparcl)
library(flexclust)
x.generate=function(n,p,q,mu){
c=sample(c(1,2,3),n,replace=TRUE)
x=matrix(rnorm(p*n),nrow=n)
for(i in 1:n){
if(c[i]==1){
for(j in 1:q){
x[i,j]=rnorm(1,mu,1)
}
}
if(c[i]==2){
for(j in 1:q){
x[i,j]=rnorm(1,-mu,1)
}
}
}
return(list('sample'=x,'clusters'=c))
}
x=x.generate(20,50,50,1)
w=KMeansSparseCluster.permute(x$sample,K=3,silent=TRUE)
kms.out = KMeansSparseCluster(x$sample,K=3,wbounds=w$bestw,silent=TRUE)
km.out = kmeans(x$sample,3)
tabs=table(x$clusters,kms.out$Cs)
tab=table(x$clusters,km.out$cluster)
CER=1-randIndex(tab)
x$clusters、km.out$cluster、kms.out$Cs の出力例
> x$clusters
[1] 3 2 2 2 1 1 2 2 3 2 1 1 3 1 1 3 2 2 3 1
> km.out$cluster
[1] 3 1 1 1 2 2 1 1 3 1 2 2 3 2 2 3 1 1 3 2
> km.out$Cs
[1] 1 2 2 2 3 3 2 2 1 2 3 3 1 3 3 1 2 2 1 3