⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vqlbg_b.m

📁 一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有用,谢谢支持
💻 M
字号:
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

%	Roger Jang, 20030330

if nargin==0, selfdemo; return; end;
if nargin<3, dispOpt=0; end;
if nargin<4, kmeansFcn='vqKmeansMex';

% ====== 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;
	end
	center=[center-eps, center+eps];
	centerNum = size(center,2);   
	prevDistortion = realmax;
	for i = 1:maxLoopCount
		[center, distortion, U] = vqUpdateCenter(center, data);
		if(abs((prevDistortion-distortion)/prevDistortion) < eps)
			break;
		else
			prevDistortion = distortion;
		end
		if dispOpt
			set(centerH, 'xdata', center(1,:), 'ydata', center(2,:));
			drawnow;
		end
	end;
	fprintf('No. of centers = %g, loop count = %g, distortion = %g\n' , centerNum, i, distortion);   
end
if dispOpt, vqPlotResult(data, center, U); end

% ====== Self demo
function selfdemo
colordef black
data = dcdata(2)';
codeBookSize=2^4;
dispOpt=1;
codebook = feval(mfilename, data, codeBookSize, dispOpt);

⌨️ 快捷键说明

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