Processing math: 100%
スキップしてメイン コンテンツに移動

最尤推定

Introduction


今日は最尤推定について加工と思います。これは統計的推定でよく使われる手法です。最尤推定の例も書こうと思います。初めに尤度の説明をし、そのあとで最尤推定の説明をします。

概要


  • 尤度
  • 最尤推定
  • 最尤推定の問題点

尤度

前提条件から得られる観察データを考えます。この時、えられた観測データに対して前提条件が尤もらしい条件であるかの値を尤度といいます。

なにをゆっているのかわからない人がほとんどだと思います。。。
尤度の例を扱っていきます。

コインを投げることを考えます。このコインは確率Pで表、確率1-Pで裏を出すコインだとします。
例えば、100回コインを投げたとき、全て表だったとします。この時このコインが表が出る確率はかなり1に近いことが予想されます。

ではもし、表が出る確率PがP=0.5だとします。この時、表が100回連続で出る確率は0.5^{100} = 7.88860e-31になります。あり得ない確率ですね。これがP=0.5としたときのもっともらしさです。つまり、あまり現実的ではないということです。

もしP=0.99とするとき、100回とも表が出る確率は0.99^{100} = 0.3666....となります。つまり、P=0.99としたときの尤度は0.36くらいということです。よって、P=0.5よりかは現実見があることになります。まだまだ低い数字ではありますが。


観測データである、100回表が出るという事象を固定したとき、尤度はPを変数としたP(100回表|P)を尤度関数と呼びます。この関数の値を尤度と呼びます。


尤度が高いほうが尤もらしい値、つまり理にかなっているなと感じることができる値ということになります。

例えば、先ほどの例でゆうと、

P=0.5としたときの尤度は7.88860e-31でした。P=0.99としたときの尤度は0.3666でした。よってP=0.5より、P=0.99のほうが尤もらしい自然な値ということになります。


最尤推定

最尤推定とは得られた観測データからデータが依存している分布のパラメーターを推測するための手法です。
最尤推定では尤度を最大化して、最も尤もらしいパラメーターを求めます。

確率密度関数fX_1,X_2,...,X_nfに従う確率変数とします。 X_1,X_2, ..., X_n \sim f

この時、X_1,X_2,..,X_nが同時におこる確率は
\Pi_{i=1}^{N} P(X_i)
いわゆる同時確率です。

よって、尤度関数を次のように定義します。
L(\theta) = f(x_1,x_2,...,x_n|\theta)

この時、
\theta^{\star} \in \arg_{\theta} \max L(\theta)
\theta最尤推定量といいます。

そして、
\frac{\partial}{\partial \theta} \log L(\theta)
これを尤度方程式といいます。

なぜ、\logがいきなり登場しているのかは後の最尤推定の例で説明します。


最尤推定の例

x_1,x_2,...,x_n \in {0,1}について考えます。 \forall i \in {1,2,..,n}について、x_i = 1とするとき、i回目のコイン投げは表とします。x_iとするとき、コインは裏になったとします。

この時、尤度関数は
L(\theta) = P(x_1,x_2,...,x_n|\theta) = \Pi_{i=1}^{n} \theta^{x_i} (1-\theta)^{1-x_i}

\forall i \in {1,2,..,n},  \sim p(k;\theta) = \theta^k (1-\theta)^{1-k} ~~~~\textrm{for} k \in {0,1}

コインはベルヌーイ分布に従うので、このような形になります。
ここで、 \theta表が出る確率とします。

L(\theta)\thetaについて最大化したいのですが、微分がかなり難しい形になっています。なぜならL(\theta)について線形でないからです。つまり、\thetaについて掛け算の形になっていることが微分を難しくしています。

この問題を解決するために、\logを使います。
\logは単調増加関数なのでL(\theta)\log L(\theta)の局所解は変わりません。

よって、\log L(\theta)を最大化します。

\begin{eqnarray*} \log L(\theta) &=& \log \Pi_{i=1}^{n} \theta^{x_i} (1-\theta)^{1-x_i} \\ &=& \sum_{i=1}^N \log \theta^{x_i} + \log (1-\theta)^{1-x_i} \\ &=& \sum_{i=1}^N  x_i \log \theta + (1-x_i)\log(1-\theta) \end{eqnarray*}

