vqlbg.m
来自「一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有」· M 代码 · 共 48 行
M
48 行
function [center, U] = vqLBG(data, codeBookSize, dispOpt, kmeansFcn)
% vqLBG: Vector quantization using LBG method of center splitting
% Usage: [center, U]=vq(data, codeBookSize, dispOpt)
% data : dataNum x dataDim.
% codeBookSize : codebook size or number of cluster centers (should be the power of 2)
% dispOpt: Option for displaying information during computation (Optional, default=0)
% kmeansFcn: K-means function employed in the iteration (Optional, default="vqKmeansMex")
% Roger Jang, 20030330
if nargin<1, selfdemo; return; end
if nargin<3, dispOpt=0; end
if nargin<4, kmeansFcn='vqKmeans'; end
% ====== Error checking
[dataDim, dataNum] = size(data);
% Initial Centers: mean of all data
center= mean(data,2);
if dispOpt
plot(data(1,:), data(2,:), 'b.');
centerH=line(center(1,:), center(2,:), 'color', 'r', 'marker', 'o', 'linestyle', 'none', 'linewidth', 2);
axis image
end;
% Do while-loop to increase center number till it is equal to or greater than codebook size.
maxLoopCount = 100;
centerNum = size(center,2);
while (centerNum<codeBookSize)
if dispOpt
% fprintf('Hit return to start center splitting...\n'); pause;
pause(1.0);
end
center=[center-eps, center+eps]; % Center splitting
centerNum=size(center,2);
[center, U, distortion] = feval(kmeansFcn, data, center, dispOpt); % VQ using K-means function
fprintf('No. of centers = %g, loop count = %g, distortion = %g\n', centerNum, length(distortion), distortion(end));
end
if dispOpt, vqDataPlot(data, center); end
% ====== Self demo
function selfdemo
data = dcdata(2)';
codeBookSize=2^5;
dispOpt=1;
kmeansFcn='vqKmeans';
codebook = feval(mfilename, data.input, codeBookSize, dispOpt, kmeansFcn);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?