スポンサーリンク

尤度関数と確率密度関数の相違点 ~尤度関数とは何者か~

機械学習でもたまにみかける尤度関数についての話になります。

あくまでも「最尤法のため」という文脈上での解説になりますが、尤度関数について根本的なことを説明しているので、抑えておいた方が良いのではないかと。

今までの流れはこんな感じ。

  • 母集団の確率密度関数を知りたい(そもそもの始まり):第1回
  • 同様に確からしいで解ける問題はごくわずか:第1回
  • 確率密度関数の内、求めないといけないのはパラメータ:第1回
  • 手元のデータを生成する確率が最大となるパラメータを求めればよさげ:第2回
  • 具体的なデータを使って説明したいけど、こういうことには注意しよう:第3回
  • 第3回の注意点を踏まえて、アイデアを形にしていこう:第4回

というわけで、前回記事から馬に蹴られて死んだ兵士の数という具体例を交えながら解説していました。内容としては、最尤法のアイデアは具体的にはどういう風に定式化されるのか、そして、具体的にはどういう計算をすればいいのかを説明しました。

前回記事では、「手元にあるデータセットが生成される確率」がパラメータによってどういう風に変化するのかを見たいという理由で、色々なパラメータをあてずっぽうに設定して計算していました。しかし、実際にパラメータを求めたいとなると、そのようなあてずっぽうな方法では非効率的だということがすぐに分かるかと思います。もう少し効率的な方法を考えたいものです。

それに、前回記事の具体例のように計算していたのでは、確率密度関数ごとに方法を記述する必要が出てきます(例えば、ポアソン分布に対する方法と、正規分布に対する方法と、・・・みたいな感じで)。

しかし、確率密度関数が何であれ、結局は「手元にあるデータセットを得られる確率」を基準に議論するわけですから、確率密度関数によらず、一般的な方法を記述したいものです。

前回記事のようにあてずっぽうでなく、かつ確率密度関数一般に対して統一された方法が今回の記事で解説する「最尤法」になります。

この記事からは、大概の解説書でも解説されているような内容に入っていきます。今までの記事のようなことが分かった上で解説書を読めば、「ああそういうことか」と理解できるのでしょうが、今までの記事で説明してきたようなことを書いてくれてる本って、あまりないような気がします。もしかしたら、最尤法が理解しづらい原因(というか、なんとなく分かった気になれない原因)はその辺りにあるのかもしれませんね。

※お断り1:確率と確率密度のことを区別せずに、単に確率と呼びます。
お断り2:確率質量関数と確率密度関数のことを区別せずに、単に確率密度関数と呼びます。

スポンサーリンク

尤度関数の定義

前回記事で計算した「手元にあるデータセットを得られる確率」の計算方法を確認しておきます。

その方法は、データセット中に含まれる各データの確率を計算して(データ数と同じ数だけ確率が計算できることになる)、その確率をすべてかける(同時確率を計算する)という方法でした。具体的に式で書くと次の(1)式のような感じ。

$$
\begin{equation}
\begin{split}
p(X, \lambda) &= p(x_1) \times p(x_2) \times \ldots \times p(x_i) \times \ldots \times p(x_N) \\
&= \prod_{i=1}^{N} p(x_i) \\
&= \prod_{i=1}^{N} \frac{ \lambda ^ {x_i} exp ( – \lambda ) } { x_i! } ・・・(1) \\
\end{split}
\end{equation}
$$

ここで、\( X \)、\( \lambda \)、\( N \)、\( x_i \)はそれぞれ、データセット、ポアソン分布の平均値、データの個数、i番目のデータを表しています。この数式を見て、「なるほど、おそらくこういうことが言いたいんだろうな」と理解出来た方は、次の節まで飛ばしていただいても問題なく読み進められると思います。

前回記事ではこの(1)式のパラメータ\( \lambda \)を色々と変更して確率計算をしていました。その計算から、\( \lambda \)が変わったときにデータセットを得られる確率がどう変化するかを確認することが出来ました。

ですが、前回記事のような確率計算は、あくまでも「パラメータがこのような数値に固定されているときの、特にこのようなデータセットが得られる確率」を計算しているという態度での確率計算でした。つまり、その計算ではデータセットを固定しているのではなく、パラメータの方を固定して考えていたということになります。

それをもう少し視覚的に解説してみます。次の図1を見てください。これは、ポアソン分布を様々な数値で計算した結果になります。一番手前の横方向の軸(X軸)がデータの数値、奥行き方向の軸(Y軸)がパラメータ、上下方向の軸(Z軸)が確率を表しています。

