本文拟对文章:“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 variables
X = V';
Wplus = W;
Hplus = H;
alphaW = zeros(size(W));
alphaH = zeros(size(H));
maxiter = 10000;
for iter=1:maxiter
% update for W
P = H*H' + rho*eye(k);
Q = X*H' + rho*Wplus - alphaW;
W = ( P'\ Q' )';
% update for H
H = (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 variables
alphaH = 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>1
err(iter-1) = fk;
if abs(fk0-fk1)/max(1,abs(fk))<1e-6
break;
end
end
fk1=fk0;
% alphaW1 = alphaW;
% alphaH1 = alphaH;
end
W = Wplus;
H = Hplus;
end
本文对‘An Alternating Direction Algorithm for Matrix Completion with Nonnegative Factors’中利用ADMM进行非负矩阵分解部分进行推导,给出augmented Lagrangian形式,介绍优化步骤和迭代终止条件,展示orl人脸库上目标函数收敛曲线,聚类结果略好于传统NMF优化方法,还给出matlab代码。
27

被折叠的 条评论
为什么被折叠?



