首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 为何选择机器学习
1.1.1 机器学习能够解决的问题
1.1.2 熟悉任务和数据
1.2 为何选择Python
1.3 scikit-learn
1.4 必要的库和工具
1.4.1 Jupyter Notebook
1.4.2 NumPy
1.4.3 SciPy
1.4.4 matplotlib
1.4.5 pandas
1.4.6 mglearn
1.5 Python 2 与Python 3 的对比
1.7 第 一个应用:鸢尾花分类
1.7.1 初识数据
1.7.2 衡量模型是否成功:训练数据与测试数据
1.7.3 要事第 一:观察数据
1.7.4 构建第 一个模型:k 近邻算法
1.7.5 做出预测
1.7.6 评估模型
2.1 分类与回归
2.2 泛化、过拟合与欠拟合
2.3 监督学习算法
2.3.1 一些样本数据集
2.3.2 k 近邻
2.3.3 线性模型
2.3.4 朴素贝叶斯分类器
2.3.5 决策树
2.3.6 决策树集成
2.3.7 核支持向量机
2.3.8 神经网络(深度学习)
2.4 分类器的不确定度估计
2.4.1 决策函数
2.4.2 预测概率
2.4.3 多分类问题的不确定度
3.1 无监督学习的类型
3.2 无监督学习的挑战
3.3 预处理与缩放
3.3.1 不同类型的预处理
3.3.2 应用数据变换
3.3.3 对训练数据和测试数据进行相同的缩放
3.3.4 预处理对监督学习的作用
3.4 降维、特征提取与流形学习
3.4.1 主成分分析
3.4.2 非负矩阵分解
3.4.3 用t-SNE 进行流形学习
3.5 聚类
3.5.1 k 均值聚类
3.5.2 凝聚聚类
3.5.3 DBSCAN
3.5.4 聚类算法的对比与评估
3.5.5 聚类方法小结
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(上)
小册名称:Python机器学习基础教程(上)
### 3.4.2 非负矩阵分解(Non-negative Matrix Factorization, NMF) 在深入探讨Python在机器学习领域的应用时,非负矩阵分解(NMF)作为一种强大的数据降维和特征提取技术,无疑占据了重要的一席之地。NMF不仅广泛应用于文本挖掘、图像处理、推荐系统等领域,还因其非负性约束而使得分解结果更具解释性和直观性。本章节将详细介绍非负矩阵分解的基本原理、算法实现、应用场景以及在Python中的实践方法。 #### 3.4.2.1 非负矩阵分解概述 非负矩阵分解(NMF)是一种矩阵分解方法,它要求分解后的所有矩阵元素均非负。给定一个非负矩阵$V$,NMF旨在找到两个非负矩阵$W$(基矩阵)和$H$(系数矩阵),使得它们的乘积近似等于原矩阵$V$,即: $$ V \approx WH $$ 这里,$V$的每一列可以看作是数据集中的一个样本,而每一行则对应一个特征。NMF通过分解$V$,使得我们可以从原始数据中发现隐藏的结构或特征,这些特征(由$W$的列表示)通常具有高度的可解释性,因为非负性约束鼓励了局部特征和组件的稀疏表达。 #### 3.4.2.2 基本原理 NMF的核心思想在于,通过非负性和线性组合来近似原始数据,从而揭示数据的潜在结构。具体来说,NMF假设原始数据可以由一组基(或称为“部分”)的非负线性组合来表示,这些基本身也是非负的,且它们的组合方式(由$H$矩阵描述)同样是非负的。这种表示方式有助于我们理解数据的生成过程,并便于后续的分析和解释。 #### 3.4.2.3 算法实现 NMF的求解通常是一个优化问题,目标是找到使重构误差(如欧几里得距离的平方或Kullback-Leibler散度)最小的$W$和$H$。常见的优化算法包括乘法更新规则(Multiplicative Update Rules)、梯度下降法(Gradient Descent)以及交替最小二乘法(Alternating Least Squares, ALS)等。 - **乘法更新规则**:这是NMF中最常用的优化方法之一,通过迭代更新$W$和$H$的每一个元素来最小化目标函数。每次迭代中,每个元素的更新都基于其当前值与其他相关元素的乘积的比例进行调整。 - **梯度下降法**:将NMF的目标函数视为一个关于$W$和$H$的连续可微函数,通过计算梯度并沿着梯度反方向更新$W$和$H$,逐步逼近最优解。 - **交替最小二乘法**:每次固定一个矩阵(如$W$),通过求解最小二乘问题来更新另一个矩阵(如$H$),然后交换角色,直至收敛。 #### 3.4.2.4 Python实践 在Python中,我们可以使用`scikit-learn`库中的`NMF`类来轻松实现非负矩阵分解。以下是一个简单的示例,展示了如何使用`scikit-learn`进行NMF分解: ```python from sklearn.decomposition import NMF import numpy as np # 假设V是一个非负矩阵 V = np.array([[1, 1, 2], [2, 1, 5], [3, 1.5, 2.5]]) # 初始化NMF模型,设置组件数(即W的列数) nmf = NMF(n_components=2, init='random', random_state=0) # 拟合模型 W = nmf.fit_transform(V) H = nmf.components_ # 输出结果 print("W(系数矩阵):\n", W) print("H(基矩阵):\n", H) # 重构原始矩阵 V_reconstructed = np.dot(W, H) print("重构后的矩阵:\n", V_reconstructed) ``` 在这个例子中,我们首先创建了一个非负矩阵`V`,然后使用`NMF`类进行分解,指定了想要找到的基的数量(`n_components=2`)。通过调用`fit_transform`方法,我们同时完成了模型的训练和数据的转换,得到了系数矩阵`W`和基矩阵`H`。最后,我们通过矩阵乘法重构了原始矩阵,并打印出了结果。 #### 3.4.2.5 应用场景 NMF因其独特的非负性和稀疏性约束,在众多领域展现出了强大的应用价值: - **文本挖掘**:在文档-词汇矩阵上应用NMF,可以识别出文档的主题或主题词,帮助进行文档聚类、主题建模等任务。 - **图像处理**:将图像像素矩阵进行NMF分解,可以提取出图像的基础元素(如颜色、纹理等),用于图像压缩、去噪或特征提取。 - **推荐系统**:在用户和商品交互矩阵上应用NMF,可以发现用户的潜在兴趣偏好和商品的特征群组,从而生成个性化推荐。 - **生物信息学**:在基因表达数据上应用NMF,可以识别出具有相似表达模式的基因群组,进而研究这些基因的功能和调控机制。 #### 3.4.2.6 结论 非负矩阵分解作为一种强大的数据分析和降维技术,通过其非负性和稀疏性约束,为数据的理解和解释提供了新的视角。在Python中,利用`scikit-learn`等库可以方便地实现NMF,并应用于多种实际场景中。随着数据科学和机器学习领域的不断发展,NMF有望在更多领域发挥其独特的优势。
上一篇:
3.4.1 主成分分析
下一篇:
3.4.3 用t-SNE 进行流形学习
该分类下的相关小册推荐:
Python爬虫入门与实战开发(上)
Python甚础Django与爬虫
Python神经网络入门与实践
Python编程轻松进阶(三)
剑指Python(万变不离其宗)
Python合辑7-集合、列表与元组
Python机器学习基础教程(下)
Python合辑9-判断和循环
Python3网络爬虫开发实战(下)
Python自动化办公实战
Python合辑6-字典专题
Python高性能编程与实战