非负矩阵分解(NMF,Nonnegtive Matrix Factorization)

发现写关于非负矩阵的博文还是蛮多的,还是以自己的角度总结一下自己的最近看的若干东西以及对非负矩阵分解有用的一些资料链接。

早在1999年,著名的科学杂志《Nature》刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果。其文章为《Learning the parts of objects by non-negative matrix factorization》。关于矩阵的分解有很多种方法,各种方法无非便是加入各种约束各种条条框框,最后生成一对矩阵相乘的形式来近似表达源矩阵。但在不同的约束下生成的分解矩阵有着不同的性质。下面将在此论文的基础上对NMf进行介绍。

1、基本概念:

给出非负矩阵分解定义为:找到非负矩阵使得。在计算中等式两者很难完全相等。在计算中往往是根据某更新法则迭代更新出两个乘子,当上式左右两端的距离(如欧式距离)满足我们设定的大小,停止迭代。

2、不同矩阵分解方法的对比:

上述的论文中,将主元分析PCA,矢量量化VQ与非负矩阵分解NMF进行对比。三种分解方式有着一个统一地表达形式:

。文中将在一个关于人脸图像处理的实验下阐述这三个方法。数据描述:矩阵是一个脸部数据矩阵。其中,每一列是一个有n个数据的脸部数据,一共有m个这样的脸部数据构成脸部数据矩阵

如上式,将人脸图像分解为一个基图像与一个权重矩阵

下面便开始介绍这三种方法:

在VQ分解中,每一列的被约束为一个一元矢量。其中只有一个元素为1,其他元素为0。若的第一列中,第r1个元素为1,那么中第一列的脸,就完全由基图像中的第r1列数据表示。此时得到的基图像称为原型基图像,这些原型图像表示一张原型脸。

在PCA分解中,的各列之间相互正交,各行之间相互正交。这个约束比VQ的松弛很多,也就是,中的元素可为正也可为负。中每一张脸的每一个像素点都是中各列对应的像素点的一个加权和。由于权重矩阵中元素符号的任意性,所以基矩阵表示出来并不像VQ中原型脸那样的直观可解释。此时将W的列数据画出来并不一定能直接看到一张“脸”。但是在统计上可以解释为最大方差方向,我们把这些“脸”称为“特征脸”。

在NMF中,由于加了非负约束。与VQ的单一元素不为0不同,NMF允许基图像H间的加权结合来表示脸部图像V;与PCA不同,NMF的加权系数H中的元素都为非负的。前两者得到的都是一个完整的脸部特征基图像,而NMF得到的是脸部子特征。通俗点说,VQ是用一张完整的图像直接代表源脸部图像;PCA是将几个完整人脸加减压成一张脸;而NMF是取甲的眼睛,乙的鼻子,丙的嘴巴直接拼成一张脸。这样解释虽然细节上略有不妥,但不失其概念上的意义。

上图的第一个方块为矩阵W,组成的图像。其中每一个小格为W的一列的19*19个元素

重构而成的19*19的矩阵图像。第二个方块为H矩阵,其中红色表示负数,灰黑表示正

数,颜色程度表示大小。右边的图像只是V矩阵的列的19*19个元素组成的一张原始脸。

3、NMF若干更新法则:

关于更新法则,Daniel D. Lee和H. Sebastian Seung的文章《Algorithms for Non-negative MatrixFactorization》有详细的公式推导证明。由于W与H的乘积是对V的近似估计,所以评价分解好坏的标准便是两者之间的差异。文中在不同的代价函数下提出了不同的更新法则,包括乘性更新法则与加性更新法则。

  • Cost function 1,欧几里得距离(Euclidean distance):

(1)

在此代价函数下的乘性更新法则有:

(2)


  • cost function 2,分离度(divergence):

(3)

在此代价函数下的乘性更新法则为:

以及 (4)


另外有加性更新法则如下:

欧几里得距离(Euclidean distance)下的加性更新为:

(5)

此时只要迭代步长的所有元素设为足够小的正数那么欧式距离会随着迭代而减小。而当迭代步长满足:,可以得到此时的加性更新等价于式子(2)中的乘性更新。

分离度(divergence)下的加性更新为:

(6)

同样迭代步长若为足够下的正数的话,分离度代价函数的值会随着更新而减小,而当迭代步长满足:,可同样得到此时的加性更新等价于式子(4)中的乘性更新法则。

