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
ij−
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...