HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

確率変数と確率質量関数・確率密度関数

 

 

follow us in feedly

https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png

 

はじめに 

先日、機械学習を学ぶ上での線形代数に関して書きました。

s0sem0y.hatenablog.com

 

ここでは線形代数が分かると、機械学習を記述している数式がかなり分かりやすくなるという話をしました。線形代数は多くの数学の分野で、非常に便利な言語の役割をしているという論調です。実際、本の読みやすさが必ず変わります。これは保証するところです。

 

ところで、確率・統計はあとまわしても良いという言い方をしましたが、後回しにしていいということは「いつかはやった方がいい」ということでもあります。

 

一方で機械学習の手法を基礎づけているのは確率・統計の理論でもあります。線形代数や微積分でいろいろ計算をしますが、それは実は統計的な推定を行っていることになるというケースが多々有るのです。

 

数式を読めるようになり、計算が何をしているか分かるようになったとして、それが理論的に何を行っているものであるのかまで掘り下げたければ、確率・統計を学ぶしか無いのです(あるいは、ベイズ推論などをやりたい場合)。

 

そこで最低限必要な必要な確率変数と確率質量関数・確率密度関数の概念をここで抑えておきます。

 

概念を抑えると、確率の計算自体は、線形代数や微積分の計算で済まされるため、それほど難しくは感じなくなるでしょう。また、本当に少数の公式さえ覚えていれば、ベイズ推論などはほとんど完結してしまいます(使う式は少ないが、たいてい計算自体は面倒だが)。

 

確率変数と確率

確率変数Xとは簡単に言えばランダムに値を変える変数です。例えばサイコロの出目出会ったり、天気であったりを確率変数で表現します。

 

離散確率変数

ここでは仮にサイコロの出目というものを扱いましょう。確率変数を

 

X=\{1,2,3,4,5,6\}

 

などと表現しておきます。確率変数は観測してみるまではどの結果を返してくるかは分かりません。ともかくランダムにいくつかの選択肢の中からどれかの値を取るということになります。ただし、ここでいうランダムというのは、本当に何の意味もなくどれかが適当に出てくるというわけではありません。

 

どれかが出やすくてどれかが出にくい。あるいは同じくらいである。などの規則性があるが、その規則に従った結果、どれかがランダムに出るということです。

 

確率質量関数

ランダムに値を取る確率変数に対して、ある値の出やすさを数値化しなければなりません。それが確率と呼ばれるものになります。例えばPr(X = 1)と書いた場合には確率変数X1の値を取る確率を表現します。PrはProbabilityの略であり、単にPと書くことも多いです。

 

サイコロの場合は出目のそれぞれに対して確率を考えることで、Pr(X)を6個考えることができます。X=1となる確率はPr(X=1)と書きますから、Xxの値を取る確率をPr(X = x)と書くことができますね。

 

小文字xは確率変数Xの実現値であり、実現値を文字で置いておくことで、具体的な値を渡すのを後回しにして、サイコロの出目の確率を一般的に表しておくことができるようになります。ここで

 

p(x) ≡ Pr(X = x) (≡は定義するという意味)

 

を確率質量関数と言います。

 

 

 とあるサイコロについて、もしかしたら製造ミスで重心がずれている可能性もあります。そういう場合は、確率変数を何度か観測することで、確率質量関数を特定していく必要が出てきます(そもそも、本来、現実の確率変数の規則性を予め知っていることなんて殆ど無い)。

 

以下は3が出にくく、一方で4が出やすくなっているサイコロの確率質量関数p(x)です。

 

f:id:s0sem0y:20170716014040p:plain

確率質量関数 p(x)に対して具体的な値x=1などを代入していったものが、Pr(X = 1)という具体的な確率を表しています。したがって確率質量関数を見れば、どの値が出やすく、どの値が出にくいのかの全ての情報が手に入ります。 

 

