📄 kmeans(chp2_2_2).m
字号:
% x1=[0,0];x2=[1,0];x3=[0,1];x4=[1,1];x5=[2,1];x6=[1,2];x7=[2,2];x8=[3,2];x9=[6,6];x10=[7,6];
% x11=[8,6];x12=[6,7];x13=[7,7];x14=[8,7];x15=[9,7];x16=[7,8];x17=[8,8];x18=[9,8];x19=[8,9];x20=[9,9];
%初始化工作
close all;
clear all;
%初始化变量
X=[0,0;1,0;0,1;1,1;2,1;1,2;2,2;3,2;6,6;7,6;8,6;6,7;7,7;8,7;9,7;7,8;8,8;9,8;8,9;9,9];%待分类的样本点
K=2; %分类数
k1=1;
k2=1;
s1=[]; %类1集合
s2=[]; %类2集合
change=1; %聚类中心发生变化的标志
n_sample=max(size(X));%样本数
%随机产生初始化聚类中心
index=1+round(rand(1,2)*10);
str=('the original center is :');
disp(str);
z1=X(index(1),:);
z2=X(index(2),:);
disp(z1)
disp(z2)
while(change)
k1=1;
k2=1;
%每个样本聚集到距离它最近的类别中
for m = 1 : n_sample
if(norm(X(m,:)-z1)<norm(X(m,:)-z2))
s1(k1)=m;
k1=k1+1;
else
s2(k2)=m;
k2=k2+1;
end
end
%重新计算聚类中心
newz1=mean(X(s1,:));
newz2=mean(X(s2,:));
str=('the changed center is :');
disp(str);
disp(newz1);
disp(newz2);
%判断中心是否变化,是则重新聚类
if(newz1==z1&newz2==z2)
change=0;
else
change=1;
z1=newz1;
z2=newz2;
s1=[];
s2=[];
end
end
%显示原样本分布图
subplot(2,1,1);
plot(X(:,1),X(:,2),'*');
title('原样本分布图')
hold;
%显示聚类的效果图
subplot(2,1,2);
plot(X(s1,1),X(s1,2),'r*');
hold;
plot(X(s2,1),X(s2,2),'g*');
title('聚类结果图(分类数为2)')
legend('聚类类集1','聚类类集2','Location','NorthWest');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -