K均值聚类

  • Meng511
    了解作者
  • matlab
    开发工具
  • 1.3KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 0
    下载次数
  • 2022-05-23 19:06
    上传日期
预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。
K均值.zip
  • K均值
  • XIN.m
    3.1KB
内容介绍
A=load('D:\IrisData.txt'); %导入数据 D1=A(1:50,:);%分别提取该数据中不同行的数据 D2=A(51:100,:); D3=A(101:150,:); K=2; %设定类别个数 eps = 1e-7; % 迭代结束的阈值 U1=zeros(4,200); U2=zeros(4,200);%存放各次迭代的聚类中心坐标 a=1; while(a<5) if a==1 Da=D1(1:50,:); N=50; elseif a==2 Da=D2(1:50,:); N=50; elseif a==3 Da=D3(1:50,:); N=50; else Da=A(1:150,:); N=150; end m=1; u1=Da(1,:);%把每一组数据的前一两行作为聚类的初始中心 u2=Da(2,:); U1(:,2)=u1;%把首先设的聚类中心放到了U1的第二列 U2(:,2)=u2; D=zeros(2,N); %初始化数据点与聚类中心的距离 end while(abs(U1(1,m)-U1(1,m+1))>eps||abs(U1(2,m)-U1(2,m+1))>eps||abs(U1(3,m)-U1(3,m+1)>eps||abs(U1(4,m)-U1(4,m+1))>eps||abs(U2(1,m)-U2(1,m+1))>eps||abs(U2(2,m)-U2(2,m+1))>eps||abs(U2(3,m)-U2(3,m+1))>eps||abs(U2(4,m)-U2(4,m+1))>eps)) m=m+1; %计算所有点到两个聚类中心的距离 for i=1:N D(1,i)=sqrt((Da(i,1)-U1(1,m))^2+(Da(i,2)-U1(2,m))^2+(Da(i,3)-U1(3,m))^2+(Da(i,4)-U1(4,m))^2);%计算距离 end for i = 1 : N D(2,i)=sqrt((Da(i,1)-U2(1,m))^2+(Da(i,2)-U2(2,m))^2+(Da(i,3)-U2(3,m))^2+(Da(i,4)-U2(4,m))^2); end X = zeros(4,N); % X用于存放第一类的数据点 Y = zeros(4,N); % Y用于存放第二类的数据点 for k = 1: N [MIN,index] = min(D(:,k)); %寻找D矩阵中的每一列的最小数及所在行数 if index == 1 % 点属于第一个聚类中心 X(1,k)=Da(k,1); X(2,k)=Da(k,2); X(3,k)=Da(k,3); X(4,k)=Da(k,4); else % 点属于第二个聚类中心 Y(1,k)=Da(k,1); Y(2,k)=Da(k,2); Y(3,k)=Da(k,3); Y(4,k)=Da(k,4); end end indexX = find(X(1,:) ~= 0); % 找出第一类中的点 indexY = find(Y(1,:) ~= 0); % 找出第二类中的点 U1(1,m+1)=mean(X(1,indexX));%更新聚类中心 U1(2,m+1)=mean(X(2,indexX)); U1(3,m+1)=mean(X(3,indexX)); U1(4,m+1)=mean(X(4,indexX)); U2(1,m+1)=mean(Y(1,indexY)); U2(2,m+1)=mean(Y(2,indexY)); U2(3,m+1)=mean(Y(3,indexY)); U2(4,m+1)=mean(Y(4,indexY));% 更新两个聚类中心 end center1(a,:)=[U1(1,m) U1(2,m) U1(3,m) U1(4,m)]; center2(a,:)=[U2(1,m) U2(2,m) U2(3,m) U2(4,m)]; %最后确定的中心 if a==1 fprintf('(1)1-50行聚类结果:'); fprintf('中心1为(%s %s %s %s)\n',center1(1,:)); fprintf('中心2为(%s %s %s %s)\n',center2(1,:)); fprintf('类1=(%s)\n',num2str(indexX)); fprintf('类2=(%s)\n',num2str(indexY)); elseif a==2 fprintf('(2)51-100行聚类结果:'); fprintf('中心1为(%s %s %s %s)\n',center1(2,:)); fprintf('中心2为(%s %s %s %s)\n',center2(2,:)); fprintf('类1=(%s)\n',num2str(indexX)); fprintf('类2=(%s)\n',num2str(indexY)); elseif a==3 fprintf('(3)101-150行聚类结果:'); fprintf('中心1为(%s %s %s %s)\n',center1(3,:)); fprintf('中心2为(%s %s %s %s)\n',center2(3,:)); fprintf('类1=(%s)\n',num2str(indexX)); fprintf('类2=(%s)\n',num2str(indexY)); else fprintf('(4)1-150行聚类结果:'); fprintf('中心1为(%s %s %s %s)\n',center1(4,:)); fprintf('中心2为(%s %s %s %s)\n',center2(4,:)); fprintf('类1=(%s)\n',num2str(indexX)); fprintf('类2=(%s)\n',num2str(indexY)); end a=a+1; End
评论
    相关推荐
    • 聚类
      聚类
    • 烧瓶聚类
      烧瓶聚类
    • 聚类
      Chipotle聚类挑战 语境 项目名称:Chipotle聚类挑战项目背景:BeCode,列日校区,人工智能/数据运营商训练营,2021年2月该项目的目标: 能够使用geopandas,matplotlib(和seaborn)在地图上可视化群集数据。 能够...
    • 聚类
      聚类
    • 聚类
      聚类
    • 邻里聚类
      Neighborhood-Clustering-main
    • 考试聚类
      考试聚类
    • 聚类
      聚类
    • 聚类测试
      聚类测试
    • libiconv-1.1.tar.gz
      字符集转换程序