Graphical LASSOの実装ができたように見える。ハマったのは

  • 精度行列と共分散行列を逆に見ていた ← 致命的
  • 座標降下法ではベクトルを一気に更新したらだめ(収束しない!!)で、要素1つづつ更新する必要がある。

トイデータ(人工的なノイズ)はOKっぽい。 実データでリファレンス(sklearn実装)と対角要素がかなり違う。何故だ。

実装ミスで間違いなさそう。入力信号を100で割るなりして小さくすると、共分散行列の逆の対角要素、及び精度行列の対角要素は大きくなるが、 自分の実装は大きくなっていかない。

ノルム正規化したものを比較したら最大でも0.008程度の誤差。しかし、定数倍除き一致というのもおかしい。

しばらく追っていたら、入力信号の振幅に対して逆二乗で差が出ていることに気づいた。もっと見たら、共分散行列の初期化で正則化をかけているのが原因であることが分かった。正則化をかけると対角要素が変わってしまう。やるなら、別の正則化パラメータにするかな。今は外した。外すことで入力信号問わずほぼ一致。