機器學習_學習筆記系列(67):非負矩陣分解(Non-negative Matrix Factorization)
前幾回我們介紹兩個Decomposition的方法,像是
Eigen Decomposition
Singular Vector Decomposition
而今天我們要來介紹新的拆解的方法 — Non-negative Matrix Factorization (NMF)
Non-negative Matrix Factorization
關於NMF的理念,其實也是非常值觀,假設我們有一組資料集X,我們希望
把X拆解成H和W兩個矩陣,其中
其中K就是我們latent features的數量。
但是在這邊得特別注意NMF,我不能總是找到H和W讓X=WH,用最極端的例子試想,如果K=1的話,幾乎不可能讓其相等。
Algorithms
對於要求解H和W最主流的方式就是利用Lee and Seung的multiplicative update rule,這篇Paper的名稱就叫做
Algorithms for Non-negative Matrix Factorization
另位這兩位作者也都是跨領域的天才,都是從Physics跳到CS,而且也都去過bell lab和MIT,現在一位在Cornell Tech一位在Princeton。
回歸正題對於NMF的演算法,其實和我們之前提到的方法非常像,都是先固定W更新H,再固定H更新W,然後一直執行這樣的步驟直到收斂為止
所以在第一步,我們會先用random number初始化我們的參數H,然後計算W=X/H。
接下來就是進入我們的迴圈
收先更新H
接著再更新W
接下來就是重複這樣的步驟直到
收斂為止
Example
接下來我們來看實際例子,原圖
NMF(K=30)
Python Sample Code:
Github:
Reference:
[1] Daniel D. Lee & H. Sebastian Seung (2001). Algorithms for Non-negative Matrix Factorization. Advances in Neural Information Processing Systems 13: Proceedings of the 2000 Conference. MIT Press. pp. 556–562.