NMF演算法 非負矩陣分解演算法 python實現

2021-08-28 21:51:43 字數 1046 閱讀 2362

nmf演算法:非負矩陣分解演算法。

**目標:**將乙個大矩陣分解成兩個稍小的矩陣(利用矩陣的乘法)。

要求:待分解矩陣不能有負值。因為負值對於資料是無效的。

假定有乙個元資料矩陣v,目標是將其分解成兩個非負矩陣w和h相乘的形式。

**v = w * h ** (這邊需要注意一些維度也就是角標,我就會直接寫了)

其中,w稱為權重係數矩陣,而h則為特徵向量(可以反過來說都沒關係,只是個符號表示)

那麼如何來求得w矩陣和h矩陣? 可以採用最基本的梯隊下降法:先初始化乙個w和h矩陣,然後通過最小化r和r『之間差值來對w和h進行更新。

目標函式:

a rg

min1

/2∣∣

v−wh

∣∣2=

∑i,j

(vij

−whi

j)

2(v_ij - wh_ij)^2}

argmin

1/2∣

∣v−w

h∣∣2

=i,j

∑​(v

i​j−

whi​

j)2其用於降低維度來說也是非常有用的。具體可以先用訓練集分解出w和h,然後再用權重矩陣w對測試集進行分解,就能夠得到其特徵向量。

上面是我nmfpython實現源**

另外,現在python中有nmf的包可以直接地呼叫。

在sklearn庫中,可以使用sklearn.decomposition.nmf加nmf演算法,主要引數有:

n_components:用於指定分解後矩陣的單個維度k,這個引數也可以看做,降維後希望留下的特徵的數量;

init:w矩陣和h矩陣的初始化方式,預設為『nndsvdar』

from sklearn.decomposition import nmf

非負矩陣分解 NMF 簡介

非負矩陣分解,顧名思義就是,將非負的大矩陣分解成兩個非負的小矩陣。回顧矩陣分解本身,在 公式 1 中的v是乙個n m維的矩陣,其中每一列就是 那麼非負和其它的有什麼不同呢?下面我就盜一張圖來直觀地展示幾種矩陣分解方法的效果差異。出自lee and seung 1999 圖中就對比了三種方法的區別。v...

python 非負矩陣分解 NMF

非負矩陣分解是矩陣中所有元素均為非負數約束條件下的矩陣分解,其基本思想 給定乙個非負矩陣v,nmf能夠找到乙個非負矩陣w和乙個非負矩陣h,使得矩陣w和矩陣h的乘積近似等於矩陣v中的值。h矩陣 係數矩陣 nmf廣泛應用於影象分析,文字挖掘和語音處理鄰域。nmf矩陣分解優化目標 最小化w矩陣h矩陣的乘積...

降維方法 非負矩陣分解 NMF

非負矩陣分解 non negative matrix factorization 作為一種非監督式的降維方法,其主要思想正如其名字描述的那樣 將乙個非負原始矩陣分解為兩個非負矩陣的積 vm n w m r v r n vm n wm r v r n 矩陣v v 為原始資料矩陣,包含 n role p...