本書を元に「ロジスティック回帰分析」について整理する。第 3 章同様に非常に興味深い内容だった。ここでは、実践例も書くつもりだが、未だ満足いくレベルの理解ではないので、本当の意味で実践的なものは、今後の課題とした。
本書のロジスティック回帰分析で、興味深いのは上記図の英文にある次の一節。
(i.e., the distance from the separating boundary)
この the separating boundary(境界線)とは、左図では右下がりの線で、黒点と+点を分離する線となっている。Margin と表記されているのが、境界線からの距離で、これを the distance from the separating boundary と表している。
この距離が長いほど、黒点、もしくは+点のグループに属する可能性が高いと言える。冒頭のチャートでいえば、縦軸は確率であり、f (x) の値が大きくなるほど 100% に近づき、逆に小さくなるほど 0% に近づく。つまり、ロジスティック回帰分析は「回帰分析」という名前に反して「クラス分け」の分析方法。そのことは本書でも
It is estimating the log-odds or, more loosely, the probability of class membership (a numeric quantity) over a categorical class. So we consider it to be a class probability estimation model and not a regression model, despite its name.
要するに、regression model(回帰分析)では、y = ax + b のようにモデル化して y の数値を求めるが、ロジスティック回帰分析では「どちらかに属する確率を求めるクラス分け」と言える。ちなみに、x 軸の f (x) とは y = ax + b などの回帰式を表す。ロジスティック回帰分析チャートは、特徴的な sigmoid(S字カーブ)となるが、これが何を意味すのだろうか。
ある出来事が「起こる」「起こらない」、つまり「0 か 1 か」の予測を確率と共に表している。
上記の境界線のチャート図(Figure 4-8)の例では、年齢と債務バランスのデータを元に、黒点のグループとブラス点のグループをプロットしている。つまり、年齢と債務バランスの情報(数値データ)から、どちらのグループに何パーセントの確率で属するかをモデル化した(予測する)のがロジスティック回帰分析。
S字カーブが表すのは、ある値(ある境界線)を境に、どちらかのグループに入る確率の急激な変化。S字カーブの例は、細菌の繁殖具合、薬の効用など多くの事象に見られる。マーケティングでいえば、商品Aと商品Bを買った人は商品Cを買うグループに属する可能性は何パーセントか、つまり購買履歴からオススメ商品の特定もS字カーブの確率から抽出可能になる。
数学的背景
ロジスティック回帰分析の数学的背景といっても、大まかなイメージを述べる。この分析で「やろうとしていること」を理解するのが大切。
まず、以下の等式 4-3 の p+(x) はベクター x があるクラスに属する確率。
この等式の f (x) は、線形回帰分析の ax + b と同様。等式に Log-odds linear function とあるのは、左辺の log(...) の「...」部分がオッズだから。
本来オッズは「0 から 無限大」の値だが、その自然対数は「マイナス無限大からプラス無限大」をとる。
等式4-3 を p+(x) について解く式に変形したのが、次の等式 4-4
ロジスティック回帰分析チャートでは y 軸が左辺の確率、x 軸が右辺の f (x) となる。
統計学的にロジスティック回帰分析を説明すると
量を予測(被説明変数)する場合は、ax + b のような線形回帰モデルで表されるが、クラス分類では質を予測することになる。上記のように、線形回帰モデルを拡張したものを general linear model, GML(一般化線形モデル)と呼び、ロジスティック回帰分析はGMLに含まれる。
平たくやっていることを言い表すと、線形回帰モデルの数値結果を、予測値として欲しい 0 から 1 の確率値に変形しているだけ。なので、先に書いたように「やっていることに反して回帰分析と名付けられている」のはそのため。
ロジスティック回帰分析をやってみる
R に付属のデータを使ってロジスティック回帰分析をやってみる。
このデータは生体検査で、malignant(悪性)か benign(悪性でない)が被説明変数、V1からV9までが説明変数。つまり、これらの説明変数から、悪性か否かを予測するモデルをロジスティック回帰分析で行う。
以下では、V1 変数だけで分析した。
> library(MASS)
> b <- biopsy
> b$classn[b$class=="benign"] <- 0 # 分類化
> b$classn[b$class=="malignant"] <- 1 # 分類化
> head(b)
ID V1 V2 V3 V4 V5 V6 V7 V8 V9 class classn
1 1000025 5 1 1 1 2 1 3 1 1 benign 0
2 1002945 5 4 4 5 7 10 3 2 1 benign 0
3 1015425 3 1 1 1 2 2 3 1 1 benign 0
4 1016277 6 8 8 1 3 4 3 7 1 benign 0
5 1017023 4 1 1 3 2 1 3 1 1 benign 0
6 1017122 8 10 10 8 7 10 9 7 1 malignant 1
> nrow(b) #レコード数
[1] 699
V1, family=binomial(link="logit"), data=b)
以下の、linear.predictors, fitted.values から、等式 4-4 を確認する。
> head(ans_v1$linear.predictors,4)
1 2 3 4
-0.4828711 -0.4828711 -2.3537897 0.4525882
> head(ans_v1$fitted.values,4)
1 2 3 4
0.38157438 0.38157438 0.08676502 0.61125443
> 1/(1+exp(-1*-0.4828711)) #1 番目の値
[1] 0.3815744
> 1/(1+exp(-1*0.4525882)) # 4番目の値
[1] 0.6112544
最後にこの分析結果をプロットする。病気の原因と考える変数値が大きいほど「悪性」と判断されがちで、小さいほど「悪性でない」と判断されがち、ということをこのS字カーブは確率と共に表している。
> dev.new() # V1用グラフ
> ggplot(b, aes(x=V1, y=classn)) +
geom_point(position=position_jitter(width=0.3, height=0.06), alpha=0.4, shape=21, size=1.5) +
stat_smooth(method=glm, family=binomial)
「ロジスティック回帰分析:分析例」に続く。







0 件のコメント:
コメントを投稿