700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 机器学习笔记:非负矩阵分解问题 NMF

机器学习笔记:非负矩阵分解问题 NMF

时间:2022-12-05 01:00:19

相关推荐

机器学习笔记:非负矩阵分解问题 NMF

1 NMF介绍

NMF(Non-negative matrix factorization),即对于任意给定的一个非负矩阵V,其能够寻找到一个非负矩阵W和一个非负矩阵H,满足条件V=W*H,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。

其中,V矩阵中每一列代表一个观测点的信息(observation),每一行代表一个特征(feature);W矩阵称为基矩阵,H矩阵称为系数矩阵或权重矩阵。此时V矩阵的每一列,都相当于基矩阵W的每一列对于H矩阵每一列的加权和。

这时用系数矩阵H代替原始矩阵,就可以实现对原始矩阵进行降维,得到数据特征的降维矩阵,从而减少存储空间。(H的每一个列向量可以看成矩阵V对应的列向量,投影到基矩阵W的每一个列向量得到的坐标)

NMF本质上说是一种矩阵分解的方法,它的特点是可以将一个大的非负矩阵分解为两个小的非负矩阵,又因为分解后的矩阵也是非负的,所以也可以继续分解。

非负矩阵分解的关键是“非负”,即原数据和新基底都必须是非负数,或者说位于“第一象限”,这样原数据投影在新基底上的数值才自然也是非负数。

2 用数学语言定义NMF

将矩阵分解问题转换成两个矩阵之间误差最小化的问题

3 W和H的迭代公式

采用的是迭代法,一步步逼近最终的结果,当计算得到的两个矩阵W和H收敛时,就说明分解成功。

需要注意的是,原矩阵和分解之后两个矩阵的乘积并不要求完全相等,可以存在一定程度上的误差。

4 NMF的损失函数

4.0 naive form

用 矩阵表示,则是:

4.1squared frobenius norm

4.2 KL散度

X,Y分别是原矩阵和WH的乘积结果

4.3Itakura-Saito (IS)

5 NMF应用举例

5.1:文本主题模型

假设我们输入有m个词,n个文本。Aij对应的是第i个词在第j个文本的特征值。

经过NMF分解后,Wik对应的是第i个词和第k个“主题”的概率相关度;Hkj对应的是第j个文本和第k个“主题”的概率相关度

5.2 图像处理

6 NMF的不足

NMF作为一个漂亮的矩阵分解方法,它可以很好的用于主题模型,并且使主题的结果有基于概率分布的解释性。

但是NMF只能对训练样本中的文本进行主题识别,而对不在样本中的文本识别不一定很准确。

文本主题模型之非负矩阵分解(NMF) - 刘建平Pinard - 博客园 ()

7 NMF的实现(sklearn)

#导入库from sklearn.decomposition import NMFimport numpy as npX = np.array([[1, 1], [2, 1], [3, 1.2], [4, 1], [5, 0.8], [6, 1]])#定义NMF模型model = NMF(n_components=2, #分解的稠密矩阵中k的大小beta_loss='frobenius', # {'frobenius', 'kullback-leibler', 'itakura-saito'}#对应的是前面说的1~3三种损失函数# 一般来说,默认使用naive的损失函数('frobenius',同时alpha默认为0)tol=1e-4, # 停止迭代的极限条件init='random',# W H 的初始化方法max_iter=200, # 最大迭代次数l1_ratio=0., # L1正则化比例alpha=0., # 正则化参数random_state=0)#打印model 构造函数各参数print(model.get_params())'''{'alpha': 0.0, 'beta_loss': 'frobenius', 'init': 'random', 'l1_ratio': 0.0, 'max_iter': 200, 'n_components': 2, 'random_state': 0, 'shuffle': False, 'solver': 'cd', 'tol': 0.0001, 'verbose': 0}'''W = model.fit_transform(X)#相当于model.fit(X) 和 W=model.transform(X) 两步H = ponents_print(W,'\n',H,'\n',model.n_iter_,'\n',model.reconstruction_err_)'''[[0. 0.46880684][0.55699523 0.3894146 ][1.00331638 0.41925352][1.6733999 0.22926926][2.34349311 0.03927954][2.78981512 0.06911798]][[2.09783018 0.30560234][2.13443044 2.13171694]]30 0.0011599349216014024'''

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。