聚类算法

实验4 聚类算法

一、实验目的

(1)理解聚类算法的基本原理。
(2)掌握kmeans聚类算法的原理与实现。

二、实验内容

1、数据见data.mat,编程实现K means算法代码K_MeansMt,并写出详细注释。

测试代码如下:

load 'data.mat';
[u re]=K_MeansMt(data,3);  %最后产生簇标号 re 
[m n]=size(re);


%最后显示聚类后的数据


figure;
hold on;
for i=1:m 
    if re(i)==1   
         plot(data(i,1),data(i,2),'ro'); 
    elseif re(i)==2
         plot(data(i,1),data(i,2),'go'); 
    else 
         plot(data(i,1),data(i,2),'bo'); 
    end
end
grid on;

(将执行正确的roc_plot函数代码粘贴在此处,核心代码要求有注释)

function [u clusterID]=K_MeansMt(data,K)
[m n]=size(data);
ma=zeros(1,n);
mi=zeros(1,n);
u=zeros(K,n);
%随机初始化出三个初始质心
for i=1:n
    ma(i)=max(data(:,i));
    mi(i)=min(data(:,i));
    for j=1:K
        u(j,i)=mi(i)+(ma(i)-mi(i))*rand();
    end
end
%循环
while 1
    %求出个点到三个质心的距离只差
    pre_u=u;
    coordinate_difference{m,K}=[];
    for i=1:m
        for j=1:K
            coordinate_difference{i,j}=data(i,:)-u(j,:);
        end
    end
    Dist=ones(m,K)*-1;
    for i=1:m
        c=zeros(1,K);
        for j=1:K
            c(j)=norm(coordinate_difference{i,j});%求各点到质心的距离
        end
        [cmin index]=min(c);%找出该点到三个质心距离最近打得点
        Dist(i,index)=norm(coordinate_difference{i,index});%计算距离值
    end
    for i=1:K
        ind=find(Dist(:,i)>=0);
        u(i,:)=mean(data(ind,:))%求平均
    end
    if norm(pre_u-u)<0.1
        break;
    end
end
clusterID=[];
for i=1:m
    dist=[];
    for j=1:K
        dist=[dist norm(data(i,:)-u(j,:))];
       
    end
    [x index] = min(dist);
    clusterID=[clusterID;index];
end
        

    
    



end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值