NMF降维的本质,NMF和PCA的区别

article/2025/9/21 14:18:51

一、NMF的本质

1.当数据完全一样时

# 将如下数据的行向量用NMF降到3维,初始化策略全部用nndsvd,不能用random,下同
X=np.array([[5,5,5,5],[5,5,5,5],[5,5,5,5],[5,5,5,5]])

结果是这样的:
在这里插入图片描述

2.当数据分布全部递增时

# 原数据
X=np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]])

结果是这样的:
在这里插入图片描述
可以得出结论:

当原数据分布完全一样时,降维后数据的特征分布会全部趋向于第一个特征。

3.分布一样,将数字增大

# 原数据
X=np.array([[10,20,30,40],[1,2,3,4],[1,2,3,4],[1,2,3,4]])

结果是这样的:
在这里插入图片描述
可以得出结论:

在分布相同的情况下,原数据的数字越大,降维后数据的数字也越大

4.三个分布相同,第四个有差异

# 原数据
X=np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,5]])

结果:
在这里插入图片描述

第4个数据在第一个特征的基础上还增加了第二个特征1.31,比例为1:0.79。
其他三个数据全都只有第一个特征。

5.将5改成6

X=np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,6]])

结果:
在这里插入图片描述
可以看到,降维后的第四个数据的第二个特征变大了,变为1.87,比例为1:1.13。

6.当把6增加到10

# 原数据
X=np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,10]])

结果:
在这里插入图片描述
反而是前三个数据多出了特征二。

可以得出结论:

NMF会先找原数据的主流分布。这个主流分布受数量和大小的影响。比如实验4中,主流分布就是前三个数据的分布。而在实验4中,当第四个原数据的最后一位增加到10之后,虽然他只有一个人,但他比其他三个人的数据都要大,就得听他的,主流分布就是他的分布。

  • 原数据越偏向于主流分布,降维后的数据就越趋向于一个特征;
  • 反之,就会出现第二个特征。

7.把后两个数据全部搞乱

# 原数据
X=np.array([[1,2,3,4],[1,2,3,4],[2,2,1,4],[2,3,1,0]])

结果:
在这里插入图片描述
可以看到这时候的分布已经比较混乱了。前两个数据无疑是主流分布,但他们的优势已经不不大了,所以他们也出现了少许的第二特征:0.00886。
后面两个特征相对于主流分布来说已经比较混乱,所以分别出现了第三和第二特征。

NMF降维的本质

  • 先定主流分布,取决于各个数据分布的数量以及数据的相对大小之间的博弈。某一分布的数据越多,越有可能成为主流分布;该数据的值越大,越有可能成为主流分布;
  • 和主流分布越相似的原数据,降维后的特征会趋向于特征一。反之会出现更多的特征;
  • 和主流分布有小的差异,但有差异的部分差得特别大的分布(如实验6),则降维后的数据,特征数量不一定多,但特征一和其余特征的比值会很大;

二、以鸢尾花数据为例进行分析

将鸢尾花数据用NMF降到2维,提取矩阵W:
在这里插入图片描述
很明显第3、4个原特征被列为了主流分布,我们还观察到第1个原特征和第2个原特征,其降维后的特征的比例分别是:
5.63:3.43
2.22:2.49
很明显第一个比值更大,也就是说第1个原特征和第3、4个特征的分布更相似。我们知道对于鸢尾花数据,其第3、4个特征的效果是更较好的,所以第一个原特征应该好与第二个原特征才对。

用实验证明:

用第1个特征聚类后的nmi:
在这里插入图片描述
用第2个特征聚类后的nmi:
在这里插入图片描述
的确如此!

三、和PCA的比较

PCA是看方差。将原数据的坐标轴变换方向,使得丢掉一定个数的维度之后,方差能够最大。

NMF是看分布。分布越相似的数据,降维后分布越相似。

如果原数据中有一些分布不好,但是数值又大的特征存在,NMF是会受影响的。

在聚类算法中,NMF比较依赖归一化策略


http://chatgpt.dhexx.cn/article/4dDElnap.shtml

相关文章

非负矩阵分解NMF简介

本文整理NMF相关知识。 简介 非负矩阵分解(Nonnegative Matrix Factorization),简称NMF,是由Lee和Seung于1999年在自然杂志上提出的一种矩阵分解方法,它使分解后的所有分量均为非负值(要求纯加性的描述),并且同时实现非线性的维数…

NMF

计算机是人类解决难题、探索未知以及提供娱乐的绝佳工具。在高效运行着的各种计算机应用背后,融汇了人类在物理、电子和数学等多门学科的高超智慧。严密的数学使得计算机能高效执行人类指令,控制内部各种数据流的走向,因此在现代计算机科学研…

无监督学习——非负矩阵分解(NMF)

序 非负矩阵分解(NMF)是一种无监督学习算法,其目的在于提取有用的特征。它的工作原理类似于PCA,也可以用于降维。与PCA相同,我们试图将每个数据点写成一些分量的加权求和。但在PCA中,我们想要的是正负分量…

非负矩阵分解NMF

