ガンマ関数とは?定義やその性質を理解する

Posted: , Category: 数学 , 解析学

ガンマ関数は、統計学や機械学習の基本的な関数で、その登場回数は非常に多いです。

一方、ガンマ関数自体は、ベイズ推定などのあくまでも正規化項の一部として扱われることが多く、その関数系や定義については意外と理解されていないところもあるようです。

今回は、機械学習のテキストや実務で非常に多く登場するガンマ分布について、その定義や性質について理解を深めていきます。

本記事の内容
  • ガンマ関数の関数系を理解する
  • ガンマ関数の性質を理解する
  • Pythonでガンマ関数を可視化して、関数の形について理解する

ガンマ関数の定義

まず、最初にガンマ関数の定義を紹介します。ガンマ関数はこのように定義される連続関数になります。

ガンマ関数の定義

正の実数$s$を用い下記のように、ガンマ関数を定義する。

\begin{equation}
\begin{split}
\Gamma(x) = \int_0^{\infin} x^{s-1} e^{-x} dx
\end{split}
\end{equation}

あとのセクションで可視化していくので、どのような関数形になっているかはその際に確認していきます。

ガンマ関数の性質

ガンマ関数を可視化する前に、ガンマ関数の性質について説明します。これは非常に重要です。

まず、ガンマ関数において成り立つのは、下記の性質です。$n$を整数とした時、

ガンマ関数の性質(1)

$n$を整数とした時、下記の性質が成り立つ。

\begin{equation}
\begin{split}
\Gamma(n + 1) = n!
\end{split}
\end{equation}

つまり、(1)式の$x$に $n+ 1$を代入した値が、(2)式になるということです。少し面白い性質ですね。

また、正の実数$x$についてもガンマ関数は下記の性質が成り立ちます。

ガンマ関数の性質(2)

正の実数$x$についてもガンマ関数は下記の性質が成り立ちます。

\begin{equation}
\begin{split}
\Gamma(x + 1) = x \Gamma(x ) 
\end{split}
\end{equation}

ガンマ関数の性質として(3)式は非常に重要です。確率統計の分野では、ガンマ関数を用いた式変形をする際には、確実に登場します。この式から次の性質も導くことができます。

ガンマ関数の性質(3)

$\alpha$を非負の整数とした時、

\begin{equation}
\begin{split}
\Gamma(x + \alpha) = (x -1 + \alpha) \Gamma(x - 1 + \alpha) 
\end{split}
\end{equation}

単純に、(3)式の$x$を$x + \alpha$に置き換えた形式となっています。

コラム

ガンマ関数を可視化する

ガンマ関数を可視化して、どのような関数形になっているか可視化してみましょう。

まずはライブラリをインストールします。

import numpy as np
from scipy.special import gamma
import matplotlib.pyplot as plt

下記のコードで可視化できます。np.linspace 関数の第三引数に2251を渡しているのは、公式ドキュメントでもそのようにしているからで、これが2251にしないと図が綺麗に表示されません。

x = np.linspace(-5, 5, 2251) # see: https://scipy.github.io/devdocs/reference/generated/scipy.special.gamma.html
 
fig = plt.figure(figsize = (8, 5))
ax = fig.add_subplot(111)

plt.axvline(x = -1, color = "gray", linestyle='dashed')
plt.axvline(x = 0, color = "gray", linestyle='dashed')
plt.axvline(x = -2, color = "gray", linestyle='dashed')
plt.axvline(x = -3, color = "gray", linestyle='dashed')
plt.axhline(y = 0, color = "gray", linestyle='dashed')
    
ax.set_xlim(-3.5, 5)
ax.set_ylim(-10, 25)
ax.plot(x, gamma(x), color='blue')

plt.show()

ガンマ関数を表示することができました。

【広告】
統計学的にあなたの悩みを解決します。
仕事やプライベートでお悩みの方は、ベテラン占い師 蓮若菜にご相談ください。

関連タグ:
機械学習と情報技術