📄 kmeans.m
字号:
% 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -