本文拟对文章:“An Alternating Direction Algorithm for Matrix Completion with Nonnegative Factors”中利用ADMM进行非负矩阵分解部分进行推导。
他的 augmented Lagrangian 可写成如下形式:
(1)
(1)优化W
(2)优化H:
(3)优化Wp,Hp:
(4)优化:
迭代终止条件:
orl人脸库(32*32)上,目标函数收敛曲线:
聚类结果比较:
略好于传统NMF优化方法基于原始数据的聚类结果。
matlab代码:
function [W, H] = nmf_admm(V, W, H)
% nmf_admm(V, W, H)%
% inputs
% V: matrix to factor
% W, H: initializations for W and H
%
% outputs
% W, H: factorization such that V \approx W*H% determine dimensions[m,n] = size(V);[~,k] = size(W);rho = 1;gamma = 0.01;% initializations for other variablesX = V';Wplus = W;Hplus = H;alphaW = zeros(size(W));alphaH = zeros(size(H));maxiter = 10000;for iter=1:maxiter% update for WP = H*H' + rho*eye(k);Q = X*H' + rho*Wplus - alphaW;W = ( P'\ Q' )';% update for HH = (W'*W + rho*eye(k)) \ (W'*X- alphaH + rho*Hplus);% update for H_+ and W_+Hplus = max((H + 1/rho*(alphaH)), 0);Wplus = max(W + 1/rho*alphaW, 0);% update for dual variablesalphaH = alphaH + gamma*rho*(H - Hplus);alphaW = alphaW + gamma*rho*(W - Wplus);temp1 = 0.5*trace((X-W*H)'*(X-W*H));temp2 = trace(alphaW'*(W-Wplus)) + trace(alphaH'*(H-Hplus));temp3 = 0.5*rho*(trace((Wplus - W)*(Wplus - W)')+trace((Hplus - H)*(Hplus - H)'));fk = temp1 + temp2 + temp3;fk0 = fk/trace(X*X').^0.5;if iter>1err(iter-1) = fk;if abs(fk0-fk1)/max(1,abs(fk))<1e-6 break;endendfk1=fk0;
% alphaW1 = alphaW;
% alphaH1 = alphaH;endW = Wplus;H = Hplus; end