図1. 様々なデータとパラメータに対するポアソン分布

今説明した態度は、この図1を手前から(データ側から)見ているようなイメージになります。つまり、あくまでも変化するのはデータであってパラメータではないという態度ですな。

前回記事で説明したパラメータの求め方を、この図1を使って説明してみると、次のような説明になります。

「様々なパラメータのポアソン分布が書かれた紙が重なっている(図1のように)。その中でも、特にあるデータに対する確率だけに注目する。そして、その紙を1枚ずつ紙芝居のようにめくっていって、その”あるデータに対する確率”が一番高くなっているような場所を見つけようとしていた」という感じです。

ここまで読んで頂ければ、「え、じゃあその図を手前側から見るんじゃなくて、視点をクルッと90°回転させて、パラメータ側から(つまり、横軸がパラメータ、奥行き方向がデータの軸となるように)見ればいいじゃないか。何をそんな面倒なことをしてるんだ?」と思われるでしょう。実際、その通りです。「じゃあ、さっそく視点を変えよう」という話になりそうですが、そう簡単にはいきません。

少し厄介な話が出てくるのです。

ですが、その厄介な話は後回しにしておきます。後で説明した方が理解しやすいと思うので。

とりあえず、上の図1をパラメータ側から見た関数を定義してみます。ただし、このような事情はポアソン分布に限らず、他の確率密度関数であっても同じです。どのような確率密度関数に従うデータであれ、「今手元にあるデータセット」を使う以上、その各データは定数として扱い、パラメータを変化させて議論を進められるようにした方が便利です。

そこで、一般の確率密度関数に対して、上の図1をパラメータ側から見た関数を次のように定義します。言い換えれば、パラメータを変数としてみた時の関数を定義します。

$$ L( X ; \theta ) = \prod_{ i = 1 }^{ N } p( x_i, \theta ) ・・・(2) $$

右辺を見てみます。\( \theta \)は確率密度関数のパラメータ、その他は上記の(1)式と同じです。

この右辺を計算した結果である\( L( X ; \theta ) \)が尤度関数と呼ばれるものです(一応注意ですが、この\( L( X ; \theta ) \)という一塊で尤度関数という一つの概念を表していると思ってください。省略して尤度関数を単に\( L \)とだけ表記することもありますが、基本的には\( X \)や括弧等も含めた\( L( X ; \theta ) \)という全体で尤度関数を表していると思ってください)。

一般的に書いたので、少し面食らう方もいらっしゃるかもしれませんので軽く説明を。

そもそもこの(2)式は、尤度関数\( L( X ; \theta ) \)を右辺のように定義しますよということを主張しています。つまり(2)式は、尤度関数は確率密度関数の計算結果を掛け算したものと定義しますよと言ってるわけですね。

その確率密度関数の計算に使われている\( \theta \)は、先ほどもお伝えした通り、確率密度関数のパラメータです。ただし、(2)式は一般の確率密度関数に対して書いているので、そのパラメータは必ずしも\( \lambda \)とは限りません。

例えば正規分布であれば、パラメータは平均値\( \mu \)や分散\( \sigma \)で表されます。そのため、\( p \)を正規分布として上記(2)式を書き直すのであれば、平均値に対する尤度関数\( L( X ; \mu ) \)は次の(2)’式のようになります。

$$ L( X ; \mu ) = \prod_{ i = 1 }^{ N } p( x_i, \mu, \sigma ) ・・・(2)’ $$

このように、どのパラメータを求めたいのかを\( \theta \)で明示することになります。

さて、ここまでで(2)式の数式が何を主張しているのかが(おそらく)誤解なく伝わったかと思います。ですが、色々な疑問が残っているかと思います。代表的なものが「なぜわざわざ文字を\( p \)から\( L \)に変えたんだ?」というものでしょう。

それに、先ほど棚上げした厄介な話の説明もまだしていません。

ということで、それらを次の節と次の次の節とで説明します。

スポンサーリンク

尤度関数の意味

前節までで尤度関数の定義(2)式そのものは理解できていると思います。

ですが、上の説明だけではまだ、「なぜわざわざ文字を変えたのか?」といったような疑問が残るかと思います。そこで、この節では尤度関数\( L( X ; \theta ) \)をどう解釈すべきかを説明していきます。

そもそも、この尤度関数は上の図1をパラメータ側から見たことを表現するための関数でした。それは、前回記事まで言ってきた「手元にあるデータセットを得られる確率」を計算するために導入された関数だったのでした。ですが、詳しく見ると、必ずしも「手元にあるデータセットを得られる確率」とは言えないと分かります。その議論をしていきます。

