文章目录

  • 1. 非负矩阵分解(NMF)
  • 3. sklearn中非负矩阵分解

1. 非负矩阵分解(NMF)

非负矩阵分解(Non-negative Matrix Factorization ,NMF)是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法。
基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和H的乘积近似等于矩阵V中的值。

Vn×m=Wn×k×Hk×mV_{n\times m}=W_{n\times k}\times H_{k\times m}Vn×m​=Wn×k​×Hk×m​

  • WWW矩阵:基础图像矩阵矩阵,相当于从原中抽取出来的特征。
  • HHH矩阵:系数矩阵。
  • NMFNMFNMF能够广泛应用于图像分析、文本挖掘和语音处理等领域。

上图摘自NMF作者的论文,左侧为WWW矩阵,可以看出从原始图像中抽取出 来的特征,中间的是HHH矩阵。可以发现乘积结果与原结果是很像的。

3. sklearn中非负矩阵分解

在sklearn库中,可以使用sklearn.decomposition.NMF加载NMF算 法,主要参数有:

  • n_components:用于指定分解后矩阵的单个维度k。
  • init:WWW矩阵和HHH矩阵的初始化方式,默认为nndsvdar

#NMF人脸数据特征提取
已知Olivetti人脸数据共 400个,每个数据是64*64大小。由于NMF分解得到的W矩阵相当于从原始矩阵中提取的特征,那么就可以使用NMF对400个人脸数据进行特征提取。

通过设置k的大小,设置提取的特征的数目。在本实验中设置k=6, 随后将提取的特征以图像的形式展示 出来。