http://blog.csdn.net/pipisorry/article/details/52098864 非负矩阵分解(NMF,Non-negative matrix factorization) NMF的发展及原理 著名的科学杂志《Nature》于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果。该文提出了一种新的矩阵分解思想—…

非负矩阵分解(NMF)的Matlab实例与说明

原理啥的到处都有,就直接跳过了。这里主要是NMF的基础实验。下一篇是NMF的高光谱实验总结。 1. matlab示例解说 这一节的图片来自官方文档。 这里第一和第三变量在第一行的值0.6945和0.62220对W的第一列有相当强的权重。第一个第二变量在第二行的值0.8020和0.568…

【机器学习】NMF(非负矩阵分解)

写在篇前 本篇文章主要介绍NMF算法原理以及使用sklearn中的封装方法实现该算法,最重要的是理解要NMF矩阵分解的实际意义,将其运用到自己的数据分析中! 理论概述 NMF(Non-negative matrix factorization),即对于任意给定的一个非负…

vs快捷键与vs自定义快捷键

文章目录 :star: 主题:VS快捷键1.常用的默认快捷键2.自定义快捷键2.1 添加快捷键2.2 移除快捷键2.3 重置快捷键,恢复默认 :bookmark: 小结 ⭐️ 主题:VS快捷键 📍 来自:中南林业科技大学软件协会学术部:谢…

vs注释与反注释快捷键

使用VS C语言编译器的快捷注释按键: 选中部分注释: Ctrl KD (按住Ctrl然后先按K再按D) 注释前: 注释后: 反注释: Ctrl KU (按住Ctrl然后先按K再按U) 操作完就恢复了…

VS(visual studio)注释快捷键及自定义设置

注释: CtrlKC 取消注释: CtrlKU 【工具】→【选项】→【环境】→【键盘】→【搜索注释】 点击【编辑.注释选定内容】→【移除】 输入快捷键,点击【分配】→【确定】 取消注释的自定义快捷键同理设置即可,注释和取消注释不…

Visual Studio Code2022无法使用注释快捷键

用了一个月vscode,使用ctrl/发现注释始终无法使用,最开始一直以为是系统或者版本问题,因为之前机器做过一次修改机器码的操作。 今天尝试解决了一下,发现问题可以通过键盘映射方案进行解决 文件->账户设置或者右上角头像图标 搜…

vs2019注释快捷键设置

vs2019默认的注释快捷键为ctrl+k+c 取消注释快捷键为ctrl+k+u 我们也可以自己设置 当然,也可以设置自己习惯的快捷键

VS中的设置和快捷键

一.相关设置 1.设置主题颜色 【工具】-》【选项】-》【常规】,选择主题颜色为浅色,点击确定。 2.设置背景颜色 【工具】-》【选项】-》【字体和颜色】,项背景颜色那里,点击自定义。 HSB(HSL)&#xff1a…

VS注释快捷键整理

在 Visual Studio IDE 中使用快捷键注释代码,无论是行注释还是块注释,第一步一定是选中要注释的内容(取消注释同样要先选中)! 当然,如果是行注释,不必选取整行,将光标定位到该行即可…

javassh客户端_简单的Java SSH客户端

javassh客户端 可以使用jcabi-ssh在Java中通过几行代码通过SSH执行shell命令: String hello = new Shell.Plain(new SSH("ssh.example.com", 22,"yegor", "-----BEGIN RSA PRIVATE KEY-----...") ).exec("echo Hello, world!"); jca…

Java打造一款SSH客户端,而且已开源

点击上方“Java基基”,选择“设为星标” 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数…

最新版本spring框架下载

首先spring的各种好就不说了;主要是最近spring将官网地址www.springsource.org改为了http://spring.io/(新网站设计的比较舒服,这难道是奔商业化的节奏去的吗?!);同时spring将原来比较容易找到的…

用 Java 打造一款 SSH 客户端,这个太强了。。

前言 最近由于项目需求,项目中需要实现一个WebSSH连接终端的功能,由于自己第一次做这类型功能,所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用,当时看到了很多这方面的项目,例如:GateOne、webssh、shellinabox等。 这些项目都可以很好地实现webssh的功能,但…

Java 打造一款 SSH 客户端,已开源~

来源:https://blog.csdn.net/NoCortY/article/details/104772431 前言 最近由于项目需求,项目中需要实现一个WebSSH连接终端的功能,由于自己第一次做这类型功能,所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用&#x…

官网下载最新版本Spring

目录 官网下载步骤官网下载地址 官网下载步骤 官网地址:https://spring.io/projects/spring-framework 1.点击右上角 Git 图标 2. 进入Spring的Git仓库 3. 进入Spring Framework Artifacts后点击"https://repo.spring.io" 4.进入Spring repository&a…

SSH框架整合demo

Struts、Spring、Hibernate整合 一、创建web工程,搭建Struts框架开发环境: 这里只导入了项目中所需要的重要的jar包,以后根据业务要求继续导入相关的包。 步骤1::导入struts框架所需的jar包步骤2:在web.xml中配置stru…