クラス分類
前回記事で定義した平均交差エントロピー関数を最小化するパラメータベクトルを決定します。
共役勾配法(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℃ を境にして雨と雪に分かれていますね。ただし、決定境界に近くなるほど、どちらになるのかは曖昧になります。
コメント