これの微分は

\begin{eqnarray*} \frac{\partial}{\partial \theta} \log L(\theta) &=& 0 \\ \frac{\partial}{\partial \theta} \sum_{i=1}^N x_i \log \theta + (1-x_i) \log (1-\theta) &=& 0 \\ \sum_{i=1}^N \frac{x_i}{\theta} - \frac{1-x_i}{1-\theta} &=& 0 \\ \frac{1}{\theta} \sum_{i=1}^N x_i - \frac{1}{1-\theta_i} \sum_{i=1}^N (1-x_i) &=& 0 \\ (1-\theta) \sum_{i=1}^N x_i - \theta \sum_{i=1}^N 1-x_i &=& 0 \\ \sum_{i=1}^N x_i - \theta \sum_{i=1}^N x_i - \theta \sum_{i=1}^N 1 + \theta \sum_{i=1}^N x_i &=& 0 \\ \sum_{i=1}^N x_i - n \theta &=& 0 \\ \theta &=& \frac{\sum_{i=1}^N }{n} \\ \end{eqnarray*}

この最適解はx_1,x_2,..,x_nの平均を表していることがわかります。
もし、コインが100回表、裏が0回だった時、最尤推定により、得た\thetaの値は\theta=1
また、コインが50回表、裏が50回であれば、最尤推定により、得られた\thetaの値は\theta = 0.5

最尤推定の問題点

最尤推定には問題点もあります。例えば、先ほどみたとおり、100回表がでて、裏が0解の時、\theta=1とするのが尤もらしいという結果が最尤推定から得られました。

ただ、もし3回表がでて、0回裏が出たとき、この時の最尤推定量も\theta=1となってします。しかし、3回表が出たからと言って、コインの表が出る確率が1と考えるのはあまりに危険すぎます。


つまり、観測データが少ない場合は最尤推定の結果はあまり信用できません。


Reference

https://ja.wikipedia.org/wiki/%E5%B0%A4%E5%BA%A6%E9%96%A2%E6%95%B0

コメント

  1. 対数尤度をさらに変形していくと確率モデルの分布をデータの出現頻度の分布(経験分布)に近づけるって話にももっていけますよねー。

    返信削除
    返信
    1. コメントありがとうございます!
      すいません。勉強不足で、よろしければご教授していただけないでしょうか?

      削除
  2. このコメントは投稿者によって削除されました。

    返信削除

コメントを投稿

このブログの人気の投稿

カーネルk-meansの実装

Introduction   English ver 今日はカーネルk-meansの実装をしました。k-menasアルゴリズムはクラスタリングのためのアルゴリズムです。僕がカーネルk-meansを実装しようと思ったのには一つ理由があります。それは僕の友人がk-meansのプレゼンを、僕がカーネルのプレゼンをしていた時に、k-meansにカーネルを適応できないかと思ったからです。そこで、カーネルk-meansについての論文を探しました。 ここのpdf を主に参考にさせていただきました。うまくカーネルk-meansを実装できたと思います。ここでは、普通のk-meansとカーネルを用いた,kernel k-meansについての実装の結果を紹介します。 また、この記事では実装結果のみ書きますが、理論のほうも別の記事で書くつもりです。書き終えたらリンクをこの記事にも貼っておきます。 #  理論編書きました。K-means 理論編 概要 dataset   ちょっとだけ理論の説明  k-means    kernel k-means   Dataset   English ver 今回使うのは二つのデータセットです。一つ目は、普通のk-means用のデータです。二つ目はkernel k-means用のデータセットです。 一つ目のデータは、三つのグループで構成されており、次元は2で、サンプル数は300です。以下のような分布になっています。 二つ目のデータは二つのグループで構成されており、次元は2でサンプル数は300です。   this page にデータセットを作ったコードを載せています。 ちょっとだけ理論の説明 k-meansとは、k-平均法とも呼ばれています。初めに、適当なクラスに分け、各クラスの中で平均となるベクトルを求めます。そして、各データに対して、すべての平均ベクトルとの距離を求めます。そして、最小となる距離になるクラスに改めて、そのデータをクラスタリングします。そして、新たに得られたクラスの中でそれぞれ平均ベクトルを求め、これを繰り返し、平均ベクトルが動かな...

