『Bayesian Methods For Hackers』Ch. 5 まとめ
Ch. 5です。
意思決定と損失関数
例えば台風が直撃する可能性が10%、しない確率が90%のとき、直撃する可能性の方が低いからといって対策しなくていいというのは間違った選択である。どの辺が間違っているかと言うと、確率だけに注目して結果の重大さに注目していないからだ。
結果の重大さを表すために、損失関数
$$L(\theta, \hat{\theta})$$
を導入する。ここで、$\theta$はパラメータの真の値、$\hat{\theta}$はその推定値であり、$L(\theta, \hat{\theta})$は現在の推定がどれくらい「悪い」かを表す。
いろいろな損失関数
もっとも単純な損失関数は二乗誤差
$$L(\theta, \hat{\theta}) = (\theta - \hat{\theta})^{2}$$
であるが、$\theta > \hat{\theta}$の場合と$\theta < \hat{\theta}$の場合で同じ$|\theta < \hat{\theta}|$でも$L$の大きさに差をつけたりもできる。二乗誤差の弱点として外れ値に大きな影響を受けてしまうことがあるので、絶対値誤差
$$L(\theta, \hat{\theta}) = |\theta - \hat{\theta}|$$
の方がよりロバストである。他にもいろいろな損失関数(zero-one lossやlog-lossなど)が考えられる。
損失関数の良さ
損失関数を選ぶ基準には以下のようなものがある
- 計算の容易さ
- ロバスト性(客観性)
- 結果の悪さを正しく反映しているか
損失関数の期待値
当然だが、$L(\theta, \hat{\theta})$はパラメータの真の値$\theta$(台風が直撃するかしないか)を知らなければ計算できない。そして、普通我々は$\theta$を知らないので、損失関数はそれだけでは意味がない。重要なのは、あるパラメーターをある値$\hat{\theta}$であると推定した時の損失関数の期待値
$$l(\hat{\theta}) = E_{\theta}[L(\theta, \hat{\theta})]$$
である。$l(\hat{\theta})$は、パラメータ$\theta$を推定した事後分布からN個サンプルしてきて、それぞれについての損失関数の平均
$$l(\hat{\theta}) = \frac{1}{N} \sum_{i}^{N} L(\theta_i, \hat{\theta})$$
から計算できる(!)。$l(\hat{\theta})$を最小化するような$\hat{\theta}$を推定値として使えばよい。
以上の手続きにおいて、いい感じにカスタマイズした損失関数を使うことにより、我々は単にパラメータの誤差$|\theta - \hat{\theta}|$を最小化するのではなく、「パラメータ推定の結果の悪さ」を最小化することができる。
例
- The Price is Right
- 株価の予測
最小化には例えばscipy.optimize.fmin
を使えばよい。