期待値と分散(離散値の場合)について

青いイルカの深層学習の本やスパース性に基づく機械学習の本でも、損失関数の説明あたりで平均期待二乗誤差といった誤差の期待値を最小化する式が出てくる

なんとなく雰囲気で読んでいて、いつも期待値が得体の知れないもののように感じて詰まってしまっていた。
適当に調べると期待値は ある関数f(x)の確率分布p(x)の下での平均値をf(x)の期待値と呼ぶ とか書かれていた。
参考(12-3. 確率変数の期待値 | 統計学の時間 | 統計WEB)

悩むのは 確率分布p(x)の下での平均値 というところ。確率ってP(X=a)というのは何%でX=aが起きるかを示しているものだからそれ自体が平均っぽいものじゃないのか?と考えていた。

スパース性に基づく機械学習でも期待値で詰まっているところがあるし、悩みっぱなしは良くないと思い、「プログラミングのための確率統計」という本を読むことにした

読み進めて期待値について自分なりにイメージを掴んだのでメモメモ

機械学習において nクラス分類 というのは、データの特徴という入力を渡し結果として分類の結果(nクラスのうちの一つ)を受けとるといったものを考える。ソフトマックス関数でいえば最も確率が高いもののクラスを選ぶ

これは{ \displaystyle X}を入力、{ \displaystyle Y}を結果としたら { \displaystyle Y = f(X)} みたいに数式で表せるはず

でも現実にはノイズの混入を避けることができずXの測定値が同じでも、得られるYの測定値は異なるということが起こってしまう。 { \displaystyle Y = f(X) + b }な感じかな?

{ \displaystyle Y = f(X)}、つまりX=aなら必ずY=bが出るよみたいに確定して言えないならせめてX=aのときは何%くらいでY=bが出るとは言えないだろうか?

こういった表現は条件付き確率{ \displaystyle P(Y=b|X=a)}で表すことができる

ところで新年明けましたね。くじ引きをしたのではないでしょうか。ということで次のようなくじ引きをする

100円、500円、1000円のいずれかを払うと1回引けるくじがある。それぞれのくじの内容は

  • 100円くじ : 80%で50円、15%で100円、5%で300円もらえる
  • 500円くじ : 60%で250円、25%で500円、15%で1500円もらえる
  • 1000円くじ : 35%で500円、45%で1000円、20%で3000円もらえる

500円くじに挑戦したときいくらぐらいもらえるだろうか
これは条件付き確率{ \displaystyle P(Y=もらえる金額|X=500円くじを引く)}となる

確率ではもちろん「60%で250円、25%で500円、15%で1500円もらえる」と言うことができるがそうじゃない。そういった揺らぐ値ではなく揺らがない具体的な値としての答えが欲しい。例えばこのくじ引けば大体5000兆円儲かるよみたいな
そんな役割を果たす具体的な値のことを期待値と呼ぶそうだ

確率分布p(x)は揺らぐからこそ平均としてこんな値が出る、といった一目でわかる値が欲しいんだな
ちなみに期待値は平均みたいにn個の値を合計してnで割るということはしていないので平均値と期待値は違うもの、でいいのかな

次に期待値と呼ぶのはいいけどどうやってその値を求めるか
確率は起こりうる事象を全て足した結果は1にならないといけない

例えば全ての出る目の確率が等しい6面サイコロだったら
(1がでる確率)+(2が出る確率)+...+(6がでる確率) = 1

ここで
{ \displaystyle P(Y=250|X=500) + P(Y=500,X=500) + P(Y=1500,X=500) = 1}
としよう

どのくじを引くかは任意で、くじの種類によってもらえる金額は変わってくるけどくじの内容の確率が変化するということはないので独立とする

図で表すとこう
f:id:Owatank:20180123105522p:plain

面積1の正方形の中に確率の値を面積とした領域がある感じ

同時確率は
{ \displaystyle P(Y,X) = P(Y|X)P(X) }

独立なときは{ \displaystyle P(Y,X) = P(Y)P(X) }としていいので{ \displaystyle P(X)=1}とすると、結局は{ \displaystyle Y}がいくらでるかの確率(周辺確率)で考えることになる

次に上の画像の各領域において、いくらもらえるかの値段を高さで表現する
f:id:Owatank:20180123105959p:plain

デコボコしている。このデコボコを均一にして綺麗な直方体のようにしたとき、面積はYがとりうる全ての確率P(Y)になるから、その時の高さが{ \displaystyle Y}がいくらでるかの平均にならないだろうか。

f:id:Owatank:20180123112414p:plain

その高さはどう計算するかというとこの体積を雪だと思えば雪が少ないとこに分けてあげて均一にするだけ、それはそれぞれの体積を足した結果と変わらないはず
体積自体を増やしたり減らしたりすることはしてない


