最小二乗法とロバスト推定2

昨日の続き
最小二乗法とロバスト推定法 - rindai87の日記

最小二乗法は理解したので、ロバスト推定について考える。
ロバスト推定法(M推定法) 画像処理ソリューション
昨日に引き続いてこちらを参照にする。


詳しくはリンク先を見ればいいと思うけど、つまりはある程度の誤差の範囲内のものだけ重みをつけて採用しましょうという方針のようだ。
これも聞くと当たり前の話だな〜って感じ。
こんなんが授業中に理解できないということは、先生の講義が下手なのか、教科書が分かりにくくかかれているのか、僕の理解力が低いか、単純に講義を聞いていないかだな。
恐らく後半の二つが原因と思われ。


とにかく、重みをつけるだけなので、最小二乗法の続きであっさりとできてしまった。
昨日の画像を使ってPython+PILで最小二乗法を使ってでてきた結果の座標をgnuplotで書いてみた。
今回採用したのはTukeyのBiweight推定法というもの。

元画像はノイズがあまりないので違いがほとんど分からないけど、ロバスト推定のほうが左下の辺りでうまくエッジにフィットしていると思われる。
ちなみに赤い点がエッジ座標で緑が最小二乗法で推定した直線、青線がロバスト推定で得られた直線。
これだとあまり面白くないので、ノイズを強制的に加えてみる。

おお!これは素晴らしい。
ノイズにだまされずにうまく直線を推定できている。


ここでさらに面白いことが分かった。
重みを採用するときに用いている許容誤差の値を変えてやると面白い結果に。
許容誤差は誤差がどこまでの範囲なら重みを採用するかという値である。
うまくいったのは許容誤差W=100のとき。

W=10のとき。

W=1000のとき。

どちらもあまりよくない結果。


考察
許容誤差を小さくしすぎると、直線の推定に用いる座標が少なくなりすぎてうまく直線が定まらない。
逆に大きすぎると、ノイズの点も推定に用いるので最小二乗法と違いがあまりない。
なので適切な許容誤差の設定が必要。


ロバスト推定はいろいろな関数があるようだが、基本方針はどれも似たようなものみたい。