NMF-matlab
4321 ワード
matlab練習プログラム(非負行列分解)
このアルゴリズムはLeeとSeungが1999年にネイチャー誌に発表したものです.具体的な論文はここを見ます.http://www.seas.upenn.edu/~ddlee/Papers/nmf.pdf.
英語が読めなくても大丈夫です.この中国語の紹介を見てもいいです.http://wenku.baidu.com/view/94c8af0bf78a6529647d5331.html.
原理上の二つの文章はもうはっきりしました.私は自分の理解で紹介しています.
一般的にマトリクス分解はsvdや他の何かの分解でも行列を正の負の行列に分解しますが、彼のこの分解方法は行列を正の数だけの行列に完全に分解します.現実の世界では画像のように負の数はあまり意味がないので、正の行列だけに分解する分解方法は意味があります.natureのような牛Bの雑誌にも送られません.
ここは分解式です.
ここでrは分解行列のランクであり、Vは元行列の近似であり、WとHは分解した2つの行列である.
次はWとHの求め方です.反復アルゴリズムです.最初のWとHはランダムであればいいです.
コードについては、このブログを参考にしました.http://fxy1211.blog.163.com/blog/static/68255322007826111015905/このブロガーに本当に感謝しています.
以下はコードです.
以下は原図と再構成後の効果であり、ランクと反復回数が大きいほど再構成後の図は原図に近い.
原図
再構成図
これは自分の関連する方向の論文を見るので、偶然に論文の引用の中でこの計算方法を見ました.ですから、少し調べてみました.きっとよくないところがあります.このようにしましょう.
このアルゴリズムはLeeとSeungが1999年にネイチャー誌に発表したものです.具体的な論文はここを見ます.http://www.seas.upenn.edu/~ddlee/Papers/nmf.pdf.
英語が読めなくても大丈夫です.この中国語の紹介を見てもいいです.http://wenku.baidu.com/view/94c8af0bf78a6529647d5331.html.
原理上の二つの文章はもうはっきりしました.私は自分の理解で紹介しています.
一般的にマトリクス分解はsvdや他の何かの分解でも行列を正の負の行列に分解しますが、彼のこの分解方法は行列を正の数だけの行列に完全に分解します.現実の世界では画像のように負の数はあまり意味がないので、正の行列だけに分解する分解方法は意味があります.natureのような牛Bの雑誌にも送られません.
ここは分解式です.
ここでrは分解行列のランクであり、Vは元行列の近似であり、WとHは分解した2つの行列である.
次はWとHの求め方です.反復アルゴリズムです.最初のWとHはランダムであればいいです.
コードについては、このブログを参考にしました.http://fxy1211.blog.163.com/blog/static/68255322007826111015905/このブロガーに本当に感謝しています.
以下はコードです.
clear all;
close all;
clc;
V=double(imread('lena.jpg'));
imshow(mat2gray(V));
[i u]=size(V); % V
r=100; %
W=rand(i,r); % WH,
H=rand(r,u);
maviter=100; %
for iter=1:maviter
W=W.*((V./(W*H))*H'); %
W=W./(ones(i,1)*sum(W));
H=H.*(W'*(V./(W*H)));
end
img_V=W*H;
figure;
imshow(mat2gray(img_V));
以下は原図と再構成後の効果であり、ランクと反復回数が大きいほど再構成後の図は原図に近い.
原図
再構成図
これは自分の関連する方向の論文を見るので、偶然に論文の引用の中でこの計算方法を見ました.ですから、少し調べてみました.きっとよくないところがあります.このようにしましょう.