Skip to content

Instantly share code, notes, and snippets.

@bilzard
Created April 30, 2019 17:57
Show Gist options
  • Save bilzard/5966036e6cd3b2590dd97225ed2ec4a3 to your computer and use it in GitHub Desktop.
Save bilzard/5966036e6cd3b2590dd97225ed2ec4a3 to your computer and use it in GitHub Desktop.

ロジスティック回帰による予測

ロジスティック関数

ロジスティック関数(またはシグモイド関数)は以下の式で表される:

$$y=\frac{1}{1+e^{-\text{x}}}$$

ロジスティック回帰モデル

ロジスティック関数に入力の線形結合を代入したものとして表される:

$$y=\frac{1}{1+e^{-(b_0+b_1X_1+b_2X_2+...)}} \\ =\frac{e^{b_0+b_1X_1+b_2X_2+...}}{1+e^{b_0+b_1X_1+b_2X_2+...}}$$

  • $y$ : モデルの出力
  • $X_1, X_2 ...$ : 入力変数
  • $b_0, b_1, ...$ : 学習によって調整するモデルのパラメータ.

ロジスティック回帰は確率を予測する

ロジスティック回帰はあるデータがデフォルトクラス(例: 最初のクラス)に分類される確率をモデル化する.

例えば、人の身長のデータをもとに男性か女性かの性別をモデル化する場合、最初のクラスを男性とすることができる。この場合のロジスティック回帰モデルは、ある人物の身長が与えられたとき、その人が男性である確率として次のように書ける:

$$P(性別=男性|身長)$$

入力$X$がデフォルトクラス$Y=1$に所属する確率として次のようにも表せる:

$$P(X)=P(Y=1|X)$$

$X$: 身長, $Y$: 性別 ($Y=0$: 女性, $Y=1$: 男性)

分類アルゴリズムとして利用するにはこの確率をバイナリ化(0 or 1)する必要がある.

ロジスティック回帰は線形法だが, 予測は以下のような非線形のロジスティック関数で表される. つまり、線形回帰のように入力の一次結合ではもはや表すことができない.

$$P(X)=\frac{e^{b_0 + b_1X}}{1 + e^{b_0 + b_1 X}}$$

これは以下のように書ける:

$$\ln\left(\frac{P(X)}{1-P(X)}\right)=b_0+b_1X$$

左辺に現れる比率 $P(X)/(1-P(X))$ はオッズと呼ばれる. オッズは、ある事象の確率をある事象が起こらない確率で割った比率で表される.例えば事象の確率が $0.8$ のとき、オッズは $0.8/(1-0.8)=4$ となる.

$$\ln(\text{オッズ})=b_0+b_1X$$

対数変換されたオッズは対数オッズまたはプロビット(Probit)と呼ばれる.

このことより、モデルは入力の線形結合と関係していることがわかる. ただし、入力の線形結合はデフォルトクラスの対数オッズに等しい.

ロジスティック回帰モデルの学習

トレーニングデータから 最尤推定(maximum likelihood estimation) を使って学習する.

実際の計算アルゴリズムは準ニュートン法などを用いている. 勾配降下法を用いて自分で実装することも可能.

ロジスティック回帰による予測

身長から性別を推定する例で、身長150cmの人物が男性か女性かをロジスティック回帰で推定してみる. トレーニングデータを使って学習した結果 $b_0=-100, b_1=0.6$ が得られたとする.

ロジスティック関数の値を計算すると、 $$y=\frac{\exp(-100+0.6150)}{1+\exp(-100+0.6150)} = 0.0000453978687$$

以下の条件式によってクラスを2値分類する:

  • $P(男性)<0.5の場合, Y=0$
  • $P(男性)\ge0.5の場合, Y=1$

この結果, この人物は「女性($Y=0$)」であると推定される.

ロジスティック回帰は二値判別問題に対して考え出された手法だが、後述の手法によって多クラス分類にも拡張して適用することができる.

参考資料

@bilzard
Copy link
Author

bilzard commented Apr 30, 2019

数式を読むには以下の chrome extension をインストールしてください:
https://chrome.google.com/webstore/detail/mathjax-plugin-for-github/ioemnmodlmafdkllaclgeombjnmnbima

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment