📄 kmeans.m
字号:
clear all,
clc,
load TAB
P=TAB(:,1:7)';
%(1)
N=72;
K=6;
I0=500;
Z=zeros(size(P));
Z(:,1)=P(:,7);%1-12
Z(:,2)=P(:,13);%13-24
Z(:,3)=P(:,31);%25-36
Z(:,4)=P(:,40);%37-48
Z(:,5)=P(:,60);%49-60
Z(:,6)=P(:,70);%61-72
It=1;
%JC(1)=1;
%JC(2)=2;
while It<I0
%(2)
for i=1:K
for j=1:N
D(j,i)=norm(P(:,j)-Z(:,i));
end
end
for j=1:N
for k=1:K
if D(j,k)==min(D(j,:))
I(j)=k;
end
end
end
%(3)
M=zeros(K,1);
s=zeros(K,1); %bianliang s
for k=1:K
for j=1:N
if I(j)==k
M(k)=M(k)+1;
end
end
L=zeros(7,1);
for j=1:N
if I(j)==k
L=L+P(:,j);
end
end
if M(k)>0
Z(:,k)=L/M(k);
end
for j=1:N
if I(j)==k
s(k)=s(k)+(norm(P(:,j)-Z(:,k)))^2;
end
end
end
JC=sum(s);
%(4)
for k=1:K
for j=1:N
if I(j)==k %xj belongs to class k
r(k,k)=M(k)*(norm(P(:,j)-Z(:,k)))^2/(M(k)-1);
for h=1:K
if (h>k)||(h<k)
r(k,h)=M(k)*(norm(P(:,j)-Z(:,h)))^2/(M(k)+1);
end
end
for h=1:K
if (r(k,h)==min(r(k,:)))&&((h>k)||(h<k))
I(j)=h;
if r(k,h)<r(k,k)
Z(:,k)=Z(:,k)+(Z(:,k)-P(:,j))/(M(k)-1);
Z(:,h)=Z(:,h)+(Z(:,h)-P(:,j))/(M(h)+1);
JC=JC-(r(k,k)-r(k,h));
end
end
end
end
end
end
It=It+1;
end
%(5) 聚类结果:
RIGHT=0;
for i=1:12
if I(i)==1
RIGHT=RIGHT+1;
end
end
for i=13:24
if I(i)==2
RIGHT=RIGHT+1;
end
end
for i=25:36
if I(i)==3
RIGHT=RIGHT+1;
end
end
for i=37:48
if I(i)==4
RIGHT=RIGHT+1;
end
end
for i=49:60
if I(i)==5
RIGHT=RIGHT+1;
end
end
for i=61:72
if I(i)==6
RIGHT=RIGHT+1;
end
end
result=100*RIGHT/N
%remark:
%1.simulink result =77.7778 ,也有某次为result =91.6667
%2.初始聚类中心对聚类结果有很大影响
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -