Probabilistic Programming: Logistic Regression

Ref: Baysian Analysis with Python by Osvaldo Martin
—————————————————-
ロジスティック回帰

ある現象の発生確率p(X)を調べる。その発生原因となりうる要素(因子、独立変数、説明変数)をX=(x1, x2, x3,….,xn)とする。
Xが発生したときの事後確率でp(X)を表現すると、

p(X) = Probability(発生|X)

となり、Fでp(X)をモデル化すると、ロジスティック関数を用いて、

f = 1 / (1 + exp(-r))

Z = α + β1*x1 + β2*x2+……+βn*xn と線形結合で表現すると、

logistic(Z) = 1 / (1 + exp(-Z))

Z = 0 ならば、logistic(Z)=logistic(0) = 1 / (1 + exp(-0)) = 1/2 = 0.5
Z = ∞ならば、logistic(Z)=logistic(∞) = 1 / (1 + exp(-∞)) ≒ 1/1 = 1
Z =-∞ならば、logistic(Z)=logistic(-∞) = 1 / (1 + exp(∞)) ≒ 1/∞ ≒ 0

ロジスティック関数の特徴は、その引数の値Zに関わらず、0〜1の値を返す。

発生する確率 p(X) = 1 / (1 + exp(-Z))

発生しない確率 1- p(X) = 1 – 1 / (1 + exp(-Z)) = (((1 + exp(-Z)) – 1 ) / (1 + exp(-Z))
= exp(-Z) / (1 + exp(-Z))

最後は、起こるか、起こらないかという、ベルヌーイ分布[0,1]に当てはめる。
要するに、線形回帰の結果を[0,1]の範囲内に収めるために、ロジスティック関数を逆連結関数として用いているということ。

発生する確率と発生しない確率の比は、オッズ

p(X)/(1 – p(X)) = [1 / (1 + exp(-Z))] / [exp(-Z) / (1 + exp(-Z))]

= [1 / (1 + exp(-Z))] * [(1 + exp(-Z))/exp(-Z)]

= 1 / exp(-Z)

= exp(Z)

= exp(α + β1*x1 + β2*x2+……+βn*xn)

オッズのログをとると、

log{p(X)/(1- p(X))} = α + β1*x1 + β2*x2+……+βn*xn と、重回帰分析と同じ形になる。

回帰式が直線単回帰の場合、 Z=α+βx となり

logistic (Z) = logistic(α+βx) = θ ー> y〜Bernoulli(θ)

Bayesを用いたロジスティック回帰モデルとしては、
回帰係数αの事前分布はNormal(μα,σα)、βの事前分布は、Normal(0,σβ)

Iris data setで:

Irisデータは、3種類の種、それぞれ50個、全部で150列、一列5データで、全部で750データとなる。

分類の問題として、菖蒲の種’setosa’と’versicolor’をそれぞれ0と1として、sepal_lengthを独立変数としてロジスティックモデルを構築。

αの事前分布を平均値0、標準偏差10、βの事前分布を平均値0、標準偏差10として
μ= α + β * X, θ = 1 / (1 + 1 / exp(μ)), ベルヌイ関数(θ)として事後分布を求めてみる。

θ=0.5のときのx1 = -α/βは、5.42。
では、事前分布を少しいじくって、
αの事前分布を平均値0、標準偏差5、βの事前分布を平均値0、標準偏差5として
μ= α + β * X, θ = 1 / (1 + 1 / exp(μ)), ベルヌイ関数(θ)として事後分布を求めてみる。

αもβも少し0に近づいた。
一方で、θ=0.5のときのx1 = -α/βは、5.42で変わらない。
推定されたロジスティック回帰モデルのシグモイド曲線、境界決定、その95%HPDは、α、βの標準偏差10のとき、

推定されたロジスティック回帰モデルのシグモイド曲線、境界決定、その95%HPDは、α、βの標準偏差5のときは、

では、ちょっと極端な例として、αの事前分布を平均値0、標準偏差1、βの事前分布を平均値0、標準偏差1として、ほとんどばらつきのない状態で推定されたロジスティック回帰モデルのシグモイド曲線、境界決定、その95%HPDを見てみる、

setosaの45個のデータを削って、アンバランスなクラス設定にしてみると、

以下のように、setosaが5つしか無いが、vesicolorは50個ある。

次に、同じ削るにしても、setosaとvesicolorを平等に22ずつ削ってみると、


どのクラスも、同等の数を置くようにすることがポイントということ。