特に困ることがなければ、xを確率変数と言ってp(x)がその確率だとか、あるいは確率質量関数だとか言ってしまうことも多いです。ココらへんは文脈で使い分けていきましょう。

 

ちなみに、確率の和は1でなければいけないため

 

\displaystyle \sum_{x=1}^6 Pr(X = x)= \sum_{x=1}^6 p(x) =1

 

となっています。また、確率質量関数p(x)に具体的な値を入れた場合は、それ自体が確率変数がその具体的な値を取る確率を表しているため

 

0 \leq p(x) \leq 1

 

であることも重要です。これらは非常に重要なことなのでアタリマエのことですが必ず頭に入れておきましょう。

 

連続確率変数

今まではサイコロの目のように、確率変数Xが飛び飛びの値を取るケースを考えてきました。一方で、気温などは連続的な値を持っており、非常に細かく変動します(そして、その変動の範囲も基本的には定かではない)。

 

このように連続的に値を取る確率変数を連続確率変数と言います。

 

鋭い人の場合は、「気温」というのは確率的に決まっているんじゃなくて、物理的な現象によって決定論的に決まっているんだ!と思うかもしれないですね。

 

そうだとしても、その物理的な詳細に立ち入らず、観測だけから規則を定量的に評価しようという場合には、その観測対象を確率変数として扱います(したがって、回路に流れる電流などを確率変数だと思っても良いんです。これはもはや人間側の姿勢の問題である)。

 

確率密度関数

とりあえず、連続確率変数xの確率密度関数をp(x)とします。とりあえず確率密度関数の例をWikipediaから引っ張ってきて貼ります。

f:id:s0sem0y:20170716220511p:plain

値が高いところほど、出現確率が高いことを表すのは同じです。緑でと青では出現確率が高い値が全く違いますし、赤と青では、出現する値の散らばり具合が違う様子がわかります。

 

 

ここまでは離散確率変数に対して確率質量関数を考えてみたのと同じ流れですが、確率質量関数と確率密度関数では大きな違いがあります。

 

実は確率密度関数p(x)は確率質量関数とは異なり、必ずしも

 

0\leq p(x) \leq 1

 

とはなりません。

 

すなわち、p(x)\geq1などのケースが有るということです。

 

ここで勘違いしてならないのは、「確率が1を超えるなんておかしいじゃないか!?」という指摘は的はずれであるということです。だれも確率密度関数p(x)に具体的な値を入れたら、確率になるということは一言も言っていないからです(ここが確率質量関数との大きな違い)。では連続確率変数に対する確率はどのように考えるのでしょうか?それは、

 

連続確率変数を扱う場合は、確率変数がa_1 \leq x \leq a_2の中に収まる確率というものを考えることになります。ドンピシャでx = aとなる確率というものを考えたりはしないのです。 

 

そもそも連続的に変化する値に対してx=100である確率なんてものを考えても、あまり意味はありません。なぜなら、x=100.000000001という値は、もはや別のものであるため、ドンピシャの値になる確率は異常なほど小さくなってしまうからです。

 

そこで、例えば、株価が1780円〜1785円の間に収まる確率は○○などと表現することになります。数式で表現する場合には、

 

確率変数xa_1 \leq x \leq a_2の中に収まる確率Pr(a_1 \leq x \leq a_2)

 

\displaystyle Pr(a_1 \leq x \leq a_2) = \int_{a_1}^{a_2}p(x)dx

 

と表現します。

 

当然、連続確率変数x\bf -∞ \leq x \leq ∞に収まる確率は1になります(これの外に値を持つことなんてありえないですよね)。すなわち、

 

\displaystyle Pr(-∞ \leq x \leq ∞) = \int_{-∞}^{∞}p(x)dx=1

 

ということになります。このような形で、確率の総和が1になることを書き表し、具体的な確率であるPr(a_1 \leq x \leq a_2)に対して初めて

 

0\leq Pr(a_1 \leq x \leq a_2) \leq1

 

