CmeansFCM.docx

上传人:b****0 文档编号:9433486 上传时间:2023-05-19 格式:DOCX 页数:20 大小:25.59KB
下载 相关 举报
CmeansFCM.docx_第1页
第1页 / 共20页
CmeansFCM.docx_第2页
第2页 / 共20页
CmeansFCM.docx_第3页
第3页 / 共20页
CmeansFCM.docx_第4页
第4页 / 共20页
CmeansFCM.docx_第5页
第5页 / 共20页
CmeansFCM.docx_第6页
第6页 / 共20页
CmeansFCM.docx_第7页
第7页 / 共20页
CmeansFCM.docx_第8页
第8页 / 共20页
CmeansFCM.docx_第9页
第9页 / 共20页
CmeansFCM.docx_第10页
第10页 / 共20页
CmeansFCM.docx_第11页
第11页 / 共20页
CmeansFCM.docx_第12页
第12页 / 共20页
CmeansFCM.docx_第13页
第13页 / 共20页
CmeansFCM.docx_第14页
第14页 / 共20页
CmeansFCM.docx_第15页
第15页 / 共20页
CmeansFCM.docx_第16页
第16页 / 共20页
CmeansFCM.docx_第17页
第17页 / 共20页
CmeansFCM.docx_第18页
第18页 / 共20页
CmeansFCM.docx_第19页
第19页 / 共20页
CmeansFCM.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

CmeansFCM.docx

《CmeansFCM.docx》由会员分享,可在线阅读,更多相关《CmeansFCM.docx(20页珍藏版)》请在冰点文库上搜索。

CmeansFCM.docx

CmeansFCM

模式识别大作业报告

非监督模式识别:

对Iris数据进行C均值聚类和模糊C均值聚类

一、C均值聚类

ⅠC均值聚类概述

初始划分3个聚类,选定其初始中心分别为第1、51、101组数据。

第一次聚类采用近邻法进行聚类,并更新各聚类中心;之后对于每组数据求其与各聚类中心的平均距离,按照各样本与中心之间的误差平方和最小的方向进行聚类。

即若

2<

2时则将y分为第j类,否则分为第k类;分类后计算新的聚类中心,之后迭代重复以上两步骤直到聚类中心不再改变,停止迭代,完成聚类。

Ⅱ源代码

本程序采用MATLAB编写:

clear,closeall

%¶ÁÈ¡È«²¿Êý¾Ý

total=xlsread('C:

\Users\Administrator\Documents\data\total');

pa_cluster=total(:

1:

4);

%Ñ¡È¡¾ÛÀàÖÐÐļ°²ÎÊý¶¨Òå

m1=pa_cluster(1,:

);a1=zeros(1,4);

m2=pa_cluster(51,:

);a2=zeros(1,4);

m3=pa_cluster(101,:

);a3=zeros(1,4);

dis_cemtre=zeros(1,3);

e=0.0001;

%¾ÛÀ࿪ʼ

class1=zeros(150,4);

class2=zeros(150,4);

class3=zeros(150,4);

%µÚÒ»´Î¾ÛÀà

num=zeros(1,3);

fori=1:

150

dist=[(pa_cluster(i,:

)-m1)*(pa_cluster(i,:

)-m1)',(pa_cluster(i,:

)-m2)*(pa_cluster(i,:

)-m2)',(pa_cluster(i,:

)-m3)*(pa_cluster(i,:

)-m3)'];

if(dist

(1)<=dist

(2)&&dist

(1)<=dist(3))

num

(1)=num

(1)+1;

class1(num

(1),:

)=pa_cluster(i,:

);

elseif(dist

(2)

(1)&&dist

(2)

num

(2)=num

(2)+1;

class2(num

(2),:

)=pa_cluster(i,:

);

else

num(3)=num(3)+1;

class3(num(3),:

)=pa_cluster(i,:

);

end

end

%¸üоÛÀàÖÐÐÄ

a1=m1;a2=m2;a3=m3;

m1=mean(class1,1);m2=mean(class2,1);m3=mean(class3,1);

dis_centre=[(m1-a1)*(m1-a1)',(m2-a2)*(m2-a2)',(m3-a3)*(m3-a3)'];

%c¾ùÖµ¾ÛÀà

while(dis_centre

(1)>=e&&dis_centre

(2)>=e&&dis_centre(3)>=e)

dist=[(class1(i,:

)-m1)*(class1(i,:

)-m1)',(class1(i,:

)-m2)*(class1(i,:

)-m2)',(class1(i,:

)-m3)*(class1(i,:

)-m3)'];

