kmeans.m

来自「量化程序」· M 代码 · 共 65 行

M
65
字号
% Scalar Quantizer using the Generalized Loyd-Max algorithm (K-Means)

clear all;
close all;


 % Your data 
 yt=[-1.2114 -0.0145 0.8306 0.5607 0.6279 0.5675 0.2693 1.6014 1.0359 0.8131 1.3292 0.9818 0.6266 -0.1455 0.1053 -0.8704 -0.1103];
 y=sort(yt);

%Number of quantizer levels (centroids)
levels=4;

%Number of iterations
max_iter=20;

%Mean square error
mse=zeros(1,max_iter);
qlevel=zeros(max_iter+1,levels); %This vector holds the centroids generated at each iteration
C=zeros(levels, length(y));

pad=floor(length(y)/levels);
ind=1;
for lev=1:levels
    C(lev,:)=[y(ind:ind+pad-1),zeros(1,length(y)-pad)];
    ind=ind+pad;
end



   for k=1:levels
      [x,ind2]=find(C(k,:)~=0);
      qlevel(1,k)=sum(C(k,:))/length(ind2);
    end

for iter=1:max_iter

   for k=1:levels                 
      [x,ind2]=find(C(k,:)~=0);
      mse(iter)=mse(iter)+sum((C(k,1:length(ind2))-qlevel(iter,k)*ones(1,length(ind2))).^2 )  ;
      qlevel(iter+1,k)=sum(C(k,:))/length(ind2);
    end
    cnt=zeros(1,levels);
    for len=1:length(y)
    
        for k=1:levels
          dist(k)=(y(len)-qlevel(iter+1,k))^2;
        end        
        [x,ind]=min(dist);

        cnt(ind)=cnt(ind)+1;
        C(ind,cnt(ind))=y(len);
        C(ind,cnt(ind)+1:length(y))=zeros(1,length(y)-cnt(ind));
    end%len
    
end%iter


    mse=mse./length(y);
    figure(1);
    stem(1:iter,mse);
    title('Mean Square error Vs. Iterations for the K-means algorithm');
    xlabel('iterations');
    ylabel('MSE');
    

⌨️ 快捷键说明

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