That kmeans returns an error if there is an empty cluster is a bit of a nuisance.

It should not be too difficult to get rid off the kmeans function for what you call "reclustering". You could write your own function that assigns
every point of the new data to the closest initial center. That should be
relatively easy and does the same thing, if I understand correctly what you want.

I don't comment on whether it makes sense what you attempt to do, which entirely depends on the aim of your analysis (and on what you mean by "cluster in the same way"), but an alternative could be to cluster the initial data by mclustBIC in library mclust and to use the resulting clusters as training data in mclustDA.

Cheers,
Christian


On Mon, 11 Jan 2010, t.peter.muel...@gmx.net wrote:

K-means recluster data with given cluster centers

Dear R user,

I have several large data sets. Over time additional new data sets will be 
created.
I want to cluster all the data in a similar/ identical way with the k-means 
algorithm.

With the first data set I will find my cluster centers and save the cluster 
centers to a file [1].
This first data set is huge, it is guarantied that cluster centers will 
converge.

Afterwards I load my cluster centers and cluster via k-means all other datasets 
with the same cluster centers [2].

I tried this but now I'm getting in the reclustering step following error 
message:
"Error: empty cluster: try a better set of initial centers"

That one of the clusters is empty (has no datapoint) should not be a problem. This can happen because the new data sets can be smaller. What am I doing wrong? Is there a other way to cluster new data in the same way like the old datasets?

Thanks
Peter


1: R code to find cluster center and save them to file
  #---INITIAL CLUSTERING TO FIND CLUSTER CENTERS
  # LOAD LIB
  library(cluster)

  # LOAD DATA
  data_unclean <- read.table("dataset1.dat")
  data.matrix<-as.matrix(data_unclean,"any")

  # CLUSTER
  Nclust <- 100 # amount cluster centers
  Imax <- 200 # amount of iteration for convergence of clustering
  set.seed(100) # set seed of random nr generator
  init <- sample(dim(data.matrix)[1], Nclust) # this is the initial Nclust 
prototypes
  km <- kmeans(data.matrix, centers=data.matrix[init,], iter.max=Imax)

  # WRITE OUT CLUSTER CENTERS
  km$centers # print cluster center (columns: dim component; rows: clusters)
  km$size # print amount of data in each cluster
  clusterCenters=km$centers
  save(file="clusterCenters.RData", list='clusterCenters') # Beispiel
  write.table(km$centers, file = "clusterCenters.dat", sep = ",", col.names= 
FALSE, row.names= FALSE)


2: R code to recluster new data
  #---RECLUSTER NEW DATA WITH GIVEN CLUSTER CENTERS
  # LOAD LIB, SET PARAMETER
  library(cluster)
  loopStart="0"
  loopEnd="10"

  # LOAD CLUSTER CENTER
  load("clusterCenters.RData") # load cluster centers

  # LOOP OVER TRAJ AND RECLUSTER THEM
  for(ii in loopStart:loopEnd){
       # DEFINE FILENAME
       #print(paste("test",ii,sep=""))
       filenameInput=paste("dataset",ii,"dat",sep="")
       filenameOutput=paste("dataset",ii,"datClusters",sep="")
       print(filenameInput)
       print(filenameOutput)

       # LOAD DATA
       data_unclean <- read.table(filenameInput)
       data.matrix<-as.matrix(data_unclean,"any")

       # RECLUSTER DATA
       kmRecluster <- kmeans(data.matrix, centers=clusterCenters, iter.max=1)
       kmRecluster$size

       # WRITE OUT CLUSTERS FOR EACH DATA
       write.table(kmRecluster$cluster, file = filenameOutput, sep = ",", 
col.names= FALSE, row.names= FALSE)
  }

--
Jetzt kostenlos herunterladen: Internet Explorer 8 und Mozilla Firefox 3.5 -
sicherer, schneller und einfacher! http://portal.gmx.net/de/go/chbrowser

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


*** --- ***
Christian Hennig
University College London, Department of Statistical Science
Gower St., London WC1E 6BT, phone +44 207 679 1698
chr...@stats.ucl.ac.uk, www.homepages.ucl.ac.uk/~ucakche

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to