と書かれることになります。p(x)a_1 \leq x \leq a_22という値を取っていたとしても、a_1 \leq x \leq a_2の幅が0.5未満なら、確率はちゃんと1未満に収まってくれるというわけです(以下の画像では、\bf 1.5 \leq x \leq 1.9に収まる確率が2 \times 0.4 = 0.8と求められる。連続確率変数に対する確率は、確率密度関数の面積を求めることで確率を表すこととなる。残りの0.2の分は、きっとグラフの見えない違う場所にあるのであろう)。

 

f:id:s0sem0y:20170716215529p:plain

 

確率密度関数と確率質量関数の名前について

なぜ、こんなややこしい名前をつけているのかを一応説明しておきます。

実は意味が分かるとこれほど明解な命名はありません。

 

例えば、xをある原点からの位置だとしましょう。このxは原点から1kmとか2kmとか飛び飛びの値だとします。そして、位置xには金塊が質量f(x)だけ置いてあるとします。

 

この場合、位置x=aに行き、そこに置いてある金塊を全て拾った場合には質量f(a)だけの金塊を得られることになります。

 

一方でxが連続的な値を持っており、金塊の代わりに金粉を密度f(x)でばら撒いてあるとしましょう。位置a_1 \leq x \leq a_2に置いてある金粉を掻き集めて、後で金塊にすることにしましょう。

 

ここで、位置a_1 \leq x \leq a_2での金粉の密度が大体f(a)くらいであったとすれば、かき集めた金粉の質量は、f(a)×(a_2 - a_1)ということになります。

 

もっと一般的に書けば、位置xで金粉の密度が一定だと見なせるくらいに狭い範囲dxで金粉をかき集めれば、その質量はf(x)dxということになります。

 

金塊が直接置いてある場合は、直接その質量を見積もれば良いのですが、金粉がばら撒かれている状態ではそれができません。仕方がないので、どれくらいの範囲から、どれくらいの密度でかき集めることができたかでその質量を決定するというわけです。

 

確率の話に寄せるならば、金塊が直接置いてある場合、その質量を表す金塊質量関数f(x)を考えることができ、金粉がばら撒かれているのならば、金塊密度関数f(x)とその幅dxを同時に考えてやる必要が有るというわけです。

 

私達は確率変数に対して、その確率を見積もりたいのです。ある確率変数に対して、確率を直接表したものを確率質量関数p(x)としてあげて、これが細かく細分化されてばら撒かれているような状態(確率変数が連続)である場合には確率密度関数p(x)とその幅dxを考えてやらねばならないということになります。

 

金塊に対してならば細分化した金粉という物理的な実体を想像できますが、確率に対してはそれが出来ません。仕方がないので「確率質量」と「確率密度」という言葉を当てはめて、上記の意味の有る値を計算する過程を表現したというわけです。

 

この手の話は確率に関してのみならず、和と積分という概念に対していつでも通ずるものです。

 

 

最後に

 

今回扱ったサイコロに関する確率質量関数は、カテゴリカル分布などと呼ばれます。対象がサイコロであるとして、集めたデータから出目の確率を決定(すなわち確率質量関数の形を決定)していくのが推定という枠組みになります。

 

推定を行う際には、いろいろな計算が必要となりますが、それらは微積分や線形代数が分かっていれば難しくはありません。また、確率・統計に現れる独自の公式もそれほど多くはないため、機械学習を学びながら触れているうちに、必要十分に学ぶことができるでしょう。

 

 以下はその基本的な公式などについてまとめた記事になります。 

s0sem0y.hatenablog.com

 

s0sem0y.hatenablog.com

 

また以下の無料講座は非常に参考になります(スピードは初心者にはかなり早いですが、概念を理解した状態で挑めば、あとはしっかり数式をチェックしていくことで追っていくことができるでしょう)。

 

https://www.udemy.com/computervision/learn/v4/overview