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

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

No.23 Drawing the Decision Boundary of Logistic Regression.

少し必要(?)に迫られ、ロジスティック回帰の決定境界(Decision Boundary)Rで描いてみました。
その時の備忘も兼ねて、整理しておきたいと思います。

以前のエントリ(No.18)で、courseraの「Machine Learning」コースを受講しました~を書きましたが、第3週は、ロジスティック回帰を扱っています。
今回は、その演習に出てくるサンプルデータを利用して、「決定境界」を書いていきます。

サンプルデータをプロットすると、こんな感じになります。(Octaveで描画)

f:id:yuu_kimy:20140917172952j:plain

このコースでは、原則、Octaveで演習を実施します。
Octaveは、MATLABオープンソース版といえる、行列演算に強い数値計算ソフトです。

で、これをRで一応、書いてみると、、

f:id:yuu_kimy:20140917173240j:plain

# サンプルデータは、ex2data1でインポート。
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))

このサンプルデータは、2つの試験結果とそれらに基づく合否状態を表したものです。

f:id:yuu_kimy:20140917173445j:plain
気になる方は、実際に、courseraのMachine Learningを受講してみてください。

このデータを使って、ロジスティック回帰モデルを作成し、合否の(判別を予測する)決定境界を描こうというわけです。

早速、ロジスティック回帰のモデル推定を行います。

ex2data1$admit <- as.factor(ex2data1$admit)
admit.glm <- glm(admit ~., family = binomial, data = ex2data1)
summary(admit.glm)

さて、いよいよ決定境界をズバッと描いてみましょう!(笑)

# グリッドの指定。
g.x <- seq(30,100,6)
g.y <- seq(30,100,6)
xy.grid <- expand.grid(g.x,g.y)
names(xy.pgrid) <- c("exam1","exam2")

# 作成したモデルから合否の確率を算出
predict.glm <- predict(admit.glm, newdata=xy.grid, type="response")

# 等高線を利用して、合否確率(の閾値)が0.5の決定境界(線)を描画
par(new=T)
contour(g.x,g.y,array(predict.glm,dim=c(length(g.x),length(g.y))),xlim=c(30,100),ylim=c(30,100),col="purple",lwd=2,drawlabels=T, levels=0.5)

f:id:yuu_kimy:20140917173734j:plain

ちなみに、合否判定の予測精度(適合率)を上げた決定境界を描く場合は、contour関数のlevelsを0.5より大きくします。幾つかのパターンを描いたものは、以下の通りです。

# プロット画面を2×2で分割
par(mfrow=c(2, 2))
# 上記と同じようにプロットを描き、levelsを変えて、決定境界(線)を描画
# plot→par(new=T)→contourを順に呼び出す

f:id:yuu_kimy:20140917174650j:plain

実務では、2変数のみのデータを扱うことは、ほとんどないでしょうが、知っておくと便利かな、と。。
数値だけではなく、プロットできるものなら、視覚的にも結果が見えると良いですよね?!

今回は、2次元上のデータにおける決定境界を描いたわけですが、次回は、ロジスティック回帰のモデル式をトレースして、その意味を追っていきたいと思います。(次回の予定..は未定ww)

参考

ここまで書いておいて何ですが、以下のエントリを参照したほうが詳しいかと思います。苦笑
あくまで、本エントリは、備忘録ということで、ご了承をm(_ _)m

パッケージユーザーのための機械学習(2):ロジスティック回帰 - 銀座で働くData Scientistのブログ
ロジスティック回帰 - 人工知能に関する断創録