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

📄 lnmf.m

📁 NMFs算法(带稀疏度约束的非负稀疏矩阵分解)用于实现基于人脸局部特征的人脸识别
💻 M
字号:
function lnmf( V, rdim, alpha, beta, fname, showflag )%% Check that we have non-negative dataif min(V(:))<0, error('Negative values in data!'); end% Globally rescale data to avoid potential overflow/underflowV = V/max(V(:));% Dimensionsvdim = size(V,1);samples = size(V,2);% Create initial matricesW = abs(randn(vdim,rdim));H = abs(randn(rdim,samples));% Make sure W has unit sum columns!W = W./(ones(vdim,1)*sum(W,1));% Initialize displaysif showflag,   figure(1); clf; % this will show the energies and sparsenesses   figure(2); clf; % this will show the objective function   drawnow;end% Calculate initial objectiveobjhistory = sum(sum((V.*log(V./(W*H))) - V + W*H)) + ...	 alpha*sum(sum(W'*W)) - beta*sum(diag(H*H'));timestarted = clock;% Start iterationiter = 0;while 1,    % Show progress    fprintf('[%d]: %.5f \n',iter,objhistory(end));            % Save every once in a while    if rem(iter,5)==0,	elapsed = etime(clock,timestarted);	fprintf('Saving...');	save(fname,'W','H','alpha','beta','iter','objhistory','elapsed');	fprintf('Done!\n');    end	    % Show stats    if showflag & (rem(iter,5)==0),	figure(1);	cursW = (sqrt(vdim)-(sum(W)./sqrt(sum(W.^2))))/(sqrt(vdim)-1);	cursH = (sqrt(samples)-(sum(H')./sqrt(sum(H'.^2))))/(sqrt(samples)-1);	subplot(3,1,1); bar(sqrt(sum(W.^2)).*sqrt(sum(H'.^2)));	subplot(3,1,2); bar(cursW);	subplot(3,1,3); bar(cursH);	if iter>1,	    figure(2);	    plot(objhistory(2:end));	end	drawnow;    end        % Update iteration count    iter = iter+1;            % Save old values    Wold = W;    Hold = H;    % Update rules (Matlab code by Stan Li)     VC = V./(W*H);    H = sqrt(H.*(W'*VC));    W = W.*(VC*H')./(repmat(sum(W,2),[1,rdim])+repmat(sum(H',1),[vdim,1]));    W = W./(ones(vdim,1)*sum(W,1));        % Calculate objective    newobj = sum(sum((V.*log(V./(W*H))) - V + W*H)) + ...	 alpha*sum(sum(W'*W)) - beta*sum(diag(H*H'));    objhistory = [objhistory newobj];    	        end

⌨️ 快捷键说明

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