ダイクストラ法

Introduction English ver 今日は、ダイクストラ法について書きます。ダイクストラ法とは最短距離を求めるアルゴリズムです。地図はグラフで表されます。もし、まだ this page を見ていない方は先にこちらをご覧ください。今回はこの記事を前提としています。このページでは、グラフの定義と、ヒープ構造について書いています。ダイクストラ法ではヒープ構造を使って、かなりの計算量を落とします。 この スライド はダイクストラ法を説明したスライドです。 Overview アルゴリズム 実装 アルゴリズム このアルゴリズムは スタート始点のノードを決める。そして、それをAと名付ける。 各ノードにd=\inftyを割り当てる。ただし、スタート地点はd=0 Aの隣接ノードのリストをadj_listと名付ける。  For adj in adj_list:  If d of adj > d of A + weight to adj -> d = A + weight to adj. グラフnetworkからAを取り除く グラフnetworkの中で最初のdを持っているノードをAとし、4に戻る。 となっています。 このアルゴリズムを図を用いて説明します。  このグラフを使って説明します。  初めに、スタート地点を決めます。そして、各ノードにd=\inftyを割り当てます。  Aから始まります。Aの隣接ノードであるBのdを更新します。もし、現在のBよりもAのdとA->Bへの重みを足したもののほうが小さいならdをその値に更新します。同じようにCnのdを更新します。 次にAを取り除きます。  次はBから始まります。Aと同じことをやります。 このダイクストラ法では今のような操作をグラフの全てのノードに×がつくまで続きます。 実装 このアルゴリズムではO(log(|V|^2))という計算量を持っています。最小のdを持つノードを探すのに時間がかかります。 しかし、ヒープ構造を使えばO((E+V)log(V))に減らせます。ヒープ構造で現時点での...

大学院試験 -外部への道しるべ-

始めに この度、 京都大学大学院情報学研究科システム科学専攻 に合格することができました!!! 僕は現在、立命館大学という関西の私立大学に通っているので、外部受験をしたことになります。 さらに、学部は数学専攻で、大学院からは情報学(の中でも機械学習)専攻になるので、専門も変えることになります。 この記事では、外部の大学院、もしくは専攻替えを考えている人向けに書こうと思っているので、目次で気になった項目があれば、ぜひ、読んでいってくださいませ。( *´艸`) ちなみに、予測点数は線形微積6~7割、専門科目満点、英語かなり低いので内緒です。(笑) 得点開示を要求するので、得点がわかったら、また追記します。 目次 外部受験を目指すまで、目指したきっかけ 外部受検の大変さ 専攻替えの大変さ 合格するために 英語が苦手な人へ 数学科の学部から情報学(機械学習)の大学院を目指す人へ 応援 外部受検を目指すまで、目指したきっかけ ここでは、自分の大学生活がどんなだったかを書いてるだけなので、興味のない人は飛ばしましょう。(笑) 僕が学部二回生頃に、当時数理科には機械学習の研究をされている先生が一人だけ所属されていました。その先生に、直接弟子入りさせていただき、僕の機械学習への道は始まりました。。。(メインは遺伝統計学の研究でした。) 弟子入りした直後は、タイピングもなめくじのように遅かったですし、gitもpullする前にpushしたこともありました。。。 しかし、その先生は、目的に最先端で届く道のりを用意してくださいました。 プログラミングを初めて一か月ほどで、t-SNEの実装をしたり(遺伝統計学の研究で必要だった)、四か月ほどで、カーネルc-SVMの実装をしたり(やってみなとゆわれて(笑))することができました。その後も、学部二回生、三回生ながら、論文を読んで実装してきました。 学部二回生冬には、遺伝統計学の研究を 株式会社パーソルキャリア さん主催のハッチングフェスというデータサイエンティストのためのイベントで、発表しました。 このイベントでは、企業の方もたくさん来られて、知り合えるチャンスがかなりあります!! (名刺を作っておくと、「えっ、学生なのに名刺持ってるの?!」ってなるので、覚えてもらえます。...