⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 k_average.m

📁 模式识别较全的讲解
💻 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 + -