# 加载matplotlib用于数据的可视化
import matplotlib.pyplot as plt
# 加载PCA算法包
from sklearn import decomposition
# 加载Olivetti人脸数据集导入函数
from sklearn.datasets import fetch_olivetti_faces
# 加载RandomState用于创建随机种子
from numpy.random import RandomState# 设置基本参数
# 设置图像展示时的排列情况
n_row, n_col = 2, 3
# 设置提取的特征的数目
n_components = n_row * n_col
# 设置人脸数据图片的大小
image_shape = (64, 64)
# 加载人脸数据
data_set = fetch_olivetti_faces(shuffle=True, random_state=RandomState(0))
faces = data_set.data
# 设置图像的展示方式
def plot_gallery(title, images, n_col=n_col, n_row=n_row):# 创建图片,并指定图片大小(英寸)plt.figure(figsize=(2. * n_col, 2.26 * n_row))# 设置标题及字号大小plt.suptitle(title, size=16)for i, comp in enumerate(images):# 选择绘制的子图plt.subplot(n_row, n_col, i + 1)vmax = max(comp.max(), -comp.min())# 对数值归一化, 并以灰度图形式显示plt.imshow(comp.reshape(image_shape), cmap=plt.cm.gray,interpolation='nearest', vmin=-vmax, vmax=vmax)# 去除子图的坐标轴标签plt.xticks(())plt.yticks(())# 对子图位置及间隔调整plt.subplots_adjust(0.01, 0.05, 0.99, 0.94, 0.04, 0.)plot_gallery("First centered Olivetti faces", faces[:n_components])# 创建特征提取的对象NMF,使用PCA作为对比
estimators = [('Eigenfaces - PCA using randomized SVD',  # PCA方法decomposition.PCA(n_components=6, whiten=True)),  # PCA实例('Non-negative components - NMF',  # NMF方法decomposition.NMF(n_components=6, init='nndsvda', tol=5e-3))  # NMF实例
]# 降维后数据点的可视化
for name, estimator in estimators:print("Extracting the top %d %s..." % (n_components, name))print(faces.shape)estimator.fit(faces)components_ = estimator.components_plot_gallery(name, components_[:n_components])plt.show()

6. NMF方法及实例相关推荐

  1. java 倾斜校正_简述Java图像倾斜方法及实例

    可以使用 graphics2D 类提供的 shear() 方法设置绘图的倾斜方向,从而使图像实现倾斜的效果.下面,我们一起来看一下它的使用方法和实例. 语法如下: shear(double shx,d ...

  2. aide java 线程类_aide_Java常用关键字、方法使用实例

    aide_Java常用关键字.方法使用实例 1.== 与 equals ==: 基本类型:值相等 引用类型:地址相等(地址放在堆空间,注意常量池里的String值) equals: 运用于引用类型 在 ...

  3. python表格控件_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...

    PyQt5表格控件QTableView简介 在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的 ...

  4. python列表的排序方法_pythonlist排序的两种方法及实例

    本文主要介绍了python list排序的两种方法及实例讲解.具有很好的参考价值,下面一起来看下吧 对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排 ...

  5. python日历gui_python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例...

    PyQt5日期时间控件QDateTimeEdit介绍 QDateTimeEdit是一个允许用户编辑日期时间的控件,可以使用键盘上的上下键头按钮来增加或减少日期的时间值,QDateTimeEdit通过s ...

  6. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  7. php xml对象解析_php解析xml 的四种简单方法(附实例)

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  8. jQuery遍历之next()、nextAll()方法使用实例

    jquery遍历:next()和nextAll()方法.实例如下: 复制代码 代码如下: <html> <head> <script type="text/ja ...

  9. list排序方法python_python list 排序的两种方法及实例讲解

    对 list 进行排序,Python 提供了两个方法: 方法1. 用 list 的内建函数 list.sort 进行排序 list.sort(func=None, key=None, reverse= ...

  10. 基本语法及基本概念概述(标识符、访问修饰符、变量、数组、枚举、注释、空行、继承、接口、(对象、类、方法、实例变量)、关键字表)

    文章目录 1.标识符 2.标识符命名规范 3.访问修饰符 4.变量 5.数组 6. 枚举 7.注释 8.空行 9.继承 10.接口 11.对象.类.方法.实例 12.关键字表 13.保留字(reser ...

最新文章

  1. JsRender (js模板引擎)
  2. 【项目】itdage-java获取天气和发短信
  3. S3 exercise -- 文件操作函数
  4. rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)
  5. 我被跨系统的换行符折磨疯了~~~
  6. Spring Cloud中关于@EnableFeignClients注解的属性字段basePackages
  7. python调用dll时路径问题_使用ctypes(python)在带括号的路径中加载dll时出错
  8. 服务器是计算机网络的信息与管理中心,网络信息中心主要职能(8页)-原创力文档...
  9. 文件上传之IIS6.0解析漏洞
  10. FFmpeg —— MP4文件提取h264文件
  11. 每周全球科技十大新闻(2019.8.12-8.18)
  12. 金融衍生品 matlab,Matlab金融工程教程金融衍生品计算PPT精选文档
  13. 网站被攻击,用CDN有用吗?
  14. 输出数组中满足条件元素的坐标
  15. 【Java程序设计】Java上机实验(二)
  16. 物理隔离与数据交换-网闸的设计原理与误区
  17. Oracle 使用DBMS_JOB和DBMS_SCHEDULER 创建定时任务 创建管理job示例
  18. 俞敏洪在《赢在中国》中的经典点评语录
  19. 分析百度云和360云的区别
  20. UINavigationController 自定义转场动画(模仿淘宝App跳转)

热门文章

  1. 如何让html 兼容IE和chrome,IE Tab(让Chrome兼容IE)
  2. cad插入块_足够让你牛逼的CAD动态块教程
  3. 获取电脑上连接的USB打印机
  4. Golang map有序化
  5. SpringBoot 静态资源版本管理
  6. Vue安装教程 (一)
  7. JavaScript--对象类型详解
  8. SPHYSICS流体力学仿真模拟程序的动态链接库编译及C#混合编程方法
  9. 从单机数据库到分布式数据库,从数据库事务到分布式事务
  10. 字模提取工具-PCtoLCD2002使用说明