机器学习笔记:非负矩阵分解问题 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.1?squared frobenius norm
?
?4.2 KL散度
X,Y分別是原矩陣和WH的乘積結果
4.3??Itakura-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 - 博客園 (cnblogs.com)?
7 NMF的實現(sklearn)
#導入庫 from sklearn.decomposition import NMF import 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 = model.components_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 '''總結
以上是生活随笔為你收集整理的机器学习笔记:非负矩阵分解问题 NMF的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 报错解决方法1:‘A GDAL API
- 下一篇: 机器学习笔记:FLOPs