导航:首页 > 编程语言 > 非负矩阵分解python

非负矩阵分解python

发布时间:2025-03-31 08:03:15

⑴ 非负矩阵分解(NMF)及一个小实例

非负矩阵分解:拆解数字之谜与一个生动实例解析

在最近的一项挑战中,我们面临着一个独特的问题——利用非负矩阵分解(NMF)技术,将二维空间中的数字逐一拆分,仿佛在寻找一幅图像的组成密码。让我们先来了解一下NMF的魔法:它就像一个魔术师,将非负矩阵V分解为两个非负伙伴——W和H,通过巧妙的加权组合,重现出原始数据的精髓。



想象一下,NMF的基本理念就像是这样:每个数字在二维图中,就像一个独特的粒子,通过非负矩阵W和H的调和作用,它们组合成了一幅完整的画面。W矩阵就像一个调色板,H矩阵则是一组基础元素的权重,共同构建起数字的视觉拼图。与PCA和VQ分解不同,NMF聚焦于提取个体特征,如眼睛、鼻子、嘴巴,然后通过权重分配,生成出完整的个体形象。



深入探索NMF的细节,你会发现它背后是一个迭代优化的过程。原始论文Algorithms for Non-negative Matrix Factorization中,作者们提出了一种乘法更新的算法,将矩阵分解转化为寻找最小欧氏距离的解。在我们的问题中,每两个数字构成一个64x64像素的子图,转化为一个4096维的向量V,目标是分解为8个主特征,即W矩阵为4096x8,H矩阵为8x64。



步骤如下:首先,随机初始化W和H矩阵,设定迭代次数和误差阈值,然后采用乘法更新规则,逐步逼近最优化解。在每个循环中,W矩阵的每一列对应一个数字特征,经过矩阵变换和可视化,我们能看到8个清晰的数字轮廓,就像从一幅复杂的数字拼图中分离出来一样。在1000轮迭代后,大约9秒的时间,我们就能获得令人满意的答案,NMF的威力可见一斑。



想要亲身体验NMF的魅力?请访问代码仓库FLYYZJ/machine_learning_algorithms,那里有处理过的data.csv文件,以及使用python3的示例代码。借助pandas、numpy和matplotlib这些工具,你也可以尝试自己的数据,看看NMF如何为你的数字世界带来新的解读。



在这个实际操作中,非负矩阵分解不仅展示了数学理论在实际问题中的应用,更是一次探索数字世界秘密的旅程。每一个数字的分离,都是一次对矩阵结构深入理解的提升。通过NMF,我们看到了数据背后的模式和联系,这正是它的魅力所在。

⑵ python常用到哪些库

Python作为一个设计优秀的程序语言,现在已广泛应用于各种领域,依靠其强大的第三方类库,Python在各个领域都能发挥巨大的作用。
下面我们就来看一下python中常用到的库:
数值计算库:
1. NumPy
支持多维数组与矩阵运算,也针对数组运算提供大量的数学函数库。通常与SciPy和Matplotlib一起使用,支持比Python更多种类的数值类型,其中定义的最重要的对象是称为ndarray的n维数组类型,用于描述相同类型的元素集合,可以使用基于0的索引访问集合中元素。
2. SciPy
在NumPy库的基础上增加了众多的数学、科学及工程计算中常用的库函数,如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等,可进行插值处理、信号滤波,以及使用C语言加速计算。
3. Pandas
基于NumPy的一种工具,为解决数据分析任务而生。纳入大量库和一些标准的数据模型,提供高效地操作大型数据集所需的工具及大量的能快速便捷处理数据的函数和方法,为时间序列分析提供很好的支持,提供多种数据结构,如Series、Time-Series、DataFrame和Panel。
数据可视化库:
4. Matplotlib
第一个Python可视化库,有许多别的程序库都是建立在其基础上或者直接调用该库,可以很方便地得到数据的大致信息,功能非常强大,但也非常复杂。
5. Seaborn
利用了Matplotlib,用简洁的代码来制作好看的图表。与Matplotlib最大的区别为默认绘图风格和色彩搭配都具有现代美感。
6. ggplot
基于R的一个作图库ggplot2,同时利用了源于《图像语法》(The Grammar of Graphics)中的概念,允许叠加不同的图层来完成一幅图,并不适用于制作非常个性化的图像,为操作的简洁度而牺牲了图像的复杂度。
7. Bokeh
跟ggplot一样,Bokeh也基于《图形语法》的概念。与ggplot不同之处为它完全基于Python而不是从R处引用。长处在于能用于制作可交互、可直接用于网络的图表。图表可以输出为JSON对象、HTML文档或者可交互的网络应用。
8. Plotly
可以通过Python notebook使用,与Bokeh一样致力于交互图表的制作,但提供在别的库中几乎没有的几种图表类型,如等值线图、树形图和三维图表。
9. pygal
与Bokeh和Plotly一样,提供可直接嵌入网络浏览器的可交互图像。与其他两者的主要区别在于可将图表输出为SVG格式,所有的图表都被封装成方法,且默认的风格也很漂亮,用几行代码就可以很容易地制作出漂亮的图表。
10. geoplotlib
用于制作地图和地理相关数据的工具箱。可用来制作多种地图,比如等值区域图、热度图、点密度图。必须安装Pyglet(一个面向对象编程接口)方可使用。
11. missingno
用图像的方式快速评估数据缺失的情况,可根据数据的完整度对数据进行排序或过滤,或者根据热度图或树状图对数据进行修正。
web开发库:
12. Django
一个高级的Python Web框架,支持快速开发,提供从模板引擎到ORM所需的一切东西,使用该库构建App时,必须遵循Django的方式。
13. Socket
一个套接字通讯底层库,用于在服务器和客户端间建立TCP或UDP连接,通过连接发送请求与响应。
14. Flask
一个基于Werkzeug、Jinja 2的Python轻量级框架(microframework),默认配备Jinja模板引擎,也包含其他模板引擎或ORM供选择,适合用来编写API服务(RESTful rervices)。
15. Twisted
一个使用Python实现的基于事件驱动的网络引擎框架,建立在deferred object之上,一个通过异步架构实现的高性能的引擎,不适用于编写常规的Web Apps,更适用于底层网络。
数据库管理:

