クラス分類
前回記事で定義した平均交差エントロピー関数を最小化するパラメータベクトルを決定します。
共役勾配法(Conjugate Gradient Method)
今回は 共役勾配法 (Conjugate Gradient Method) というアルゴリズムを使うので、method には "CG" を渡しておきます。さらに、この手法ではヤコビアン (Jacobian matrix) とよばれる行列を渡す必要がありますが、ここでは grad_cee_logistic を渡しておきます。
# In[4]
from scipy.optimize import minimize
# パラメータの初期値
q0 = [2, -2]
# 平均交差エントロピー誤差関数が最小値をとるパラメータを探索
fit = minimize(cee_logistic, q0, args = (X, T),
jac = grad_cee_logistic, method = "CG")
# パラメータを取得
q = fit.x
print("(a, b) = ({0:.3f}, {1:.3f})".format(q[0], q[1]))
(a, b) = (0.912, -0.234)
近似関数のパラメータ $a,\ b$ が決定したので、最低気温 $x$ を与えて雨が降る確率 ($t=1$ となる確率) を求めることができるようになりました。
決定境界(Decision Boundary)
次は気温 $x$ が与えられたときに、
「雪になる ($t=0$) のか、雨になる ($t=1$) のか」
という二択情報を得られるようにします。言い換えると
「雪になる確率が高いのか、雨になる確率が高いのか」
ということです。そこで、得られた確率曲線(最適化されたロジスティック関数)が $0.5$ となる $x=b$ を境にして、雨と雪に分類することにしましょう。ひと目でわかるように、決定境界線 $x=b$ をグラフに表示しておきます。
# In[5]
# FigureとAxesの設定
fig, ax = plt.subplots(figsize = (8, 5))
ax.grid()
ax.set_xlim(-8, 8)
ax.set_ylim(-0.5, 1.5)
ax.set_yticks([0, 1])
ax.set_xlabel("Temperature [${}^\circ$C]", fontsize = 14)
# 雨は赤色、雪は青色の点で表示
ax.scatter(X[T == 0], T[T == 0], color = "blue",
s = 16, label = "snow", zorder = 2)
ax.scatter(X[T == 1], T[T == 1], color = "red",
s = 16, label = "rain", zorder = 2)
# Tが1となるXの要素で配列を生成し、その中から最小要素を抽出
Z = X[T == 1]
x_1 = np.min(Z)
# Tが1となるXの要素で配列を生成し、その中から最大要素を抽出
Z = X[T == 0]
x_2 = np.max(Z)
# Tが0と1の両方を取り得る範囲を塗り潰す
ax.axvspan(x_1, x_2, color = "orange",
alpha = 0.4, zorder = 1)
# 目盛を設定
xt = range(-8, 9, 4)
xt = list(xt) + [x_1, x_2]
tt = np.arange(-0.5, 1.5, 0.25)
ax.set_xticks(xt)
ax.set_yticks(tt)
# 最適化されたパラメータでロジスティック曲線を描画
x = np.linspace(-8, 8, 257)
L = logistic(x, q)
ax.plot(x, L, color = "green")
# ★★★★★★★★★★
# 決定境界
# Xの最小要素と最大要素
X_min = np.min(X)
X_max = np.max(X)
# t=1となる確率が0.5を超える要素のインデックスを取得
L2 = np.where(L > 0.5)
# L2の最小要素
i = np.min(L2)
# 決定境界
b = (x[i] + x[i -1]) / 2
print("決定境界 x = {0:.3f}".format(b))
# 決定境界線
ax.plot([b, b], [-2, 2], color = "black",
linestyle = "dashed", label = "Decision Boundary")
ax.legend()
plt.show()
決定境界 x = 0.281
緑色のラインが雨の降る確率を表す曲線、黒い点線が決定境界です。約 0℃ を境にして雨と雪に分かれていますね。ただし、決定境界に近くなるほど、どちらになるのかは曖昧になります。
コメントを書く