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


単純だったらいいけど・・・

前回示したような「スペクトル」を実際に取得したら、やることはいろいろありますが、その代表が「成分分離」です。今回の例だと、初期は横軸50らへんにピークがあり、途中から横軸110らへんのピークに移っています。そして奥行き「10」付近で両者が混合状態になっています。
というわけで、それぞれの時間(グラフ奥行き)における両者の「比」を求めたくなりますね。
前回示したのは非常に単純な例です。2つのピークがだんだん移っていくだけだし、その2つのピークがほとんどオーバーラップもしてませんので、いわゆる「カーブフィッティング」をすればその「成分分離」は可能です。しかし、こういう例だとどうでしょうか。

複雑なスペクトル(列)の例


同じように初期から時間が経つにつれてスペクトルが変化しているのですが、こういう風にカーブの形状が複雑になると単純にカーブフィッティングで2つの成分に分離するのはかなり難しくなります。「難しい」というよりは、すごく「恣意的」になります。カーブが複雑になるほど、カーブを何本にするか、それぞれの強度比や横軸の相対位置をどうするか、など作業者の意図でいくらでも調整が効いてしまい、作業者の意図が入りまくりの結果になります。

ついに登場「非負値行列因子分解」!

こんなとき便利なのが「NMF」という手法です。あんまり「多変量解析」のメジャーカテゴリーに入ってない気がするけど。
NMFは”Non-negative Matrix Factorization” の略で、日本語で言うと「非負値行列因子分解」となります。なかなかイカツイ名前をしていますが、要は「負にならないように行列を因子分解する」という手法です。実験データで得られるスペクトル(吸収係数や強度など)はえてして非負値ですから、分解も非負値だけでやりましょう、ということです。

「非負値行列因子分解」、たいそうな名前の割に、考え方およびプログラム(実際の計算式)はそれほど難しくありません(式の導出はそれなりに難しいけど)。多変量解析のなかで最もメジャーな「主成分分析」よりもはるかに簡単です。「文系のテーマ」に使わないためか、知名度は主成分分析より低いですが、実際の計算式の難易度が低めでかつ汎用性が非常に高いため、「理系のための多変量解析」の第一歩として取り上げてもいいかと思っています。

NMFの基本はその名のとおり「行列分解」です。行列を少数の「わかりやすい成分に分解」する、という考え方に基づきます。「わかりやすい成分」の数は計算前にあらかじめ決める必要があります。今回の例だと、形こそ複雑ですが成分は2つと判断できます。グラフの最も手前側のスペクトルで現れている成分と、最も奥側に現れている成分です。実際2成分で進めることが多く、やっても3成分までかと思います。

まずはイメージを!

NMFの数学的なお話に入るまえに、まずはその意味を「物理的」に考えてみましょう。もう一度、最初の簡単な例を考えます。

簡単なスペクトル(列)の例


このスペクトル、見た感じで明らかですが

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

これと

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

これに分解できそうですね(実際ワタクシがそうやって作ったデータなんですがね)。もっと言うと

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


この赤・青で示した2つのスペクトルと

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


この「係数」の組で表現できそうですね(実際ワタクシがそうやって作ったデータなんですがね)。
このグラフの「横軸」は時間経過を表しており、さっきの3Dグラフの「奥行き」に対応する量です。初期ではスペクトル1が支配的(係数1)で、奥になるとスペクトル2が支配的、となっています。

次回はこれを数学的にちゃんとやります。




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

【文責 べじぱみゅ】