热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

非负矩阵分解(NMF)

通常的矩阵分解会把一个大的矩阵分解为多个小的矩阵,但是这些矩阵的元素有正有负。而在现实世界中,比如图像,文本等形成的矩阵中负数的存在是没有意义的,所以如果能把一个矩阵分解成全是非负元素是很有意义的。在

通常的矩阵分解会把一个大的矩阵分解为多个小的矩阵,但是这些矩阵的元素有正有负。而在现实世界中,比如图

像,文本等形成的矩阵中负数的存在是没有意义的,所以如果能把一个矩阵分解成全是非负元素是很有意义的。在

NMF中要求原始的矩阵的所有元素的均是非负的,那么矩阵可以分解为两个更小的非负矩阵的乘积,这个矩阵

有且仅有一个这样的分解,即满足存在性唯一性

 

Contents

 

   1. NMF问题描述

   2. NMF实现原理

   3. NMF的应用

   4. NMF的R实现

   5. NMF的Julia实现

   6. 结束语

 

 

1. NMF问题描述

 

   传统的NMF问题可以描述如下

 

   给定矩阵,寻找非负矩阵和非负矩阵,使得

 

   分解前后可理解为:原始矩阵的列向量是对左矩阵中所有列向量的加权和,而权重系数就是右矩阵对应列

   向量的元素,故称为基矩阵,为系数矩阵。一般情况下的选择要比小,即满足

   这时用系数矩阵代替原始矩阵,就可以实现对原始矩阵进行降维,得到数据特征的降维矩阵,从而减少存储空

   间,减少计算机资源。

 

 

2. NMF实现原理

 

   NMF求解问题实际上是一个最优化问题,利用乘性迭代的方法求解,非负矩阵分解是一个NP问题。NMF

   问题的目标函数有很多种,应用最广泛就是欧几里得距离KL散度。

 

   在NMF的分解问题中,假设噪声矩阵为,那么有

 

                

 

   现在要找出合适的使得最小。假设噪声服从不同的概率分布,通过最大似然函数会得到不同类型

   的目标函数。接下来会分别以噪声服从高斯分布泊松分布来说明。

 

 

   (1)噪声服从高斯分布

 

       假设噪声服从高斯分布,那么得到最大似然函数为

 

       

 

       取对数后,得到对数似然函数为

 

       

 

       假设各数据点噪声的方差一样,那么接下来要使得对数似然函数取值最大,只需要下面目标函数值最小。

 

       

 

       该损失函数为2范数损失函数,它是基于欧几里得距离的度量。又因为

 

       

 

       那么得到

 

       

 

       同理有

 

       

 

       接下来就可以使用梯度下降法进行迭代了。如下

 

       

 

       如果选取

 

       

 

       那么最终得到迭代式为

 

       

 

       可看出这是乘性迭代规则,每一步都保证了结果为正数,一直迭代下去就会收敛,当然收敛性的证明省略。

 

 

   (2)噪声服从泊松分布

 

       若噪声为泊松噪声,那么得到损失函数为

 

       

 

       同样经过推到得到

 

       

 

   

3. NMF的应用

 

   NMF能用于发现数据库中图像的特征,便于快速识别应用,比如实现录入恐怖分子的照片,然后在安检口对可疑

   人员进行盘查。在文档方面,NMF能够发现文档的语义相关度,用于信息的自动索引和提取。在生物学中,在

   DNA阵列分析中识别基因等。在语音识别系统中NMF也能发挥重要作用。

 

 

4. NMF的R实现

 

   先说NMF的R使用,R语言中已经有NMF包可用于NMF。非负矩阵分解已经有了很多算法,例如Multiplicative

   Update,Projected Gradient Method,Gradient Descent。交替最小二乘法比较符合上面的解释,具

   有更好的统计意义,而且收敛性质很好,计算速度快。已有的交替最小二乘法都使用冷冰冰的二次规划算法求解

   非负回归,在bignmf中使用的最小角回归的思路解非负回归,更有统计的感觉,而且速度更快。安装包如下

 

   bignmf:https://github.com/panlanfeng/bignmf

 

   bignmf的部分源码如下

 

   

 

  从上面代码可以看出,当矩阵V中元素是非double时,会强制转化为double类型。而WH矩阵是服从高斯分布

   的随机矩阵,随后传入参数调用whupdate,如果迭代次数太少会打印警告Iteration doesn't converge!

 

   所以用bignmf分解非负矩阵调用如下函数就行了

 

   

 

   代码:

   

 

   以上是NMF分解的R语言实现,bignmf借助伟大的Rcpp和RcppEigen包,算法内层用C++ 代码实现接下来会接

   着NMF在Julia中的实现。

 

 

5. NMF的Julia实现

 

   在Julia语言中,有一个NMF包专门用来进行NMF分解的,现在就来详细了解它。首先来安装NMF,在Julia交互

   式环境下使用如下命令

 

   

 

   在Julia中,关于NMF的计算有很多方法,详见:https://github.com/JuliaStats/NMF.jl

 

   NMF分解的一个例子如下

 

   

 

 

6. 结束语

 

   关于NMF的解的收敛性和唯一性以后再证明,除了NMF分解以外,还有一种非负分解也用的比较多,而且很有

   效,叫做负张量分解法。可以参考如下论文

 

   论文链接:http://www.doc88.com/p-8942237517189.html

 


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Paxos的世界中关于复制日志与状态机的概念和重要性。通过存储日志来实现数据的持久化,并通过日志流来记录数据的变化,而不是直接持久化数据本身。这样做的好处是简化了持久化存储的操作,并且方便多机之间的数据同步。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • qt学习(六)数据库注册用户的实现方法
    本文介绍了在qt学习中实现数据库注册用户的方法,包括登录按钮按下后出现注册页面、账号可用性判断、密码格式判断、邮箱格式判断等步骤。具体实现过程包括UI设计、数据库的创建和各个模块调用数据内容。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
author-avatar
023597
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有