*注意)この「べじぱみゅの学習メモ」のカテゴリー記事は、ワタクシ自身がこれまでに勉強したいろいろな項目について、テキストにあんまり書いてない内容などを勝手に妄想したメモです。
ワタクシ自身の備忘録のために書いており「初学者にわかりやすく説明する」というものではございません。
導入なしに唐突に話が始まり、おそらく意味不明な文章かもしれません。
しかし、せっかく考えたことなので、記事の内容がもし誰か1人でもお役に立てれば幸いです。


行列で表現すると・・・

前回のお話を純粋に数式で表現すると、

簡単なスペクトル(列)の分解(式)


こういう作業をやったことになります。もとの行列(波長の数I、時間経過の数J個、計I×J個のデータ)を、「純物質のスペクトル」2つ(それぞれI個の数値データ)と、2つの「重み付け係数」(J個の数値データが2つ分)の掛け算で近似(これこそが行列分解)することになります。

ちなみに3成分の場合(これぐらいがまともに実行できるMAXかと思います)

簡単なスペクトル(列)の分解(式3成分)


のように分解することを目指します。実態としては2成分で頑張ることが多いので、これ以降は2成分を意識した話をしますが、3成分以上でも議論の本質は一緒です。

分解の式は「イコール」にはなっていません。もし奇跡が起きればイコールになりますが、実際のデータは測定誤差(ノイズ)を含んでいますし、測定誤差がなかったとしても現実のサンプルには2つの成分それぞれの重み付けだけでは表されない効果(混ぜ合わせることで別の吸収帯が発生、とか)があり得ます。よって完全なイコールを目指すのではなく、「なるべく近くなるようにする」ことを目指します。基本は「最小二乗法」なのですがね。

具体的には、I行2列の行列Tと、2行J列の行列Jについて、その積が元のデータ行列になるべく近くなるような成分を定めに行くのです。

NMFの行列分解式(1)

こういうことですね。今はK=2ですが、K>2でも議論の本質は同じです。
「なるべく近く」するための方針自体は単純で、両者の「距離」を最小にすればよいのです。つまり両者の差の2乗和

NMFの行列分解式(偏差の2乗和)


これを最小化させます。これは2つの行列の「距離」に相当する量で、実はこの「距離」の表現式にいくつか種類があります。ここで示した「差の2乗」は最も簡単で一般的な「ユークリッド距離」に相当します。信号処理の分野などでは、「差の2乗」ではない別の形式を用いることもあるのですが、ここでは最も基本的なユークリッド距離で押し通します。距離の表現によって、収束の仕方が少し変わってきます。

この「偏差の2乗を最小にしましょう」という考え方自体は割と単純で、それほど疑問が沸くところではないと思います。しかし実際の式の導出はちょっと面倒です。波長の数Iや時間・サンプルの数Jは10とか100とか、あるいはそれ以上に大きな値です。よって「偏差の2乗和を最小にする行列成分」は有限回の演算では定まらず、「解に向かって収束する」逐次計算を行うことになります。

導出はあまりにテクニカルなので省略します。ご興味のある方は「非負値行列因子分解」で検索すればいろいろな資料が読めますので、そちらをご参照くだされ。

結果を示すと、行列T(純物質のスペクトル)および行列V(重み係数)の各成分について、以下の逐次計算を収束するまで繰り返せばよい、ということになります。

NMFの行列分解式(ループ計算式)

ただし

NMFの行列分解式(分解結果)

です。これは「そのループ時点での分解結果」とでも名づけるべきでしょうか。
さて、次回はこのループについてもっとじっくり考えます。




はっぴぃ理系らいふ、いぇい
ヽ(・ε・)人(・ε・)ノ キミモナカマニナロウゼ
   

【文責 べじぱみゅ】