(2)式によく似た計算式がありました。「手元にあるデータセットを得られる確率」を計算するための式として定義した(1)式です。ですが、(1)式と(2)式は似て非なるもので、違っている点が3つあります。

それは、「一般的に書いている」「確率変数はすでに確定していると考えている」「正確には確率を表しているとは言えない」という3つです。

1つ目については説明不要だと思います。前回記事までは確率密度関数をポアソン分布に限定して考えていましたが、この尤度関数は確率密度関数一般に対して定義されているということですね(より一般的に書いているので、(2)式では\( \lambda \) ではなく\( \theta \)と書いていたのでした)。

2つ目については、尤度関数では手元にあるデータセット\( X \)を固定して、パラメータ\( \theta \)を変数として扱うということを意味しています。これは上の節でも説明した通り、図1のようなあるパラメータと、あるデータに対する確率の図をパラメータ側から見るということを意味します。

前回記事までは特に注意をしてはいませんでしたが、データセットの方も様々な数値を取るものとして考えていました。というか、明示的に「データセットは変数として考える」とも「データセットは定数として考える」とも言っていませんでした。

確率密度関数はパラメータが一定であると考えた上で、あるデータに対する確率を計算します。だから、確率密度関数のグラフを描くと、図1を手前側から見たようなグラフ(横軸がデータで、縦軸が確率や確率密度となるようなグラフ)になるわけですね。

しかし尤度関数は、あるデータセットに対して、あるパラメータの尤(もっと)もらしさを計算します。そのため、尤度関数のグラフでは、横軸がデータではなくパラメータを表すという点は確率密度関数とは異なる点になります(横軸が確率を表すという点は確率密度関数と変わりません)。

まぁ、要するに、上の節で説明したように、視点がそもそも違ってるよって話ですな。

最後に、3つ目の「正確には確率を表しているとは言えない」について説明したいのですが、それについては長くなるので、新しく説を設けて説明します。

尤度関数を確率密度関数と同一視してはいけないのはなぜ?

「尤度関数は正確には確率を表しているとは言えない」という話をしていきます。

ですが、ここで次のような疑問を考えてみます。「尤度関数は結局のところ確率密度関数の積なんだから、尤度関数も確率密度関数と呼んではダメなの?結局は尤度関数も確率を表現するんだから、\( L( X ; \theta ) \)なんて書かずに\( p(X, \theta) \)と書いたっていいんじゃないの?」という疑問です。

要するに、「尤度関数と確率密度関数を同一視してはいけないの?」ということですな。2つ上の節で提示した疑問です。

そもそも尤度関数は確率密度関数の積だと定義されています。すごく平たく言えば、確率の積だと定義されているわけですな。そのことから考えれば、尤度関数も確率密度関数の一種(つまり、同時確率密度関数)だと考えていいのではないのかという疑問が出てくるのも当然と言えば当然でしょう。

どうでしょうか、同一視してもいいと思うでしょうか?

結論としては「尤度関数を確率密度関数と呼んではいけない」「文字を同じにしてもいけない」ということになります。「尤度関数と確率密度関数をいっしょくたにしちゃダメよ」ってことですな。

スポンサーリンク

その理由を説明していきます。

確率の定義を思い出してください。確率の定義の中には、「すべての事象に対する確率を合計すると1になる」という定義がありました。その主張は暗に、すべての事象に対して定義された数値すべてを足し合わせて1になっていなかったら、それは確率とは呼べないんだとも言っています。

もし尤度関数が確率密度関数だとすると、求めたい確率密度関数のパラメータを事象と考えることになります。そして、尤度関数の具体的な計算結果は、事象(つまり、パラメータの値)に対する確率となるはずです。

すべての事象(つまり、パラメータの取り得るすべての値)に対して尤度関数を具体的に計算して、その計算値を合計したとします。もし、その合計値が1になっていれば、尤度関数は確率であるための条件の一つを満たしているということになります。

ところが残念ながら、尤度関数はその条件を必ずしも満たしません。

具体例を挙げてみます。

例えば、コイン投げを2回したとしましょう。事象は”表”と”裏”の2つで、それぞれ1と0で表すことにします。そして、2回とも1になったとします(現実にも2回程度なら表が連続することだってありますね)。このとき、尤度関数を利用してパラメータを推定すると妙なことが起こります。

まずは確率密度関数の概形を決める必要があります(言葉の説明は第1回記事参照)。コイン投げの結果はベルヌーイ分布と呼ばれる確率密度関数に従うことが知られています。

