聚类之K-means均值聚类
生活随笔
收集整理的這篇文章主要介紹了
聚类之K-means均值聚类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
K-means均值聚類是先行選擇若干個樣本點作為聚類中心,再按某種聚類準則(通常采用最小距離原則)使各樣本點向各個中心聚集,從而得到初始分類,然后,判斷初始分類是否合理,如果不合理,就修改分類,......,以此反復進行修改聚類的迭代運算,直到合理為止。算法主要參照了蔡元龍老師的《模式識別》一書,matlab程序編寫:
%Programed by Lu Qi,University of Chinese Academy of Sciences %my email:qqlu1992@gmail.com clear all clc train_x=[0 3 1 2 0;1 3 0 1 0;3 3 0 0 1;1 1 0 2 0;3 2 1 2 1;4 1 1 1 0]; [pars.num_train,pars.length]=size(train_x);%num_train代表樣本的數量,length代表樣本的維數 pars.num_cluster=2; initial=randperm(6); pars.iter=1; initial_point=initial(1:pars.num_cluster); pars.z{pars.iter}=train_x(initial_point,:); while 1for i=1:pars.num_trainfor j=1:pars.num_clusterd(i,j)=norm(train_x(i,:)-pars.z{pars.iter}(j,:));endend[min_d,index]=min(d,[],2);%求相同聚類樣本的標號for i=1:pars.num_trainfor j=1:pars.num_clusterif (index(i))==jg(j,i)=[;i];endendendpars.iter=pars.iter+1;%找每一類中不等于0的數for j=1:pars.num_clustertemp=find(g(j,:));pars.z{pars.iter}(j,:)=sum(train_x(temp,:))/(length(temp));endif pars.z{pars.iter}==pars.z{pars.iter-1}break;end end for j=1:pars.num_clusterfprintf('the %d th cluster centre is\n',j);fprintf('%7.4f',pars.z{end}(j,:))fprintf('\n'); end
總結
以上是生活随笔為你收集整理的聚类之K-means均值聚类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聚类之hierachical clust
- 下一篇: 基于adaboost的人脸检测方法