function [Y,y]=kmeans(m,k,isRand)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%kMeansCluster-Simple k-means clustering algorithm
%Input:
%m-required,maxtrix data
%k-number of groups
%isRand -optional,if using random initialzation isRand=1,otherwise input
%any number(default),it will assign the first k data as initial centriods.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin<3
isRand=0;
end
if nargin<2
k=1;
end
[maxRow,maxCol]=size(m);
Y=zeros(k,maxCol);
if maxRow<=k
y=[m,1:maxRow]
end
%initial the values of centoid
if isRand
p=randperm(size(m,1));
for i=1:k
c(i,:)=m(p(i),:);
end
else
for i=1:k
c(i,:)=m(i,:);
end
end
temp=zeros(maxRow,1); %initial as zero vector
while 1
d=EuclideanDistance(m,c); %calculate objects-centrid distances
[z,g]=min(d,[],2); %find group maxtix g
if g==temp
break; %stop the interation
else
temp=g; %copy graup maxtrix to temporary variable
end
for i=1:k
f=find(g==i);
if f %only compute centroid if it is not emmpty
c(i,:)=mean(m(find(g==i),:),1);
end
end
end
Y=c;
y=[m,g];
end