LoginSignup
6
6

More than 5 years have passed since last update.

初心者が最尤推定について書いてみた。

Last updated at Posted at 2016-04-11

※当記事はITエンジニアのための機械学習理論入門を参考に作成しています。
間違いなどございましたらコメントよろしくお願い致します。

尤度関数を用いて最尤推定を行ってみます。
が、まずは尤度関数を理解する必要があるかと思われます。

尤度関数

尤度関数(ゆうどかんすう)とは統計学において、ある前提条件に従って結果が出現する場合に、逆に観察結果からみて前提条件が「何々であった」と推測する尤もらしさ(もっともらしさ)を表す数値を、「何々」を変数とする関数として捉えたものである。また単に尤度ともいう。 - Wikipedia

下記の記事も参考になると思います。
http://qiita.com/kenmatsu4/items/b28d1b3b3d291d0cc698

今回はトレーニングセットは、最も発生確率が高いデータであると推測して尤度関数を考えていきます。
※もちろんトレーニングセットが最も発生確率が高いとは言えません。あくまでも前提として。
判定自体は結果を元に判定というおまかせ設定で。

本題

尤度関数について理解してもらったところで、先に結論から話すと今回の推定では
尤度関数(尤度)が最大となるようにパラメータを設定することが目的です。

進め方

パラメトリックモデルの3つのステップで進め、最終的に統計モデルを決定します。
1. モデル(数式)を設定
2. パラメータの評価基準を設定
3. 最良のパラメータを設定

ですが、ただ闇雲にモデルを設定することは難しいです。
なのである程度何らかの仮定を起きつつ進めます。

仮定

今回は下記の点について前提に進めていきます。

  • データの誤差

    • 標準偏差δ
  • パラメトリックモデル

    • 多項式である
f(x)= w_0 + w_1 x + w_2 x^2 + ・・・ + w_M x^M \\
=\sum_{m=0}^M w_m x^m

モデル(数式)を設定

仮定を元に下記の事が言えます。

観測点x_nでの観測値t_nはf(x_n)±δに散らばる

これは、μを中心として、およそμ±δの範囲に乱数が散らばる。
よって、平均μ、分散の正規分布で表すことができます。(分散は標準偏差δの二乗)

N(x|μ, δ^2) = \frac{1}{\sqrt{2πδ^2}} e ^\frac{-1(x-μ)^2}{\sqrt{2δ^2}} 

今回は観測値はxではなく、tなので下記のものに置き換えると
下記のような数式となります。

観測値: x=t
\\
中心: μ = f(x_n)
\\
N(t|f(x_n), δ^2) = \frac{1}{\sqrt{2πδ^2}} e ^\frac{-1(t-f(x_n))^2}{\sqrt{2δ^2}} 

パラメータの評価基準を設定

上の数式を利用することでとある観測点xで観測値tとなる確率を求めることが可能です。
ということは、トレーニングセットのデータが得られる確率Pを算出することが出来るということです。

P = \prod_{n=1}^n N(t|f(x_n), δ^2)

※全積である理由は全ての観測点で特定の観測値が得られる確率を求めるから。

求めた確率Pはパラメータにより値が変動します。
ということは、確率Pはパラメータの関数と考えることが可能であり確率Pは尤度関数と見ることができます。

※パラメータ: 係数wと標準偏差δ

最良のパラメータを設定

尤度関数が得られたところで、各パラメータが最大となるように計算します。(ごにょ)
実際に計算するときは、尤度関数自体を計算するのは大変だから対数をとって、パラメータが最大となるように計算します。

 w = (Φ^TΦ)^{-1}Φ^T t
\\
Φ = \left(
    \begin{array}{ccc}
      x_1^0 & ・・・ & x_1^M \\
       ・ & ・・・ &  ・ \\
      x_N^0 & ・・・ & x_N^M
    \end{array}
  \right)
\\
ただし、M + 1 < N
\\
\\
δ = E_{RMS} = \sqrt{\frac{1}{N} \sum_{n=1}^N \{\sum_{m=0}^M w_m x_n^m - t_n\}^2}

オーバーフィッティングの発生検知

最良のパラメータを算出することが出来ましたが、これはトレーニングセットのデータでの話です。
算出した標準偏差の範囲に収まるかどうかはわかりません。

そのため、他のデータセットでオーバーフィッティングが発生するか検証してみる必要があります。

オーバーフィッティングの検証は各次数における尤度関数の値の変化で行います。
尤度関数の値が増加しなくなるタイミングからオーバーフィッティングしていることが言えます。

また、検証するデータ数を増加すればするだけオーバーフィッティングの発生を抑えることができます。
ということは、ある次数におけるオーバーフィッティングの発生する地点の明確化ができます。

ここで複数のデータセットを用いてオーバーフィッティングが発生する次数からf(x)を算出することが出来る?

最小二乗法との違い

誤差である標準偏差(分散)を算出することができる。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6