こんにちは、じゅんペー(@jp_aiboom)です!
僕は現在東京大学の理系の二年生です。この連載では、AI初心者の僕が、「パターン認識と機械学習(通称PRML)」を読み進めながら、機械学習の理論面を一から勉強していく様子をお届けしたいと思います。
第4回目までは、機械学習の全体像や、「多項式曲線フィッティング」を例に、回帰についてお伝えしました。
第5回目の今回からは、趣向を変えて、機械学習においてとても重要な「確率」や「統計」について見ていきます(全3記事)。
確率や統計の話は奥が深く、当然すべてをまとめられるわけではありませんが、中でも特に重要な「最尤推定(さいゆうすいてい)」「MAP推定」「ベイズ推定」を取り上げていきます。
ただし、抽象的な概念の説明だけしても面白みがないので、今回は「東大受験生」を例に挙げながら解説していきたいと思います。具体的には、予備校の開催する模擬試験においてA判定(最も高い評価です)を取り続けた人が、本番で実際に合格する確率を計算してみます!
最尤推定の基礎
先に挙げた3つの推定法の中で、今回の計算に使うのは「最尤推定」になります。最尤推定を一言でいうと「ある変数に対する尤も(最も)ふさわしい値を求める手法」です。最尤推定という言葉自体なかなか聞き慣れないと思いますが、実は3つの推定法の中で最も日常でよく使われている考え方です。
東大受験生の計算をする前に、まずはコインを例に最尤推定の概念を理解していきましょう。
表裏のあるコインで、表が出ることをx=1、裏をx=0で表すことにします。
一般的には、コインの裏表の確率は0.5ずつであることが多いですが、今回はコインの表が出る確率、つまり、x=1となる確率をcという変数として、与えられたデータを元にcを推定していきます。
x=1の確率がcであるとき、x=0である確率は1-cです。このことを、cという変数が与えられたときに、x=1となる確率と考えて、
\begin{eqnarray*} p(x=1|c)&=&c \\ p(x=0|c)&=&1-c\end{eqnarray*}
と書きます。
また、「確率分布」という、確率変数に対して各々の値をとる確率を表したものが定義できます。今回のような、表か裏か、x=0か1かといった、2値を取るような場合は、ベルヌーイ分布に従い、
\begin{eqnarray*} Bern(x|c)=c^x(1-c)^{1-x} \end{eqnarray*}
と表せます。
さて、それでは実際に最尤推定に入ります。
最尤推定では、尤度関数を最大化することで、もっともらしい値を求めます。つまり、尤度関数は、もっともらしさを表す関数です。
尤度関数は今回の場合、先に式を書くと、
$$p(D|c)= \prod_{n=1}^N p(x_n|c)=\prod_{n=1}^N c^{x_n}(1-c)^{1-x_n}$$
と書けます。
まず、\(D=\{x_1,x_2,…,x_N\}\)は、今回実際にコインを振って得られたデータです。つまり、1回目が表、2回目が裏なら、\(x_1=1,x_2=0\)という具合です。
それから、\(\prod_{n=1}^N p(x_i|c)\)は、\(p(x_i|c)\) をn=1からNまで全ての掛け算を表しています。 \(\prod\) は、総乗を表します。
ということで、問題の設定は上の\(p(D|c)\)を最大化することになりました。ここで、一つ計算を楽にする工夫として、今回の例に限らずよく出てくるやり方として、最大化したい関数の対数を取ります。
つまり、
$$\ln p(D|c) = \sum_{n=1}^N \ln p(x_n|c) = \sum_{n=1}^N \ln \left(x_n\ln c + (1-x_n)\ln(1-c) \right)$$
を最大化します。\(\sum\)は、総和を表します。
元の関数を最大化する場合と、対数をとったものを最大化する場合で、当然同じcに対する値は違いますが、\(xと\ln x\)がともに単調増加であることを考えると、最大になる時のcの値は一致します。
ということで、\(\ln p(D|c)\) が最大になるcを求めるために、cで微分して=0とおいて、方程式を解いてやると、
$$c^* = \frac{1}{N}\sum_{n=1}^Nx_n$$
となります。今、上でも述べたように、 \(D=\{x_1,x_2,…,x_N\}\)は、それぞれ1か0なので、このN個中、1がm個だったとすると、残りのN-m個は、0ということなので、
$$c^* = \frac{m}{N}$$
となります。
これで最尤推定の結論が得られました。つまり、ある\(D=\{x_1,x_2,…,x_N\}\) というコインをN回振ってみたN個のデータが与えられたときに、そのデータを元にコインの表が出る確率のもっともらしい値を求めると、結局、N回中何回1が出たかを表す \(c^*\)がその答えとなりました。
これは皆さんの直感通りだと思います。なぜなら、この結論は、例えば10回コインを振ったときに、5回表が出たなら、このコインの表が出る確率は0.5(そして裏が出る確率も0.5)だと推定すると言っているのです。
これが、最尤推定は日常でよく使われている考え方だと冒頭で述べた所以です。サイコロだって、普通はそれぞれの出る目が \(\frac{1}{6}\)ですが、これは何度も何度もサイコロを振ったときに、それぞれの目が\(\frac{1}{6}\) 出るからそう決まっているのです。こう言った確率の決め方を、頻度主義と呼びます。
東大模試の結果から合格率を求める
また記事の購読には、アカウント作成後の決済が必要です。
※ログイン/初回登録後、下記ボタンを押してください。
AIDBとは
プレミアム会員(記事の購読)について
■サポートのお願い
AIDBを便利だと思っていただけた方に、任意の金額でサポートしていただけますと幸いです。