📄 k_average.m
字号:
function k_average
%%%%%%%%%%%%% K均值聚类%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 在command window中输出为每次迭代之后得到的聚类中心,以及最终得到的聚类中心
% 并用图来表示最后得到的聚类结果
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear;
x=[0 1 0 1 2 1 2 3 6 7 8 6 7 8 9 7 8 9 8 9;
0 0 1 1 1 2 2 2 6 6 6 7 7 7 7 8 8 8 9 9]; %样本数据
k=2; %聚类类别数
num=length(x);
label=zeros(num,1);
z=[];
for i=1:k
z=[z,x(:,i)]; %选取初始聚类中心
end
count=0;
while 1
count=count+1;
for i=1:num
label(i)=dist_min(z,x(:,i)); %按新的聚类中心对样本进行聚类
end
z_before=z;
z=zeros(2,k);
for i=1:num
z(:,label(i))=z(:,label(i))+x(:,i);
end
for i=1:k
z(:,i)=z(:,i)/length(find(label==i)); %计算聚类中心新的向量值
end
fprintf('The %dth iteration',count);
z
if z==z_before
break;
end
end
fprintf('The iteration is finished.\nThe result is:\n');
z
%绘出聚类结果
figure(1);
hold on;
for i=1:num;
if label(i)==1
plot(x(1,i),x(2,i),'b+');
else
plot(x(1,i),x(2,i),'rx');
end
end
hold off;
function y=dist_min(z,x);
for i=1:size(z,2)
if i==1
dist=norm(z(:,i)-x);
y=i;
else
if norm(z(:,i)-x)<dist
dist=norm(z(:,i)-x);
y=i;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -