k_means.m

来自「k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得」· M 代码 · 共 92 行

M
92
字号
clear all;
load iris_tr;
load iris_te;
H=1;
% m为要生成的族的数目
m=3;
% num(n)为第n类的记录条数
for n=1:m
    num(n)=0;
end
[rows,cols]=size(IRIS_training_data);
for I=1:rows
    if IRIS_training_data(I,6)==1
        IRIS_training_data(I,5)=2;
    end
    if IRIS_training_data(I,7)==1
        IRIS_training_data(I,5)=3;
    end
end
new_iris=IRIS_training_data(:,1:5);
% 对test进行观察式学习分类
test=IRIS_training_data(:,1:4);
%随机选择三条连续记录作为初始的三个类
for I=1:m
c(I)=floor(rand(1)*75)+1;
end
for J=1:m
   for I=1:4
     class{J}(I)=test(c(J),I);
   end
end
while H==1
for I=1:rows
        for K=1:m
          d(K)=sqrt((class{K}(1)-test(I,1))^2+(class{K}(2)-test(I,2))^2+(class{K}(3)-test(I,3))^2+(class{K}(4)-test(I,4))^2);
        end
          [y,t]=min(d);
          num(t)=num(t)+1;
          test(I,5)=t;
    for J=1:4
        last_class{t}=class{t};
        class{t}(J)=(test(I,J)+class{t}(J)*num(t))/(num(t)+1);
    end
end
% 判断结束条件是否满足
for  K=1:m
    d(K)=sqrt((last_class{K}(1)-class{K}(1))^2+(last_class{K}(2)-class{K}(2))^2+(last_class{K}(3)-class{K}(3))^2+(last_class{K}(4)-class{K}(4))^2);
end
[y,t]=max(d);
if y<0.0001;
    break;
end
end
% 与实际的分类对比计算出预测的正确率
for I=1:m
    class11(I)=0;
    class21(I)=0;
    class31(I)=0;
end
for I=1:3:rows
    if test(I,5)==1
        class11(1)=class11(1)+1;
    elseif test(I,5)==2
        class11(2)=class11(2)+1;
    else class11(3)=class11(3)+1;
    end
       [right_num,t]=max(class11);
   end
   for I=2:3:rows
    if test(I,5)==1
        class21(1)=class21(1)+1;
    elseif test(I,5)==2
        class21(2)=class21(2)+1;
    else class21(3)=class21(3)+1;
    end
end
right_num=right_num+max(class21);
 for I=3:3:rows
    if test(I,5)==1
        class31(1)=class31(1)+1;
    elseif test(I,5)==2
        class31(2)=class31(2)+1;
    else class31(3)=class31(3)+1;
    end
end 
right_num=right_num+max(class31);
right_num=(right_num/rows)*100;
disp(sprintf('利用k_means给iris数据集分类的正确率为:%d%%',right_num));


    
     

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?