聚类之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
- 下一篇: MATLAB2014b下运行cuda6.