文中的还通过构造辅助函数对迭代算法的收敛性进行了证明,详情参见论文《Algorithms for Non-negative MatrixFactorization》

下面是根据欧几里得距离的更新法则写的NMF函数。其中注释部分为对矩阵单个元素的操作,是为了更直观地表达更新法则中下标的元素的操作。

function [W,H]=NMF_EuclideanD(V,r)
% D 输入数据 n(个)* m(维)  r 降维后的维度
%  D=W*H   W 基向量矩阵  H 在基下的坐标向量
sizeD=size(V);   %获取V矩阵维数
n=sizeD(1);
m=sizeD(2);

W=abs(rand(n,r));   %随机产生非负矩阵W与H
H=abs(rand(r,m));

for iterate=1:500
    WD=W'*V;
     WWH=W'*W*H;
     H = H.*WD./WWH; %更新H
%     for a = 1:r
%         for u=1:m
%             H(a,u)=H(a,u)*WD(a,u)/WWH(a,u);
%         end
%     end
    DH=V*H';
    WHH=W*H*H';
    W = W.*DH./WHH;  %更新W
%     for i = 1:n
%         for a=1:r
%             W(i,a)=W(i,a)*DH(i,a)/WHH(i,a);
%         end
%     end

end
d=W*H;

4、应用

NMF的广泛应用,源于其对事物的局部特性有很好的解释。在众多应用中,NMF能被用于发现数据库中的图像特征,便于快速自动识别应用;能够发现文档的语义相关度,用于信息自动索引和提取;能够在DNA阵列分析中识别基因等等。我们将对此作一些大致的描述。

(1) 图像分析
NMF最成功的一类应用是在图像的分析和处理领域。图像本身包含大量的数据,计算机一般将图像的信息按照矩阵的形式进行存放,针对图像的识别、分析和处理也是在矩阵的基础上进行的。这些特点使得NMF方法能很好地与图像分析处理相结合。人们已经利用NMF算法,对卫星发回的图像进行处理,以自动辨别太空中的垃圾碎片;使用NMF算法对天文望远镜拍摄到的图像进行分析,有助于天文学家识别星体;美国还尝试在机场安装由NMF算法驱动的识别系统,根据事先输入计算机的恐怖分子的特征图像库来自动识别进出机场的可疑恐怖分子。
(2) 文本聚类/数据挖掘
文本在人类日常接触的信息中占有很大分量,为了更快更精确地从大量的文本数据中取得所需要的信息,针对文本信息处理的研究一直没有停止过。文本数据不光信息量大,而且一般是无结构的。此外,典型的文本数据通常以矩阵的形式被计算机处理,此时的数据矩阵具有高维稀疏的特征,因此,对大规模文本信息进行处理分析的另一个障碍便是如何削减原始数据的维数。NMF算法正是解决这方面难题的一种新手段。NMF在挖掘用户所需数据和进行文本聚类研究中都有着成功的应用例子。由于NMF算法在处理文本数据方面的高效性,著名的商业数据库软件Oracle在其第10版中专门利用NMF算法来进行文本特征的提取和分类。为什么NMF对于文本信息提取得很好呢?原因在于智能文本处理的核心问题是以一种能捕获语义或相关信息的方式来表示文本,但是传统的常用分析方法仅仅是对词进行统计,而不考虑其他的信息。而NMF不同,它往往能达到表示信息的局部之间相关关系的效果,从而获得更好的处理结果。
(3) 语音处理
语音的自动识别一直是计算机科学家努力的方向,也是未来智能应用实现的基础技术。语音同样包含大量的数据信息,识别语音的过程也是对这些信息处理的过程。NMF算法在这方面也为我们提供了一种新方法,在已有的应用中,NMF算法成功实现了有效的语音特征提取,并且由于NMF算法的快速性,对实现机器的实时语音识别有着促进意义。也有使用NMF方法进行音乐分析的应用。复调音乐的识别是个很困难的问题,三菱研究所和MIT(麻省理工学院)的科学家合作,利用NMF从演奏中的复调音乐中识别出各个调子,并将它们分别记录下来。实验结果表明,这种采用NMF算法的方法不光简单,而且无须基于知识库。
(4) 机器人控制
如何快速准确地让机器人识别周围的物体对于机器人研究具有重要的意义,因为这是机器人能迅速作出相应反应和动作的基础。机器人通过传感器获得周围环境的图像信息,这些图像信息也是以矩阵的形式存储的。已经有研究人员采用NMF算法实现了机器人对周围对象的快速识别,根据现有的研究资料显示,识别的准确率达到了80%以上。
(5) 生物医学工程和化学工程
生物医学和化学研究中,也常常需要借助计算机来分析处理试验的数据,往往一些烦杂的数据会耗费研究人员的过多精力。NMF算法也为这些数据的处理提供了一种新的高效快速的途径。科学家将NMF方法用于处理核医学中的电子发射过程的动态连续图像,有效地从这些动态图像中提取所需要的特征。NMF还可以应用到遗传学和药物发现中。因为NMF的分解不出现负值,因此采用NMF分析基因DNA的分子序列可使分析结果更加可靠。同样,用NMF来选择药物成分还可以获得最有效的且负作用最小的新药物。
此外,NMF算法在环境数据处理、信号分析与复杂对象的识别方面都有着很好的应用。近年来采用NMF思想的应用才刚展开,相信以后会有更多的成功应用。这些成功的应用反过来也将促进NMF的进一步研究。

