研究の掃溜ノオト
since 2011/2/13 知能ロボ研究の合間に思ったこととか書いてます。
NMFにスパース性を
NMFを実装しました!
これは NMF=Non-negative Matrix Factorization の略で
日本語にすると非負値行列分解
これは NMF=Non-negative Matrix Factorization の略で
日本語にすると非負値行列分解
NMFはPCAやICAと類似したデータの圧縮手法なのですが
その特徴はなんといっても行列の成分が全部非負であるということ!
例えば画像データは0~255という非負のスカラーの組みで表現されます.
これを2つの行列の積に分解した時やっぱりそれらの成分も非負になるようにします.
NMFについてはこちらが詳しいです.
しかしいざ自分で実装してみると思うように基底がとれず・・・
直感的に理解出来ない漠然とした基底ばかりになってしまいます。
原因はどうやら基底がスパースでないことにあるようで
今回はスパースなNMFの手法を解説した"Non-negative Matrix Factorization with Sparseness Constraints"を読みました.
”Non-negative Matrix Factorization with Sparseness Constraints”
特筆すべきはなんといってもスパースネスの定量的な定義でしょう!
この論文では, 与えられたベクトルxに対してそのベクトルのスパースネスを
と定義しています.
これはただひとつの成分が0でないときに1をとりすべての成分が等しい時に0を取るような振る舞いをします。
というのもL1ノルム÷L2ノルムという形上記の条件に従って √n〜1 までの範囲を動くからで, sparseness(x) はただそれを正規化しただけというわけです. (ちなみにnはベクトルの次元数)
この論文ではこの予め与えたスパースネスを満たすような基底及び係数を取ってくるNMFを提案しています。
それは勾配法で値を更新した後スパースネスを調節するという操作を繰り返すというものです.
どう考えてもこのスパースネスを調節するという操作が重要です.
これはL2ノルムを保ったままL1ノルムだけ変化させてスパースネスを調節するのですが
詳しいやり方は書いてあるのですがまだ理解が追いついてないです( ;∀;)
筆者はMATLAB用のパッケージを配布しているらしいですが
当然MATLABなんて持ってませんので今度Python で実装してみたいと思います.
その特徴はなんといっても行列の成分が全部非負であるということ!
例えば画像データは0~255という非負のスカラーの組みで表現されます.
これを2つの行列の積に分解した時やっぱりそれらの成分も非負になるようにします.
NMFについてはこちらが詳しいです.
しかしいざ自分で実装してみると思うように基底がとれず・・・
直感的に理解出来ない漠然とした基底ばかりになってしまいます。
原因はどうやら基底がスパースでないことにあるようで
今回はスパースなNMFの手法を解説した"Non-negative Matrix Factorization with Sparseness Constraints"を読みました.
”Non-negative Matrix Factorization with Sparseness Constraints”
特筆すべきはなんといってもスパースネスの定量的な定義でしょう!
この論文では, 与えられたベクトルxに対してそのベクトルのスパースネスを
と定義しています.
これはただひとつの成分が0でないときに1をとりすべての成分が等しい時に0を取るような振る舞いをします。
というのもL1ノルム÷L2ノルムという形上記の条件に従って √n〜1 までの範囲を動くからで, sparseness(x) はただそれを正規化しただけというわけです. (ちなみにnはベクトルの次元数)
この論文ではこの予め与えたスパースネスを満たすような基底及び係数を取ってくるNMFを提案しています。
それは勾配法で値を更新した後スパースネスを調節するという操作を繰り返すというものです.
どう考えてもこのスパースネスを調節するという操作が重要です.
これはL2ノルムを保ったままL1ノルムだけ変化させてスパースネスを調節するのですが
詳しいやり方は書いてあるのですがまだ理解が追いついてないです( ;∀;)
筆者はMATLAB用のパッケージを配布しているらしいですが
当然MATLABなんて持ってませんので今度Python で実装してみたいと思います.
PR
この記事へのトラックバック
トラックバックURL
この記事へのコメント