いないち日記

大阪で Information Retrieval を勉強する大学生の日記。

2018/09/03

朝7時に起きた。今日も朝から研究所。

午前中は Graph Lasso を用いた異常分析を試してみた。

まずは Graph Lasso が何なのかについて。これは変数間の相関を表す pairwise Markov Graph をスパース推定する方法で、これ自体は異常検知の手法ではない。ただし pairwise Markov Graph が求められるので  p(x_i | \mathbf{x}_{-i}, D) が計算できるため、各次元の異常度というのは自然に定義できる。

次に Graph Lasso の学習について。これは多変量ガウス分布  N(\mathbf{x} | \mathbf{0}, \mathbf{\Lambda}) における precision matrix  \mathbf{\Lambda} をスパースに推定することに相当する。ちなみに precision matrix なら最尤推定で標本共分散行列の逆行列を求めればいいんじゃない? というとそうはならなくて、なぜかというと最尤推定だと得られた結果がスパースではない (ので構造がごっちゃ) のが嫌だからなのと、そもそも標本共分散行列が正則でない可能性が大いにあるから。じゃあどうするかというと、事後分布がスパースになるように事前分布にはラプラス分布

 p(\mathbf{\Lambda}) = \frac{\rho}{2} \exp (- \rho || \mathbf{\Lambda} ||_1 )

を敷いて MAP 推定する。すると最大化対象の式は

 f = \ln \det \mathbf{\Lambda} - \mathrm{tr} (\mathbf{S} \mathbf{\Lambda} ) - \rho || \mathbf{\Lambda} ||_1

となって

 \frac{\partial f}{\partial \mathbf{\Lambda}} = \mathbf{\Lambda}^{-1} - \mathbf{S} - \rho \mathrm{sign} (\mathbf{\Lambda})
を座標降下法とかで解けばいいことになる。
ちなみにこれを変形すると Lasso と同じ目的関数になることが Graph Lasso (Graphical Lasso) の名前の由来らしい。

ちなみにこれが実装例。プログラム自体は簡単。

github.com