无监督学习——K均值理论及matlab代码

1、k均值算法

给定样本集{,…,},对其进行簇划分C={, ,…,},最小化均方误差:

                             

       其中,

2、流程

(1)初始化簇中心

(2)簇划分

(3)求各自簇均值,作为新的簇中心

(4)判断是否有新的簇中心更新,如果有,则循环(2);如果无,则输出最终的簇中心和簇划分标签

3、matlab程序

function [label,c]=MyKMeansj(Data,k)
%Data 输入数据    m*n数据    m表示数据维   n表示特征维
%k       聚类数量
%label 聚类标签
%c       聚类中心

%% 初始化聚类中心
[m,n]=size(Data);
randam=randperm(m);
pos=randam(1:k);
c=Data(pos,:);%聚类中心
cNew=zeros(k,n);%新的聚类中心
label=zeros(m,1);%进行簇划分的标签标记
%%
iters=0;%查看更新了多少次
while 1
%% 簇划分
iters=iters+1;
clc;disp(iters);
Distance=zeros(m,k);
% repmat(Y', [1 m1])).^2)
for j=1:k%遍历所有测试样本,并根据与聚类中心的最小距离进行簇划分
    y=c(j,:);
    Distance(:,j)=(sum((Data-repmat(y, [m 1])).^2,2));%计算欧式距离的平方
end
[~,label]=min(Distance');
%% 寻找新的聚类中心
for i=1:k
    pos=find(label==i);
    cdata=Data(pos,:);
    cNew(i,:)=sum(cdata)/length(pos);    
end
%% 判断聚类中心是否有更新
num=length(find(cNew(:)~=c(:)));
if num==0%没有点不相同,就说明聚类中心更新之后和原中心一致
    break;
else
    c=cNew;
end
end
end
 

 

 

参考自周志华《机器学习》

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值