著名的科学杂志《Nature》于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果。该文提出了一种新的矩阵分解思想――非负矩阵分解(Non-negative Matrix Factorization,NMF)算法,即NMF是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法。该论文的发表迅速引起了各个领域中的科学研究人员的重视:一方面,科学研究中的很多大规模数据的分析方法需要通过矩阵形式进行有效处理,而NMF思想则为人类处理大规模数据提供了一种新的途径;另一方面,NMF分解算法相较于传统的一些算法而言,具有实现上的简便性、分解形式和分解结果上的可解释性,以及占用存储空间少等诸多优点。
  信息时代使得人类面临分析或处理各种大规模数据信息的要求,如卫星传回的大量图像、机器人接受到的实时视频流、数据库中的大规模文本、Web上的海量信息等。处理这类信息时,矩阵是人们最常用的数学表达方式,比如一幅图像就恰好与一个矩阵对应,矩阵中的每个位置存放着图像中一个像素的空间位置和色彩信息。由于实际问题中这样的矩阵很庞大,其中存放的信息分布往往不均匀,因此直接处理这样的矩阵效率低下,这对很多实际问题而言就失去了实用意义。为高效处理这些通过矩阵存放的数据,一个关键的必要步骤便是对矩阵进行分解操作。通过矩阵分解,一方面将描述问题的矩阵的维数进行削减,另一方面也可以对大量的数据进行压缩和概括。

  在科学文献中,讨论利用矩阵分解来解决实际问题的分析方法很多,如PCA(主成分分析)、ICA(独立成分分析)、SVD(奇异值分解)、VQ(矢量量化)等。在所有这些方法中,原始的大矩阵V被近似分解为低秩的V=WH形式。这些方法的共同特点是,因子W和H中的元素可为正或负,即使输入的初始矩阵元素是全正的,传统的秩削减算法也不能保证原始数据的非负性。在数学上,从计算的观点看,分解结果中存在负值是正确的,但负值元素在实际问题中往往是没有意义的。例如图像数据中不可能有负值的像素点;在文档统计中,负值也是无法解释的。因此,探索矩阵的非负分解方法一直是很有意义的研究问题,正是如此,Lee和Seung两位科学家的NMF方法才得到人们的如此关注。
  NMF是一种新的矩阵分解算法,它克服了传统矩阵分解的很多问题,通过寻找上下文有意义的解决方法,提供解释数据的更深看法。NMF通过寻找低秩,非负分解那些都为非负值的矩阵。这在现实的应用中有很多例子,如数字图像中的像素一般为非负数,文本分析中的单词统计也总是非负数,股票价格也总是正数等等。NMF的基本思想可以简单描述为:对于任意给定的一个非负矩阵A,NMF算法能够寻找到一个非负矩阵U和一个非负矩阵V,使得满足,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。由于分解前后的矩阵中仅包含非负的元素,因此,原矩阵A中的一列向量可以解释为对左矩阵U中所有列向量(称为基向量)的加权和,而权重系数为右矩阵V中对应列向量中的元素。这种基于基向量组合的表示形式具有很直观的语义解释,它反映了人类思维中“局部构成整体”的概念。研究指出,非负矩阵分解是个NP问题,可以划为优化问题用迭代方法交替求解U和V。NMF算法提供了基于简单迭代的求解U,V的方法,求解方法具有收敛速度快、左右非负矩阵存储空间小的特点,它能将高维的数据矩阵降维处理,适合处理大规模数据。利用NMF进行文本、图像大规模数据的分析方法,较传统的处理算法速度更快、更便捷。NMF思想的提出迅速得到了很多人的重视,并有很多将这种思想应用到实际中成功解决具体实际问题的例子。
  非负矩阵的具体算法如下:

  输入参数:X,R,MAXITER,其中X为被分解的矩阵,R为降阶后B的秩,MAXITER为迭代次数

  输出参数:B,H

  1):初始化矩阵B,H为非负数,同时对B的每一列数据归一化

  2):for i=1:MAXITER

     a:更新H矩阵一行元素:H(i,j)=H(i,j)*(B'*X)(i,j)/(B'*B*H)(i,j)

      b:更新B的一列元素:B(k,j)=B(k,j)*(X*H')(k,j)/(B*H*H')(k,j);

c:重新对B进行列归一化

3)end

matlab源程序如下:

dim=size(X);                                    %计算x的规格
X=double(X);
B=10*rand(dim(1),r);                            %初始化BH,为非负数
B=B./(ones(dim(1),1)*sum(B));                   %归一化B的每一列

H=10*rand(r,dim(2));