应用部分转自博文:非负矩阵分解:数学的奇妙力量

5、有NMF的相关算法如下:Local NMF(LNMF),Discriminant NMF(DNMF),non-negative sparse coding(NNSC),non-smoothNMF(nsNMF),projective NMF,temporal NMF with spatial decorrelation constraints,shifted NMF,incremental NMF,sparse higher order NMF and polynomial NMF 等等,对于NMF分解的唯一性探讨也是NMF最近比较受关注的方面。具体还得慢慢学习。

相关资料及下载链接:

[1].Daniel D.Lee* & H. Sebastian Seung*Learningthe parts of objects by Non-negative Matrix Factorization

[2].Daniel D.Lee* & H. Sebastian Seung*Algorithms for Non-negative MatrixFactorization

3、Chih-Jen Lin的主页,上面有关于NMF的一些matlab源代码;

4、Non-negative Matrix factorization discussion forum excerpts ,一个论坛摘引;

5、NMF fuction-Mathworks是对matlab中的NMF函数的使用说明;

6、维基百科NMF维基百科的东西还是很赞的,里面的很多链接留着慢慢看。

7、http://books.nips.cc/cgi-bin/archer_query.cgi?first=1&scope=all&hits_per_page=10&description=long&keywords=NMF

注:本文旨在将基本概念及相关资源链接集合,以便读者了解及日后学习。应用部分为转载已链接原文博客。

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非负矩阵分解(Non-negative Matrix Factorization,简称NMF)是一种常用的矩阵分解方法,它可以将一个非负矩阵分解为两个非负矩阵的乘积。NMF在数据挖掘、图像处理、文本挖掘等领域有广泛的应用。 在Matlab中,可以使用NMF工具箱来进行非负矩阵分解NMF工具箱提供了一系列函数,可以方便地进行NMF的计算和分析。 首先,你需要安装NMF工具箱。可以在Matlab的官方网站或者第三方网站上找到并下载安装包。安装完成后,你可以通过以下步骤来使用NMF工具箱进行非负矩阵分解: 1. 导入数据:将你要进行NMF非负矩阵导入到Matlab中,可以使用Matlab提供的函数如`load`或者`csvread`来导入数据。 2. 调用NMF函数:使用NMF工具箱提供的函数来进行非负矩阵分解。常用的函数包括`nmf`和`nnmf`。这些函数通常需要指定分解的维、迭代次数等参数。 3. 获取分解结果:根据函数的返回值,可以获取到分解后的两个非负矩阵。这两个矩阵可以表示原始矩阵的近似或者特征。 4. 进行后续分析:根据需要,你可以对分解后的矩阵进行进一步的分析和处理。例如,可以计算重构误差、可视化分解结果等。 除了NMF工具箱,Matlab还提供了其他一些函数和工具,可以用于非负矩阵分解。例如,`nnls`函数可以用于非负最小二乘问题的求解,`nmfnnls`函数可以用于非负矩阵分解的迭代求解。 希望以上介绍对你有帮助!如果你有更多关于NMF或者Matlab的问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值