關於NMF(Non-negative Matrix Factorization )

 著名的科學雜誌《Nature》於1999年刊登了兩位科學家D.D.Lee和H.S.Seung對數學中非負矩陣研究的突出成果。該文提出了一種新的矩陣分解思想――非負矩陣分解(Non-negative Matrix Factorization,NMF)算法,即NMF是在矩陣中全部元素均爲非負數約束條件之下的矩陣分解方法。該論文的發表迅速引發了各個領域中的科學研究人員的重視:一方面,科學研究中的不少大規模數據的分析方法須要經過矩陣形式進行有效處理,而NMF思想則爲人類處理大規模數據提供了一種新的途徑;另外一方面,NMF分解算法相較於傳統的一些算法而言,具備實現上的簡便性、分解形式和分解結果上的可解釋性,以及佔用存儲空間少等諸多優勢。
  信息時代使得人類面臨分析或處理各類大規模數據信息的要求,如衛星傳回的大量圖像、機器人接受到的實時視頻流、數據庫中的大規模文本、Web上的海量信息等。處理這類信息時,矩陣是人們最經常使用的數學表達方式,好比一幅圖像就剛好與一個矩陣對應,矩陣中的每一個位置存放着圖像中一個像素的空間位置和色彩信息。因爲實際問題中這樣的矩陣很龐大,其中存放的信息分佈每每不均勻,所以直接處理這樣的矩陣效率低下,這對不少實際問題而言就失去了實用意義。爲高效處理這些經過矩陣存放的數據,一個關鍵的必要步驟即是對矩陣進行分解操做。經過矩陣分解,一方面將描述問題的矩陣的維數進行削減,另外一方面也能夠對大量的數據進行壓縮和歸納。算法

  在科學文獻中,討論利用矩陣分解來解決實際問題的分析方法不少,如PCA(主成分分析)、ICA(獨立成分分析)、SVD(奇異值分解)、VQ(矢量量化)等。在全部這些方法中,原始的大矩陣V被近似分解爲低秩的V=WH形式。這些方法的共同特色是,因子W和H中的元素可爲正或負,即便輸入的初始矩陣元素是全正的,傳統的秩削減算法也不能保證原始數據的非負性。在數學上,從計算的觀點看,分解結果中存在負值是正確的,但負值元素在實際問題中每每是沒有意義的。例如圖像數據中不可能有負值的像素點;在文檔統計中,負值也是沒法解釋的。所以,探索矩陣的非負分解方法一直是頗有意義的研究問題,正是如此,Lee和Seung兩位科學家的NMF方法才獲得人們的如此關注。
  NMF是一種新的矩陣分解算法,它克服了傳統矩陣分解的不少問題,經過尋找上下文有意義的解決方法,提供解釋數據的更深見解。NMF經過尋找低秩,非負分解那些都爲非負值的矩陣。這在現實的應用中有不少例子,如數字圖像中的像素通常爲非負數,文本分析中的單詞統計也老是非負數,股票價格也老是正數等等。NMF的基本思想能夠簡單描述爲:對於任意給定的一個非負矩陣A,NMF算法可以尋找到一個非負矩陣U和一個非負矩陣V,使得知足,從而將一個非負的矩陣分解爲左右兩個非負矩陣的乘積。因爲分解先後的矩陣中僅包含非負的元素,所以,原矩陣A中的一列向量能夠解釋爲對左矩陣U中全部列向量(稱爲基向量)的加權和,而權重係數爲右矩陣V中對應列向量中的元素。這種基於基向量組合的表示形式具備很直觀的語義解釋,它反映了人類思惟中「局部構成總體」的概念。研究指出,非負矩陣分解是個NP問題,能夠劃爲優化問題用迭代方法交替求解U和V。NMF算法提供了基於簡單迭代的求解U,V的方法,求解方法具備收斂速度快、左右非負矩陣存儲空間小的特色,它能將高維的數據矩陣降維處理,適合處理大規模數據。利用NMF進行文本、圖像大規模數據的分析方法,較傳統的處理算法速度更快、更便捷。NMF思想的提出迅速獲得了不少人的重視,並有不少將這種思想應用到實際中成功解決具體實際問題的例子。
  非負矩陣的具體算法以下:數據庫

  輸入參數:X,R,MAXITER,其中X爲被分解的矩陣,R爲降階後B的秩,MAXITER爲迭代次數優化

  輸出參數:B,H3d

  1):初始化矩陣B,H爲非負數,同時對B的每一列數據歸一化視頻

   2):for i=1:MAXITERblog

       a:更新H矩陣一行元素:H(i,j)=H(i,j)*(B'*X)(i,j)/(B'*B*H)(i,j)圖片

      b:更新B的一列元素:B(k,j)=B(k,j)*(X*H')(k,j)/(B*H*H')(k,j);文檔

                     c:從新對B進行列歸一化get

       3)end數學

matlab源程序以下:

dim=size(X);                                    %計算x的規格
X=double(X);
B=10*rand(dim(1),r);                            %初始化BH,爲非負數
B=B./(ones(dim(1),1)*sum(B));                   %歸一化B的每一列

H=10*rand(r,dim(2));

maxiter=100;                                    %最大迭代次數
for iter=1:maxiter
    H=H.*(B'*(X./(B*H)));
    B=B.*((X./(B*H))*H');
    B=B./(ones(dim(1),1)*sum(B));
end

效果以下:

    

                         原始圖片                                                                  分解後重構的圖片

參考文獻:

基於非負矩陣分解的人臉表情識別研究

非負矩陣分解:數學的奇妙力量

相片來自我大姨(攝於2005.02)

 

下一步嘗試採用NMF提取特徵。     

 

好文,轉自:http://fxy1211.blog.163.com/blog/static/68255322007826111015905/

相關文章
相關標籤/搜索