資源描述:
《matlab實(shí)現(xiàn)Kmeans聚類算法.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、kmeans函數(shù):輸入為類別數(shù)量k和數(shù)據(jù)矩陣A;輸出為聚類結(jié)果A,和迭代次數(shù),并將聚類結(jié)果數(shù)據(jù)以excel形式保存在工作路徑下functionkm(k,A)%函數(shù)名里不要出現(xiàn)“-”warningoff[n,p]=size(A);%輸入數(shù)據(jù)有n個樣本,p個屬性cid=ones(k,p+1);%聚類中心組成k行p列的矩陣,k表示第幾類,p是屬性%A(:,p+1)=100;A(:,p+1)=0;fori=1:k%cid(i,:)=A(i,:);%直接取前三個元祖作為聚類中心m=i*floor(n/k)-f
2、loor(rand(1,1)*(n/k))cid(i,:)=A(m,:);cid;endAsum=0;Csum2=NaN;flags=1;times=1;whileflagsflags=0;times=times+1;%計算每個向量到聚類中心的歐氏距離fori=1:nforj=1:kdist(i,j)=sqrt(sum((A(i,:)-cid(j,:)).^2));%歐氏距離end%A(i,p+1)=min(dist(i,:));%與中心的最小距離[x,y]=find(dist(i,:)==min(
3、dist(i,:)));[c,d]=size(find(y==A(i,p+1)));ifc==0%說明聚類中心變了flags=flags+1;A(i,p+1)=y(1,1);elsecontinue;endendiflagsforj=1:kAsum=0;[r,c]=find(A(:,p+1)==j);cid(j,:)=mean(A(r,:),1);form=1:length(r)Asum=Asum+sqrt(sum((A(r(m),:)-cid(j,:)).^2));endCsum(1,j)=Asu
4、m;endsum(Csum(1,:))%ifsum(Csum(1,:))>Csum2%break;%endCsum2=sum(Csum(1,:));Csum;cid;%得到新的聚類中心endtimesdisplay('A矩陣,最后一列是所屬類別');Aforj=1:k[a,b]=size(find(A(:,p+1)==j));numK(j)=a;endnumKtimesxlswrite('data.xls',A);%把矩陣A寫到excel文件中,保存在工作路徑下display('數(shù)據(jù)已保存為exce
5、l格式');