なので、尤度関数を計算するときは、確率密度関数\( p(X, \theta ) \)をベルヌーイ分布として計算することになります。具体的なベルヌーイ分布の定義は次の(3)式の通り。

$$ p(X = x) = P^x(1 – P)^{1 – x} ・・・(3) $$

\( P \)は成功確率で、この\( P \)がベルヌーイ分布のパラメータになります(そのため、最尤法でパラメータを求めるときには、この\( P \)を求められたらOKということになります)。今回の場合、成功確率は1の出る確率(\( x = 1 \)となる確率)として計算することになります。

では、尤度関数を定義通りに計算してみましょう。試行回数は2回で、得られたデータセットは{1, 1}ということなので、\( n = 2 \)、\( x_1 = 1 \)、\( x_2 = 1 \)として(2)式に代入することになります。

$$
\begin{equation}
\begin{split}
L( X ; P ) &= \prod_{ i = 1 }^{ 2 } p(x_i, \theta) \\
&= \prod_{ i = 1 }^{ 2 } P^{ x_i }(1 – P)^{ 1 – x_i } \\
&= P^{1}(1 – P)^{ 1 – 1 } \times P^{1}(1 – P)^{ 1 – 1 }
&= P^2
\end{split}
\end{equation}
$$

この計算から、2回とも1が出たというベルヌーイ試行に対する尤度関数の正体は\( P^2 \)だということが分かります。

もし尤度関数が確率密度関数なのであれば、この\( P^2 \)が確率の定義を満たしていなければなりません。つまり、すべての\( P \)に対して尤度関数を計算したとき、その合計値が1となっていなければなりません。しかし、実際にはそうはなっていません。それは次のようにして分かります。

\( P \)は確率ですから、\( 0 \lt P \lt 1 \)(0以上1以下の実数を取る)です。ここで、\( P = 1 \)のとき、\( P^2 = 1 \)となることと、\( 0 < P < 1 \)のとき、\( P^2 > 0 \)となることに注意してください。

すべての\( P \)に対して尤度関数を計算して、その計算結果を合計するのですから、つまり1に0より大きい数を足し合わせることになります。このことから、尤度関数の合計値は必ず1より大きくなることが分かります。

そのため、尤度関数の計算結果は確率の定義を満たしていないということになります。計算結果が確率であるためには、例外なく「各事象に対する計算結果の合計値が1になる」が満たされていなければならないからです。たった1つでも、その条件が満たされないような例が見つかってしまえば、それは確率の定義から外れるのです。

そのため、たった1例を示しただけではありますが、確率であるための条件を満たさない場合が存在する尤度関数の計算結果は確率ではないということになってしまいます。そして、尤度関数が計算結果として確率でない数値(いわば、何とも言いようのない数値)を返すような関数である以上、尤度関数を確率密度関数とも確率質量関数とも呼ぶことはできないのです。

以上の議論を丁寧に追っていただければ、尤度関数と確率密度関数とは、概念構造からしてまったくの別物だということを理解していただけるかと思います。そのように、本質的に違った概念を同じ「確率密度関数」という名前で呼ぶことはできないのです。当然、違うもの同じ文字で表すのもナンセンスです。

尤度関数を扱う上では、このような確率密度関数との相違点を理解する必要があります。これが、尤度関数と確率密度関数を同一視してはいけない理由です。

ただ図1の視点を変えたかっただけなのですが、概念構造のまったく違うものが出てきてしまうので、簡単に視点を変えればいいというわけにはいかないのです。これが2つ上の節で棚上げにしていた「厄介な話」になります。

まとめ

いかがだったでしょうか。今回は尤度関数とは何者かというテーマで記事を書きました。最尤法を理解するには、この尤度関数の理解が肝になります。

今まで説明してきていたような「手元にあるデータセットを得られる確率」と尤度関数は、その構造からして根本的に違っているという点は重要なので、重点的に説明しました(関連した概念ではあるんですが)。

この考え方を身に付けておくと、最尤法に限らず、ベイズ理論を使った機械学習の本を読んだりするときにも面食らわずに済むと思います。

特に、図1のようなイメージを持っておくと便利だと思います(尤度関数は確率密度関数を視点を変えて見てるだけなんだよ~って話の所です)。

次回は、尤度関数を利用しながら最尤法を解説していこうかと思っています。その中で、この記事の話を使いながら、もうちょっと深く突っ込んだ注意点なんかを説明していこうと考えています(今のところは)。

というわけで、今回はこの辺で。

ではでは~。

タイトルとURLをコピーしました