データとエンジニアリングのよもやま話

データ活用が推進できるためのエンジニアリングに関するブログの筈..

No.24 Drawing the Decision Boundary of Logistic Regression part 2.

昨日は、ロジスティック回帰の決定境界をRで描画することに触れてきましたが、
もう少し、深掘りしていきたいと思います。(但し、「2次元」に限ります。笑)

昨日のエントリ(No.23)で、ロジスティック回帰のモデル推定後、等高線を利用して、決定境界を描いてきました。

これでしたね!(再掲)

f:id:yuu_kimy:20140917173734j:plain

この決定境界は、2次元平面上の直線として描かれています。
もっと言えば、x(exam1)とy(exam2)の関係式が直線というわけです。

決定境界を描く際、Rのcontour関数のlevelsを0.5として設定していました。
これは、ロジスティック回帰のモデル式に当てはめるのであれば、

 p(y=1) = h_x(\theta) = \frac{1}{1 + \mathrm{e}^{-(\theta_0 + \theta_1x_1 + \theta_2x_2)}}

左辺は、  p(y=1) = 0.5 となります。

これらを満たすようなx(exam1)とy(exam2)の組み合わせが決定境界(線)になります。

上記を変形すれば、ロジット関数が得られます。
つまり、以下のように変形できます。

 \log (\frac{p}{1-p}) = \theta_0 + \theta_1x_1 + \theta_2x_2 となり、

左辺は、上記の  p(y=1) = 0.5 より、

 \log (\frac{p}{1-p})  = \log (\frac{0.5}{1-0.5}) = \log 1 = 0 となります。

すなわち、

 \theta_0 + \theta_1x_1 + \theta_2x_2 = 0

ということになり、オッズ比の対数のモデルを「0」とした関係が決定境界というわけです。

ここまで来れば、決定境界を2次元の直線として記述できたわけですから、

 x_2 = \frac{-(\theta_0 + \theta_1x_1)} {\theta_2}

と変形できますね。(御馴染みの  y = ax + b の形式にしたわけです。)

昨日のモデル推定の続きから、上記の結果に基づいて、決定境界を描いてみましょう!

# モデルの偏回帰係数を取得
glm.coef <- as.matrix(admit.glm$coefficients)
# x1とx2の値を算出
x1 <- seq(30,100,6)
x2 <- -(glm.coef[1] + glm.coef[2] * x1) / glm.coef[3]
# プロット化
cols=as.numeric(ex2data1$admit)
pchs=as.numeric(ex2data1$admit)
plot(ex2data1[,-3], col=cols, pch=pchs, xlim=c(30,100), ylim=c(30,100))
lines(x1, x2, col="blue", lwd=2)

昨日と同じ結果が得られました!!

f:id:yuu_kimy:20140918172410j:plain

ここまで深入りしなくとも、決定境界は描けるわけですが、決定境界を定義する関数の姿が明確になりましたね!

それに、たまには、数式を手計算するのも良い練習ですよね?!(笑)