📄 cmeans11.m
字号:
clear;clc;clf;%CMEANS Summary of this function goes here% Detailed explanation goes here[a1,a2,a3,a4]=textread('男女学生数据\StudentsData.txt','%f%f%f%f');A=[a1,a2,a3,a4];Member=[a1];TestSet.X=[a3,a4];c.num=0;c1=TestSet.X(1,:);%c2=TestSet.X(2,:);N=size(TestSet.X,1);d=size(TestSet.X,2);dis=0;for i=1:N dd=0; for j=1:d dd=dd+(c1(1,j)-TestSet.X(i,j))^2; end if dd>dis dis=dd; c2=TestSet.X(i,:); t=i; endend%Member(t);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初次划分t1=0;t2=0;for i=1:N d1=0; d2=0; for j=1:d d1=d1+(c1(1,j)-TestSet.X(i,j))^2; d2=d2+(c2(1,j)-TestSet.X(i,j))^2; end if d1>d2 t2=t2+1; Member2(t2,1)=Member(i); setc2(t2,:)=TestSet.X(i,:); else t1=t1+1; Member1(t1,1)=Member(i); setc1(t1,:)=TestSet.X(i,:); endendMember1;Member2;setc2;setc1;t1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%聚类均值%for i=1:d m1=sum(setc1)/t1;%end%for i=1:d m2=sum(setc2)/t2;%endm1m2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%准则函数值J1=0;J2=0;for i=1:t1 J1=J1+(setc1(i,:)-m1(1,:))*(setc1(i,:)-m1(1,:))';endfor i=1:t2 J2=J2+(setc2(i,:)-m2(1,:))*(setc2(i,:)-m2(1,:))';endJe=J1+J2delta=1000;Je1=0;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%循环划分while delta>0.01 nt2=1; nt1=1;for i=1:t1 p1=(setc1(i,:)-m1(1,:))*(setc1(i,:)-m1(1,:))'*t1/(t1-1); p2=(setc1(i,:)-m2(1,:))*(setc1(i,:)-m2(1,:))'*t2/(t2+1); if p1>p2 tempsetc2(nt2,:)=setc1(i,:); nt2=nt2+1; else tempsetc1(nt1,:)=setc1(i,:); nt1=nt1+1; endendfor i=1:t2 p1=(setc2(i,:)-m1(1,:))*(setc2(i,:)-m1(1,:))'*t1/(t1+1); p2=(setc2(i,:)-m2(1,:))*(setc2(i,:)-m2(1,:))'*t2/(t2-1); if p1>p2 tempsetc2(nt2,:)=setc2(i,:); nt2=nt2+1; else tempsetc1(nt1,:)=setc2(i,:); nt1=nt1+1; endendsetc1=tempsetc1;setc2=tempsetc2;t1=nt1-1;t2=nt2-1;clear tempsetc1*%=zeros(100,2);clear tempsetc2*%=zeros(100,2);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%重新计算 m1=sum(setc1)/t1; m2=sum(setc2)/t2;for i=1:t1 J1=J1+(setc1(i,:)-m1(1,:))*(setc1(i,:)-m1(1,:))';endfor i=1:t2 J2=J2+(setc2(i,:)-m2(1,:))*(setc2(i,:)-m2(1,:))';endJe1=J1+J2;delta=abs(Je-Je1)/Je;Je=Je1;endsetc1setc2Je1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求错分率t3=0;for i=1:t1 for j=1:N if (setc1(i,1)==a3(j)&&setc1(i,2)==a4(j)) if a2(j)==-1 t3=t3+1; setc3(t3,:)=setc1(i,:); end end endendfor i=1:t2 for j=1:N if (setc2(i,1)==a3(j)&&setc2(i,2)==a4(j)) if a2(j)==1 t3=t3+1; setc3(t3,:)=setc2(i,:); end end end endsetc3e=t3/Nplot(setc1(:,1),setc1(:,2),'+',setc2(:,1),setc2(:,2),'o',setc3(:,1),setc3(:,2),'x')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -