乱数をビシバシ当てる

行列の適当な成分が隠されているとき,
そのまわりの隠されていない成分を手がかりに用いて
隠された部分を当てる行列欠測予測問題.
今日は,正規乱数からの独立サンプリング行列を入れているのにもかかわらず
予測がビシバシ正確に当たってしまう,という不具合に半日悩みました.


正解を横軸,予測を縦軸にとった散布図を見てみると,
超正確に当たっている成分と,それほどでもない成分に分かれていることがわかった.


そこで細かく細かく調べてゆくと,
各行で一成分だけが隠されているときに限って高精度で正解しており,
各行で二成分以上が隠されているときには当たらない,ということがわかる.
ここでは当たらないほうが正しいのだが,当たらないにしても
でたらめよりもほんの少しだけ精度が良いようでこれも悩ましい.


MATLABの内在的バグや乱数の性質の問題を疑って
別バージョンのMATLABで走らせてみたり,
つくった正規乱数行列をさらにランダムに並べ替えたりしてみたが,
らちがあかない.


このへんで学食へゆき夕飯.
学生や同僚に,いかに悩ましい問題であるか愚痴る.


列数を増やすと,ほかは同じ条件であったのにもかかわらず
予測が突然当たらなくなる.
列数と,予測の当たり外れの関係を調べてみると,
行列因子化結果がほぼフルランクになったときに予測が大当たりし,
そうでなく自動正則化が効いてランクが落ちているときには当たらないことが分かった.
ますます悩ましい.


ふと行列の正規化(行平均がゼロになるようにする前処理)をしていたのを
やめてみたところ,予測が当たらなくなった.(しつこいようだが当たらないほうが正しい)
ここだ,行列の正規化処理が悪さをしている,ということをつきとめて,考えること3分.
「行平均がゼロであることを知っていれば自由度が一個減っているから,
各行で隠されている成分が一点なら予測は解析的に解けるじゃん」
ということにようやく気づく.


解決


分かってうれしいけど,なんとも意味のない結果.それでも分かってうれしい.


こういう日は幸せ度 5段階評定の 4ぐらいです.