つまり

{ \displaystyle E [Y ] = 250\ast P(Y=250,X=500) + 500\ast P(Y=500,X=500) + 1500\ast P(Y=1500,X=500) }

こうすれば期待値(体積)を求められる。ちなみにYの期待値を{ \displaystyle E [Y ] } で表した。結果は
{ \displaystyle E [Y ] = 250\ast 0.6 + 500\ast 0.25 + 1500\ast 0.15 = 500 }

平均として500円もらえるっぽい
「0.6%で250円、0.25%で500円,0.15%で1500円もらえるよ」よりも「期待値として500円貰えるから損はしないよ」と言われる方が参加する人は増えるかな

「期待値として500円貰えるから損はしないよ」と言われてやってみよっかな〜〜〜、って思ったときあくまで期待値だし、期待値が出たら損をしないだけ。
{ \displaystyle Y}がいくらでるかは揺らぐ値だから期待値が必ずでるとは限らない。そこで期待値ではない値{ \displaystyle y}が出た時、それが期待値からどれくらい離れているか計算して、外れた時のリスクはどれくらいかといったものを調べてから挑戦したい気持ちもある

かなり離れていたら損をしたときのショックはでかいし、離れていなければダメージはそこそこ少ないし・・・まあいいか・・とか対策を練ってから挑みたい

この距離は期待値を{ \displaystyle \mu }、くじを引いた時の実際の金額を{ \displaystyle y }とすれば距離は{ \displaystyle | \ y - \mu \ | }でいいはずなんだけど、絶対値をだと場合分けしないといけなかったり微分できない点があったり不便らしい。そのため{ \displaystyle ( \ y - \mu \ )^{2} }といった2乗の形、自乗誤差と呼ばれるものを使う

二乗しているため期待値{ \displaystyle \mu }から離れるほど値は大きくなるのが特徴
{ \displaystyle y }は必ずこういった値が出る、というものではなく揺らぐ値なので{ \displaystyle ( \ y - \mu \ )^{2} }揺らぐ値になってしまう。ダメじゃん

この期待値からの外れ具合を表す値の揺らがない値、つまり外れ具合を表す値の期待値が欲しいので

{ \displaystyle V[Y] = E [( \ y - \mu \ )^{2}] }

を計算すれば外れ具合を表す値の期待値が得られる。
そしてこの{ \displaystyle V[Y] }のことを分散と呼ぶ。分布の散り具合・・かっこいい・・・
分散は値が大きければ散らばっている、値が小さければ散らばり具合が少ないといったことを示してくれる

さっそく計算して求める
{ \displaystyle V[Y] = (250-500)\ast (250-500)+(500-500)\ast (500-500)+(1500-500)\ast (1500-500) = 1062500 }

うーん・・・値が大きいってことは散らばっているということだけど、どれくらい散らばっているのかわからない・・・

距離がそもそも{ \displaystyle ( \ y - \mu \ ) }、単位として{ \displaystyle m }だとしたら、二乗しているということは分散は{ \displaystyle m^{2} }長さの二乗を表していることになる。単位が違うから比較が難しい。
なら平方根を取れば{ \displaystyle m }に直せるじゃん。取ってみよう

{ \displaystyle \sqrt{V [ Y ] } = \sqrt{1062500} = 1030.7764064 }

分散の平方根を取ったものを標準偏差と呼ぶ。期待値は{ \displaystyle \mu = 500 }だから悪くはないのかな?

最後に500円くじを500回試行したときの1回ごとの累積和をプロットしてみた
ソースはここ
github.com

横軸は試行回数、縦軸はその時の所持金額とする。
まず500回試行して250円、500円、1500円がどれくらい出たかというと

f:id:Owatank:20180123120519p:plain

だいたい事前に設定した「60%で250円、25%で500円、15%で1500円もらえる」に従っているので良しとする。

3人がくじに挑戦したとしてそれぞれの累積の結果は

f:id:Owatank:20180123120651p:plain

f:id:Owatank:20180123120711p:plain

f:id:Owatank:20180123120726p:plain

赤の線が期待値を表し、赤の点線が期待値±標準偏差を表す。この点線内に点が集中していないことから分布がひどく散らばっているのがわかる。
最初の人はかなり勝っているのに対し、三番目の人はかなりボロ負けしている。
二番目の結果を見る限り、最初は負け続けていても途中から利益が出ているのを見ると、負け続けても諦めなければ勝てるといった気持ちも大切なのかなとか思う。ギャンブル試行だ・・・

大事なことは期待値、分散、標準偏差は揺らがない値で確率分布における目安のような役割を果たす値ということ。

参考文献(Kindle版もあるよ)

プログラミングのための確率統計
プログラミングのための確率統計
プログラミングのための確率統計