APG优化非负矩阵分解(NeNMF)

文献:NeNMF: An Optimal Gradient Method for Nonnegative Matrix Factorization

min_{W,H}||X - WH||; s.t W,H>=0

(1)固定W,优化H

APG优化非负矩阵分解(NeNMF)_第1张图片

 

 (2)优化W,固定H;

W_k = P(U_k-1/L\triangledown_W(W_k,U_k) )

(3)更新W_k

U_{k+1}=W_k+(\alpha_k-1)/\alpha_{k+1}(W_k-W_{k-1})

(4)更新Y_k

 具体算法:

APG优化非负矩阵分解(NeNMF)_第2张图片

 APG优化非负矩阵分解(NeNMF)_第3张图片

matlab 代码

function [W,H] = myNeNMF(X,k)
 %% min_{W,H}||X-WH||_2^2;
 %% s.t W,H>0;
 
 max_epoch = 200;
 [dim,nSmp] = size(X);
 Wt = abs(rand(dim,k));
 Ht = abs(rand(k,nSmp));

%%
deltPH = -Wt'*X + Wt'*Wt*Ht;
deltPW = -X*Ht' + Wt*(Ht*Ht');
Wwt    = [Wt',Ht];
DeltHW = [deltPW',deltPH];
tol = norm(DeltHW(DeltHW<0|Wwt>0));
tol_optgap = 1e-5;
tolH = 1e-3*tol;
tolW = 1e-3*tol;
innerloop = 10;
for i = 1:max_epoch
    %% update  H
    [Ht,deltPH,iterH] = updateH(X,Wt,Ht,tolH,innerloop);
    if iterH0);
    if i>1
        if (abs(obj(i)-obj(i-1))0);
        if i>innerloop
            if norm(pGd)<=tol
                break;
            end
        end
    end
    H = Hk;
end
 

APG优化非负矩阵分解(NeNMF)_第4张图片

聚类效果:

 

你可能感兴趣的:(矩阵,线性代数)