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

📄 kmeans(chp2_2_2).m

📁 kmeans 算法的实现
💻 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 + -