maxiter=100;                                    %最大迭代次数
for iter=1:maxiter
    H=H.*(B'*(X./(B*H)));
    B=B.*((X./(B*H))*H');
    B=B./(ones(dim(1),1)*sum(B));
end

效果如下:

    

原始图片                                                                  分解后重构的图片

参考文献:

基于非负矩阵分解的人脸表情识别研究

非负矩阵分解:数学的奇妙力量

相片来自我大姨(摄于2005.02)

下一步尝试采用NMF提取特征。     

好文,转自:http://fxy1211.blog.163.com/blog/static/68255322007826111015905/

关于NMF(Non-negative Matrix Factorization )的更多相关文章

  1. Matrix Factorization, Algorithms, Applications, and Avaliable packages

    矩阵分解 来源:http://www.cvchina.info/2011/09/05/matrix-factorization-jungle/ 美帝的有心人士收集了市面上的矩阵分解的差点儿全部算法和应 ...

  2. 《Non-Negative Matrix Factorization for Polyphonic Music Transcription》译文

    NMF(非负矩阵分解),由于其分解出的矩阵是非负的,在一些实际问题中具有非常好的解释,因此用途很广.在此,我给大家介绍一下NMF在多声部音乐中的应用.要翻译的论文是利用NMF转录多声部音乐的开山之作, ...

  3. Non-negative Matrix Factorization 非负矩阵分解

    著名的科学杂志<Nature>于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果.该文提出了一种新的矩阵分解思想――非负矩阵分解(Non-nega ...

  4. Matrix Factorization SVD 矩阵分解

    Today we have learned the Matrix Factorization, and I want to record my study notes. Some kownledge ...

  5. 机器学习技法:15 Matrix Factorization

    Roadmap Linear Network Hypothesis Basic Matrix Factorization Stochastic Gradient Descent Summary of ...

  6. 机器学习技法笔记:15 Matrix Factorization

    Roadmap Linear Network Hypothesis Basic Matrix Factorization Stochastic Gradient Descent Summary of ...

  7. 【RS】Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering - 基于拉普拉斯分布的稀疏概率矩阵分解协同过滤

    [论文标题]Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering  ...

  8. 【RS】List-wise learning to rank with matrix factorization for collaborative filtering - 结合列表启发排序和矩阵分解的协同过滤

    [论文标题]List-wise learning to rank with matrix factorization for collaborative filtering   (RecSys '10 ...

  9. 【RS】Matrix Factorization Techniques for Recommender Systems - 推荐系统的矩阵分解技术

    [论文标题]Matrix Factorization Techniques for Recommender Systems(2009,Published by the IEEE Computer So ...

随机推荐

  1. where子句的使用

    关系运算符: = > < <= >= != <> 略. 有一个<=> 有啥用? 其实也是判断等于. 不比较NULL值,效果就和= 一样,比较NULL值, ...

  2. java有符号无符号的转换

    数据处理中常常遇到基本数据类型的操作,java都是有符号的数据,而与下位机通信中常常遇到无符号的比如uint8, uint16,uint32等等 1.为了完成这个功能还专门采用ByteBuffer的方 ...

  3. [转]深入理解mysqldump原理 --single-transaction --lock-all-tables --master-data

    本文转至:http://blog.csdn.net/cug_jiang126com/article/details/49824471 在mysqldump过程中,之前其实一直不是很理解为什么加了--s ...

  4. HTML控件篇 -- input

    1. 取消input提示框及自动填充: <input type="text" autocomplete="off" /> 处理chrome下自动填充 ...

  5. 关于Repository模式

    定义(来自Martin Fowler的<企业应用架构模式>): Mediates between the domain and data mapping layers using a co ...

  6. SQL中Where与Having的区别

    “Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数. “Having”是一个过滤声明,是在查询返回结果集以后对查询 ...

  7. delphi 生成网卡MAC地址

    生成MAC地址的小工具: {*------------------------------------------------ 生成mac地址 @author @version 2015.7.2 20 ...

  8. 转发 eclipse 取消javascript 验证

    博客地址: http://blog.csdn.net/itchiang/article/details/7498474 最近出了一个很怪的现象,某一个js文件,在某一个Eclipse工程中呆的好好的, ...

  9. ActiveMQ第四弹:在HermesJMS中创建ActiveMQ Session

    Hermes JMS是一个开源免费的跨平台的JMS消息监听工具.它可以很方便和各种JMS框架集成和交互,可以用来监听.发送.接收.修改.存储消息等.这篇文章将讲解HermesJMS如何集成Active ...

  10. JavaScript中for..in循环陷阱介绍

    for...in循环中的循环计数器是字符串,而不是数字它包含当前属性的名称或当前数组元素的索引,下面有个不错的示例大家可以参考下   大家都知道在JavaScript中提供了两种方式迭代对象: (1) ...