forj=1:

num

(1)

if((num

(1)*dist

(1)/(num

(1)-1))>(num

(2)*dist

(2)/(num

(2)+1))&&(num

(2)*dist

(2)/(num

(2)+1))<(num(3)*dist(3)/num(3)+1))

class2(num

(2)+1,:

)=class1(j,:

);

class1(j,:

)=[];

num

(1)=num

(1)-1;num

(2)=num

(2)+1;

end

if((num

(1)*dist

(1)/(num

(1)-1))>(num

(2)*dist

(2)/(num

(2)+1))&&(num

(2)*dist

(2)/(num

(2)+1))>(num(3)*dist(3)/num(3)+1))

class3(num(3)+1,:

)=class1(j,:

);

class1(j,:

)=[];

num

(1)=num

(1)-1;num(3)=num(3)+1;

end

end

forj=1:

num

(2)

if((num

(2)*dist

(2)/(num

(2)-1))>(num

(1)*dist

(1)/(num

(1)+1))&&(num

(1)*dist

(1)/(num

(1)+1))<(num(3)*dist(3)/num(3)+1))

class1(num

(1)+1,:

)=class2(j,:

);

class2(j,:

)=[];

num

(1)=num

(1)+1;num

(2)=num

(2)-1;

end

if((num

(2)*dist

(2)/(num

(2)-1))>(num

(1)*dist

(1)/(num

(1)+1))&&(num

(1)*dist

(1)/(num

(1)+1))>(num(3)*dist(3)/num(3)+1))

class3(num(3)+1,:

)=class2(j,:

);

class2(j,:

)=[];

num

(2)=num

(2)-1;num(3)=num(3)+1;

end

end

forj=1:

num(3)

if((num(3)*dist(3)/(num(3)-1))>(num

(1)*dist

(1)/(num

(1)+1))&&(num

(1)*dist

(1)/(num

(1)+1))<(num

(2)*dist

(2)/num

(2)+1))

class1(num

(1)+1,:

)=class3(j,:

);

class3(j,:

)=[];

num

(1)=num

(1)+1;num(3)=num(3)-1;

end

if((num(3)*dist(3)/(num(3)-1))>(num

(1)*dist

(1)/(num

(1)+1))&&(num

(1)*dist

(1)/(num

(1)+1))>(num

(2)*dist

(2)/num

(2)+1))

class2(num(3)+1,:

)=class3(j,:

);

class3(j,:

)=[];

num

(2)=num

(2)+1;num(3)=num(3)-1;

end

end

a1=m1;a2=m2;a3=m3;

m1=mean(class1,1);m2=mean(class2,1);m3=mean(class3,1);

