改正下列代码使得新的代码可以更改初始聚类中心和类别数目clear all % x=[0.5;0.5 1 ;0.5 1;0 1;1 5;5 6;5.5 6;6 7;0 6;0.5 7;-1 8;-0.5]; plot(x,'.'); %取初值 m1=[0,0];m2=[0,0]; m12=[0,0];m22=[1,0]; while (sum(m1==m12)+sum(m2==m22)<4) m1=m12;m2=m22; s1=[];s2=[]; for i=1:11 norm1=norm([x(i,1),x(i,2)]-m1); norm2=norm([x(i,1),x(i,2)]-m2); if norm1>norm2 s2=[s2,i]; else s1=[s1,i]; end end m12=1/length(s1)*[sum(x(s1,1)),sum(x(s1,2))]; m22=1/length(s2)*[sum(x(s2,1)),sum(x(s2,2))]; end figure; plot(x(s1,1),x(s1,2),'*',x(s2,1),x(s2,2),'o');legend('类1','类2');
时间: 2023-09-10 21:15:38 浏览: 75
以下是修改后的代码,可以更改初始聚类中心和类别数目:
```
clear all
x=[0.5;0.5 1 ;0.5 1;0 1;1 5;5 6;5.5 6;6 7;0 6;0.5 7;-1 8;-0.5];
plot(x,'.'); % 取初值
% 更改初始聚类中心和类别数目
k = 2; % 类别数目
centers = [-1, 8; 5.5, 6]; % 初始聚类中心
m1=[0,0];
m2=[0,0];
m12=[0,0];
m22=[1,0];
while (sum(m1==m12)+sum(m2==m22)<4)
m1=m12;m2=m22;
s1=[];s2=[];
for i=1:size(x,1)
norm1=norm([x(i,1),x(i,2)]-centers(1,:));
norm2=norm([x(i,1),x(i,2)]-centers(2,:));
if norm1>norm2
s2=[s2,i];
else
s1=[s1,i];
end
end
m12=1/length(s1)*[sum(x(s1,1)),sum(x(s1,2))];
m22=1/length(s2)*[sum(x(s2,1)),sum(x(s2,2))];
end
figure;
plot(x(s1,1),x(s1,2),'*',x(s2,1),x(s2,2),'o');
legend('类1','类2');
```
其中,`k`表示聚类的类别数目,`centers`表示初始聚类中心点的坐标。你可以根据需要修改这些参数,然后运行代码即可得到新的聚类结果。
阅读全文