ロジスティック関数

ロジスティック関数

ロジスティック関数

 ロジスティック方程式
 
\[\frac{dN}{dt}=\left( 1-\frac{N(t)}{K}\right)N\]
の解である ロジスティック関数 (Logistic function) は、シグモイド関数
 
\[f(x)=\frac{1}{1+\exp(-ax)}\quad (a\gt 0)\]
を特別な形として含む、より汎用的な関数です:
 
\[N=\frac{K}{1+\exp\left\{-aK(x-x_0)\right\}}\]
 この定義式において $K=1,\ x_0=0$ とすればシグモイド関数となります。シグモイド関数は(パラメータ $a$ によって)曲線の形しか変えられませんでしたが、ロジスティック関数は $x_0$ によって左右に平行移動させることが可能です。このような柔軟性から、機械学習の分類問題の回帰手法 (最尤推定の記事を参照) としてロジスティック関数が用いられることがあります。

 次のコードは $a=1,\ K=1$ として、$x_0$ を変化させてロジスティック関数をプロットします。

# リストLGS_01
# ロジスティック関数のグラフ

# ライブラリをインポート
import numpy as np
import matplotlib.pyplot as plt

# ロジスティック関数を定義
def logistic(x, a, k, x0):
    y = k / (1 + np.exp(-a * k * (x - x0)))
    return y

# グラフ描画領域の設定
fig = plt.figure()
ax = fig.add_subplot(111)
ax.grid(linestyle = "--")
ax.set_title("Logistic Function", fontsize = 16)
ax.set_xlim(-8, 10)
ax.set_xlabel("x", fontsize = 16)
ax.set_ylabel("y", fontsize = 16)

# xのデータ
x = np.linspace(-10, 10, 257)

# x0を変えながらロジスティック曲線をプロット
x0 = [0, 2, 4]
for j in range(3):
    y = logistic(x, 1, 1, x0[j])
    ax.plot(x, y, label = "x0 = {}".format(x0[j]))

ax.legend()

Python ロジスティック関数