dis_centre=[(m1-a1)*(m1-a1)',(m2-a2)*(m2-a2)',(m3-a3)*(m3-a3)'];

end

class1(sum(class1,2)==0,:

)=[];

class2(sum(class2,2)==0,:

)=[];

class3(sum(class3,2)==0,:

)=[];

disp('thefirstclassis:

');

disp(class1);

disp('thesecondclassis:

');

disp(class2);

disp('thethirdclassis:

');

disp(class3);

disp(size(class1,1));

disp(size(class2,1));

disp(size(class3,1));

Ⅲ运行结果

>>cluster

thefirstclassis:

5.10003.50001.40000.2000

4.90003.00001.40000.2000

4.70003.20001.30000.2000

4.60003.10001.50000.2000

5.00003.60001.40000.2000

5.40003.90001.70000.4000

4.60003.40001.40000.3000

5.00003.40001.50000.2000

4.40002.90001.40000.2000

4.90003.10001.50000.1000

5.40003.70001.50000.2000

4.80003.40001.60000.2000

4.80003.00001.40000.1000

4.30003.00001.10000.1000

5.80004.00001.20000.2000

5.70004.40001.50000.4000

5.40003.90001.30000.4000

5.10003.50001.40000.3000

5.70003.80001.70000.3000

5.10003.80001.50000.3000

5.40003.40001.70000.2000

5.10003.70001.50000.4000

4.60003.60001.00000.2000

5.10003.30001.70000.5000

4.80003.40001.90000.2000

5.00003.00001.60000.2000

5.00003.40001.60000.4000

5.20003.50001.50000.2000

5.20003.40001.40000.2000

4.70003.20001.60000.2000

4.80003.10001.60000.2000

5.40003.40001.50000.4000

5.20004.10001.50000.1000

5.50004.20001.40000.2000

4.90003.10001.50000.1000

5.00003.20001.20000.2000

5.50003.50001.30000.2000

4.90003.10001.50000.1000

4.40003.00001.30000.2000

5.10003.40001.50000.2000

5.00003.50001.30000.3000

4.50002.30001.30000.3000

4.40003.20001.30000.2000

5.00003.50001.60000.6000

5.10003.80001.90000.4000

4.80003.00001.40000.3000

5.10003.80001.60000.2000

4.60003.20001.40000.2000

5.30003.70001.50000.2000

5.00003.30001.40000.2000

4.90002.40003.30001.0000

5.00002.30003.30001.0000

5.10002.50003.00001.1000

7.00003.20004.70001.4000

6.90003.10004.90001.5000

6.50002.80004.60001.5000

6.30003.30004.70001.6000

5.20002.70003.90001.4000

5.90003.00004.20001.5000

6.10002.90004.70001.4000

6.70003.10004.40001.4000

5.80002.70004.10001.0000

5.60002.50003.90001.1000

6.10002.80004.00001.3000

6.10002.80004.70001.2000

6.60003.00004.40001.4000

6.70003.00005.00001.7000

5.70002.60003.50001.0000

5.50002.40003.70001.0000

6.00002.70005.10001.6000

6.00003.40004.50001.6000

6.30002.30004.40001.3000

5.50002.50004.00001.3000

6.10003.00004.60001.4000

5.60002.70004.20001.3000

5.70002.90004.20001.3000

5.70002.80004.10001.3000

6.50003.20005.10002.0000

6.00002.20005.00001.5000

6.20002.80004.80001.8000

7.20003.00005.80001.6000

6.00003.00004.80001.8000

6.30002.50005.00001.9000

thesecondclassis:

6.40003.20004.50001.5000

5.50002.30004.00001.3000

5.70002.80004.50001.3000

6.60002.90004.60001.3000

5.00002.00003.50001.0000

6.00002.20004.00001.0000

5.60002.90003.60001.3000

5.60003.00004.50001.5000

6.20002.20004.50001.5000

5.90003.20004.80001.8000

6.30002.50004.90001.5000

6.40002.90004.30001.3000

6.80002.80004.80001.4000

6.00002.90004.50001.5000

5.50002.40003.80001.1000

5.80002.70003.90001.2000

5.40003.00004.50001.5000

6.70003.10004.70001.5000

5.60003.00004.10001.3000

5.50002.60004.40001.2000

5.80002.60004.00001.2000

5.70003.00004.20001.2000

6.20002.90004.30001.3000

4.90002.50004.50001.7000

6.40002.70005.30001.9000

6.30002.70004.90001.8000

6.10003.00004.90001.8000

6.30002.80005.10001.5000

6.90003.10005.10002.3000

6.50003.00005.20002.0000

thethirdclassis:

6.30003.30006.00002.5000

5.80002.70005.10001.9000

7.10003.00005.90002.1000

6.30002.90005.60001.8000

6.50003.00005.80002.2000

7.60003.00006.60002.1000

7.30002.90006.30001.8000

6.70002.50005.80001.8000

7.20003.60006.10002.5000

6.80003.00005.50002.1000

5.70002.50005.00002.0000

5.80002.80005.10002.4000

6.40003.20005.30002.3000

6.50003.00005.50001.8000

7.70003.80006.70002.2000

7.70002.60006.90002.3000

6.90003.20005.70002.3000

5.60002.80004.90002.0000

7.70002.80006.70002.0000

6.70003.30005.70002.1000

7.20003.20006.00001.8000

6.40002.80005.60002.1000

7.40002.80006.10001.9000

7.90003.80006.40002.0000

6.40002.80005.60002.2000

6.10002.60005.60001.4000

7.70003.00006.10002.3000

6.30003.40005.60002.4000

6.40003.10005.50001.8000

6.90003.10005.40002.1000

6.70003.10005.60002.4000

5.80002.70005.10001.9000

6.80003.20005.90002.3000

6.70003.30005.70002.5000

6.70003.00005.20002.3000

6.20003.40005.40002.3000

5.90003.00005.10001.8000

83

30

37

二、模糊C均值聚类

Ⅰ模糊C均值概述

仍然初始划分3个聚类,选定其初始中心分别为第1、51、101组数据。

参数b的值设为3。

重复以下两步:

1.用当前的聚类中心计算各样本对各中心的隶属度

2.用当前的隶属度更新各聚类中心

算法收敛的标准是

该算法收敛后,分类完成。

再进行去模糊化,即将样本隶属度值大的分到对应的类中。

Ⅱ源代码

该程序用MATLAB编写

clear,closeall

%¶ÁÈ¡È«²¿Êý¾Ý

total=xlsread('C:

\Users\Administrator\Documents\data\total');

pa_cluster=total(:

1:

4);

%Ñ¡È¡¾ÛÀàÖÐÐļ°²ÎÊý¶¨Òå

m1=pa_cluster(1,:

);

m2=pa_cluster(51,:

);

m3=pa_cluster(101,:

);

b=3;x=1/(b-1);

u=zeros(150,3);v=zeros(150,3);

e=0.0001;udis=1;

%Ä£ºý¾ÛÀà

while(udis>=e)

%¼ÆËãÁ¥Êô¶Èº¯Êý

fori=1:

150

dist=[(pa_cluster(i,:

)-m1)*(pa_cluster(i,:

)-m1)',(pa_cluster(i,:

)-m2)*(pa_cluster(i,:

)-m2)',(pa_cluster(i,:

)-m3)*(pa_cluster(i,:

)-m3)'];

u(i,1)=((1/dist

(1))^x)/(((1/dist

(1))^x)+((1/dist

(2))^x)+((1/dist

(2))^x));

u(i,2)=((1/dist

(2))^x)/(((1/dist

(1))^x)+((1/dist

(2))^x)+((1/dist

(2))^x));

u(i,3)=((1/dist(3))^x)/(((1/dist

(1))^x)+((1/dist

(2))^x)+((1/dist

(2))^x));

if(u(i,1)==0&&u(i,2)==0)

u(i,3)=1;

end

if(u(i,2)==0&&u(i,3)==0)

u(i,1)=1;

end

if(u(i,1)==0&&u(i,3)==0)

u(i,2)=1;

end

if(isnan(u(i,1)))

u(i,1)=1-u(i,2)-u(i,3);

end

if(isnan(u(i,2)))

u(i,2)=1-u(i,1)-u(i,3);

end

if(isnan(u(i,3)))

u(i,3)=1-u(i,2)-u(i,1);

end

end

dif=u-v;

udis=norm(dif);

%¸üоÛÀàÖÐÐÄ

su1=u(:

1).^b;

su2=u(:

2).^b;

su3=u(:

3).^b;

m1=(su1'*pa_cluster)/sum(su1,1);

m2=(su2'*pa_cluster)/sum(su2,1);

m3=(su3'*pa_cluster)/sum(su3,1);

v=u;

end

%ȥģºý»¯

class1=zeros(150,5);

class2=zeros(150,5);

class3=zeros(150,5);

forj=1:

150

if(u(j,1)>=u(j,2)&&u(j,1)>=u(j,3))

class1(j,:

)=total(j,:

);

end

if(u(j,2)>u(j,1)&&u(j,2)>u(j,3))

class2(j,:

)=total(j,:

);

end

if(u(j,3)>u(j,1)&&u(j,3)>u(j,2))

class3(j,:

)=total(j,:

);

end

end

%È·¶¨×îÖÕ¾ÛÀà½á¹û

class1(sum(class1,2)==0,:

)=[];

class2(sum(class2,2)==0,:

)=[];

class3(sum(class3,2)==0,:

)=[];

disp('thefirstclassis:

');

disp(class1);

disp('thesecondclassis:

');

disp(class2);

disp('thethirdclassis:

');

disp(class3);

disp(size(class1,1));

disp(size(class2,1));

disp(size(class3,1));

Ⅲ运行结果

行向量的最后一维是Iris数据原先分类的类标。

>>fuzzy_cmeans

thefirstclassis:

5.10003.50001.40000.20001.0000

4.90003.00001.40000.20001.0000

4.70003.20001.30000.20001.0000

4.60003.10001.500

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2