#Example kmeans
dataset <- read.table("../data/C1.dat", head=TRUE)[,1:2]

#Scaling variables
dataset$x1 = scale(dataset$x1)
dataset$x2 = scale(dataset$x2)
n = nrow(dataset)
p = ncol(dataset)

#Specify number of clusters
K = 3
#Draw initial center points
set.seed(3454)
m = matrix(nrow=K,ncol=p)
for(j in 1:p)
 m[,j] = runif(K,min(dataset[,j],max(dataset[,j])))
eps = 0.01
more = TRUE
d = matrix(nrow=n,ncol=K)
while(more)
{
 #Calculate distance to centroids
 d = as.matrix(dist(rbind(as.matrix(dataset),m)))
 d = d[1:n,(n+1):(n+K)]
 #Allocate observations to closest centerpoint
 cl = apply(d,1,which.min)
 #Calculate new centroids
 m.old = m
 for(k in 1:K)
 for(j in 1:2)
 {
  m[k,j] = mean(dataset[cl==k,j])
 }
 show(m)
 #Sys.sleep(3)
 plot(dataset,col=cl,pch=cl,ask=T)
 points(m[,1],m[,2],pch=15+1:3,col=5,cex=2)
 more = max(abs(m-m.old))>eps
}

plot(dataset,col=cl,pch=cl)
points(m[,1],m[,2],pch=15+1:3,col=5,cex=2)

set.seed(3454)
m2 = matrix(nrow=K,ncol=2)
for(j in 1:2)
  m2[,j] = runif(K,min(dataset[,j],max(dataset[,j])))
res = kmeans(dataset,m2)

plot(dataset,col=res$cluster,pch=res$cluster)
points(res$centers[,1],res$centers[,2],pch=15+1:3,col=5,cex=2)


