非负矩阵分解——NMF (2)

本文非负矩阵分解(Nonegative matrix factorization,NMF)系列第二篇,主要介绍最基本的NMF原理及代码实现,内容主要包括:

  1)基于Euclidean距离的NMF推导及实现;

  2)基于KL散度的NMF推导及实现;

  3)NMF应用示例

开始之前,有两点需要补充:

  • 前面分析用的是X=AS形式,感觉别扭,好多文章都是用V = WH,后续打算也采用这也表达方式;
  • NMF其实是含有约束的优化问题,但乘法算法可以巧妙得让我们只需讨论:无约束优化问题。

 一、基于Euclidean距离的NMF推导及实现

考虑无约束优化问题:

利用梯度下降:

其中:

如果直接梯度下降,对于无约束的优化问题,我们不能保证结果都是非负的,下面巧妙之处来了将梯度下降法变为乘法算法

令:

梯度下降法变换为乘法算法:

真是巧妙!一个复杂的约束性优化问题,就让一个简单的无约束给解决了。这样一来,如果原矩阵为非负,W、H初始值同样非负,结果自始至终都是非负,直至迭代到满足收敛条件。

给出对应的代码实现:

function [W, H] = nmf(V, K, MAXITER)
%Euclidean distance
F = size(V,1);
T = size(V,2);
  
rand('seed',0)
W = 1+rand(F, K);
% W = W./repmat(sum(W),F,1);
H = 1+rand(K, T);
  
ONES = ones(F,T);
  
for i=1:MAXITER
    H = H .* (W'*V)./(W'*W*H+eps) ;
    W = W .* (V*H')./(W*H*H'+eps);
end

其实关键的就是循环里的两行。

二、基于KL散度的NMF推导及实现

 

整个思路与Euclidean distance下的求解思路如出一辙。

考虑无约束优化问题:

利用梯度下降算法:

其中:

根据梯度下降算法转化为乘法算法:

令:

梯度下降算法改写为乘法算法:

对应代码:

function [W, H] = nmf(V, K, MAXITER)
%KL-divergence
F = size(V,1);
T = size(V,2);
  
rand('seed',0)
W = 1+rand(F, K);
% W = W./repmat(sum(W),F,1);
H = 1+rand(K, T);
  
ONES = ones(F,T);
 
for i=1:MAXITER
    H = H .* (W'*( V./(W*H+eps))) ./ (W'*ONES);
    W = W .* ((V./(W*H+eps))*H') ./(ONES*H');
end

 

链接:http://www.cnblogs.com/xingshansi/p/6670214.html 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值