# K - means cluster always landing right on top of whole dataset mean

I have a so so sized data set - 30 000 observations. I would like to run K-means on them but to restrict the center(mean) of the data. This is, I would like to push the clusters away from this mean. As I have noticed that independantly of the # of clusters, one ends up landing right on top of the mean of all the variables, like a smaller version of the whole data set. Is there a way to restrict K-means to not behave this way? By the way I have two different ways to initialize cluster centers, random starting points and means of random samples of the data. I run each 500 times and the solution seems stable enough but maybe k-means++ would have a different outcome? I wouldnt think so... thank you in advanced reader.

• I may be a bit off-topic, but why can you not accept a cluster that happens to land at the overall mean? Is it known or obvious that there is no cluster there and it's somehow an artifact of the algorithm? – Wayne Jul 6 '12 at 19:26
• I can totally accept it as it clearly reflects a pattern in the data but I am doint this for someone else and "he" wants to see what happens if we try this. Is it is even possible. Greetings. – JEquihua Jul 6 '12 at 20:09
• The next question would be, what program are you using to do K-means? R, SAS, Stata, SPSS? Each might offer different initialization options that might help you. (In R's default kmeans, for example, you can manually specify the initial cluster centers. I doubt that you can keep a center from migrating where you don't want it, but there may be other R implementations.) – Wayne Jul 6 '12 at 20:40
• Yes, I'm using R and I have used the initializations I described. But I would still like to "force" it, I don't know... force it out of the "center" or, restrict it to not be able to converge there; I'm not entirely sure it makes sense. – JEquihua Jul 7 '12 at 0:26

You could also look at flexclust and its kcca, or really dig deep into the mclust or fps packages and roll your own.
Or you might abandon k-means clustering and use something else. R has a whole boatload of other methods, but I'll point out that flexclust's cclust has a Neural Gas clustering option. I have always liked Neural Gas, if only because it's a cool name. No guarantee that a different clustering algorithm will work better then k-means, but it's worth a try.