16. MySQL-python
又称MySQLdb,是Python连接MySQL最流行的一个驱动,很多框架也基于此库进行开发。只支持Python 2.x,且安装时有许多前置条件。由于该库基于C语言开发,在Windows平台上的安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代品为衍生版本。
17. mysqlclient
完全兼容MySQLdb,同时支持Python 3.x,是Django ORM的依赖工具,可使用原生SQL来操作数据库,安装方式与MySQLdb一致。
18. PyMySQL
纯Python实现的驱动,速度比MySQLdb慢,最大的特点为安装方式简洁,同时也兼容MySQL-python。
19. SQLAlchemy
一种既支持原生SQL,又支持ORM的工具。ORM是Python对象与数据库关系表的一种映射关系,可有效提高写代码的速度,同时兼容多种数据库系统,如SQLite、MySQL、PostgreSQL,代价为性能上的一些损失。
自动化运维:
20. jumpsever跳板机
一种由Python编写的开源跳板机(堡垒机)系统,实现了跳板机的基本功能,包含认证、授权和审计,集成了Ansible、批量命令等。
支持WebTerminal Bootstrap编写,界面美观,自动收集硬件信息,支持录像回放、命令搜索、实时监控、批量上传下载等功能,基于SSH协议进行管理,客户端无须安装agent。主要用于解决可视化安全管理,因完全开源,容易再次开发。
21. Mage分布式监控系统
一种用Python开发的自动化监控系统,可监控常用系统服务、应用、网络设备,可在一台主机上监控多个不同服务,不同服务的监控间隔可以不同,同一个服务在不同主机上的监控间隔、报警阈值可以不同,并提供数据可视化界面。
22. Mage的CMDB
一种用Python开发的硬件管理系统,包含采集硬件数据、API、页面管理3部分功能,主要用于自动化管理笔记本、路由器等常见设备的日常使用。由服务器的客户端采集硬件数据,将硬件信息发送至API,API负责将获取的数据保存至数据库中,后台管理程序负责对服务器信息进行配置和展示。
23. 任务调度系统
一种由Python开发的任务调度系统,主要用于自动化地将一个服务进程分布到其他多个机器的多个进程中,一个服务进程可作为调度者依靠网络通信完成这一工作。
24. Python运维流程系统
一种使用Python语言编写的调度和监控工作流的平台,内部用于创建、监控和调整数据管道。允许工作流开发人员轻松创建、维护和周期性地调度运行工作流,包括了如数据存储、增长分析、Email发送、A/B测试等诸多跨多部门的用例。
GUI编程:
25. Tkinter
一个Python的标准GUI库,可以快速地创建GUI应用程序,可以在大多数的UNIX平台下使用,同样可以应用在Windows和Macintosh系统中,Tkinter 8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
26. wxPython
一款开源软件跨平台GUI库wxWidgets的Python封装和Python模块,是Python语言的一套优秀的GUI图形库,允许程序员很方便地创建完整的、功能健全的GUI用户界面。
27. PyQt
一个创建GUI应用程序的工具库,是Python编程语言和Qt的成功融合,可以运行在所有主要操作系统上,包括UNIX、Windows和Mac。PyQt采用双许可证,开发人员可以选择GPL和商业许可,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。
28. PySide
一个跨平台的应用程式框架Qt的Python绑定版本,提供与PyQt类似的功能,并相容API,但与PyQt不同处为其使用LGPL授权。
更多Python知识请关注Python自学网。

阅读全文

与非负矩阵分解python相关的资料

热点内容
电阻单片机代号 浏览:467
来画app怎么添加对话框 浏览:316
python序列化分布式 浏览:105
域名服务器是什么形式 浏览:679
rsa加密解密速度快 浏览:922
mac电脑如何单片机开发 浏览:545
纪念日app怎么用小插件 浏览:329
如何更改安卓手机所在地区 浏览:215
程序员负债120万 浏览:78
阶层pdf 浏览:378
linuxgit安装配置 浏览:317
用源码搭建app要改什么 浏览:40
密码学教程pdf 浏览:1
亚马逊做的加密货币 浏览:79
怎么搭建云播服务器 浏览:865
网站客服机器人源码 浏览:315
2021程序员的出路 浏览:545
发行与承销pdf 浏览:943
编译器中的主要数据结构 浏览:894
7z解压ziputf8 浏览:96