您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > matlab > NMF Matlab
非负矩阵分解关键词:非负矩阵分解NMFMatlab代码矩阵分解是实现大规模数据处理与分析的一种有效工具.非负矩阵分解(non-negativematrixfactorization,NMF)算法是在矩阵中所有元素均为非负的条件下对其实现的非负分解,这为矩阵分解提供了一种新的思路.非负矩阵分解方法在智能信息处理和模式识别研究领域具有十分重要的应用意义.本文介绍非负矩阵分解的基本思想和一些最新的研究成果,结合研究工作讨论在概率模型的框架下实现非负矩阵分解的目标函数和相应的算法,以及非负矩阵分解与知觉过程信息处理的关系,针对模式识别的实际问题给出具体的非负矩阵分解的应用实例,并提出非负矩阵分解及其应用中有待进一步研究的新问题。function[WH]=nmf(V,r,maxiter);%%--------------------------------------------------------------------%%%Function:非负矩阵分解(nonnegativematrixfactorization)%Argument:%V:图像矩阵%r:rankforthefactorization%maxiter:maximumnumberofiterations%%--------------------------------------------------------------------%%%start_time=cputime;%savestarttimecloseall;clearall;ImShowOn=1;%1最后显示结果0最后不显示结果ifnargin~=3%设置默认值disp'Usage:[WH]=nmf(V,r,maxiter)';disp'Copyright(C)=LoadImage();r=input('Chooseyourownrankforthefactorization[49]:');ifisempty(r)r=49;endmaxiter=input('Choosethemaximumnumberofiterations[100]:');ifisempty(maxiter)maxiter=100;endendV=double(V);[nm]=size(V);%VcontainsyourdatainitscolumnvectorsW=rand(n,r);%randomlyinitializebasisW=W./(ones(n,1)*sum(W));%normalizecolumnsumsH=rand(r,m);%randomlyinitializeencodings%eps=1e-9;%setyourowntoleranceh=waitbar(0,'NonnegativeMatrixFactorization');foriter=1:maxiterH=H.*(W'*((V+eps)./(W*H+eps)));W=W.*(((V+eps)./(W*H+eps))*H');W=W./(ones(n,1)*sum(W));%insertyourowngraphicscallstovisualizeWandHwaitbar(iter/maxiter,h);endclose(h);h=waitbar(0,'Copyright(C));web(');ifImShowOn==1%显示结果subplot(1,2,1);imshow(V,[]);title('Originalimage');subplot(1,2,2);imshow(W*H,[]);title(['NMFedimage','(rank=',num2str(r),',iterations=',num2str(maxiter),')']);end%%--------------------------------------------------------------------%%function[W,H]=NMF(D,r)sizeD=size(D);n=sizeD(1);m=sizeD(2);W=abs(rand(n,r));H=abs(rand(r,m));foriterate=1:100WD=W'*D;WWH=W'*W*H;fora=1:rforu=1:mH(a,u)=H(a,u)*WD(a,u)/WWH(a,u);endendDH=D*H';WHH=W*H*H';fori=1:nfora=1:rW(i,a)=W(i,a)*DH(i,a)/WHH(i,a);endendend
本文标题:NMF Matlab
链接地址:https://www.777doc.com/doc-7027754 .html