ロジスティック回帰は二値分類に使われる教師あり機械学習アルゴリズムの1つです。今回はロジスティック回帰の仕組みを数学的に解説していきたいと思います。
Contents
ロジスティック回帰とは
ロジスティック回帰は二値分類問題に使われる教師ありアルゴリズムの1つです。例を用いて解説していきます。
図のように入力から晴れかそれ以外かを判断しています。判断の根拠に使用しているのはデータです。
このようにYesかNoを与えられたデータから判断するのがロジスティック回帰です。

ではこのデータをどのように使用しているか数学的に見ていきましょう。
ロジスティック回帰の出力
ロジスティック回帰はYesかNoを判断すると言いましたが、出力がYesやNoと出るわけではありません。
図の例を見てください。
ロジスティック回帰の出力は0~1までの範囲です。実はロジスティック回帰の出力は確率を表しています。例えばロジスティック回帰の出力が0.1であれば10%の確率でYesであること意味します。
この性質からロジスティック回帰の出力が0.5以上ならYesと判断0.5未満ならNoと判断します。

では具体例にどうやって出力を計算しているか見てみましょう。ロジスティック回帰の計算式は以下のようになっています。
入力データの各値を\( x_1,x_2 \cdots , x_n \)、対応するそれぞれの重みを\( \theta_0 , \theta_1 ,\theta_2 ,\cdots ,\theta_n \)これらを使って\( z = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n \)とするとロジスティック回帰の出力\( p \)は以下のように計算されます。
この関数はシグモイド関数と呼ばれ以下の図のような形をしています。

ロジスティック回帰のコスト関数
ロジスティック回帰の最適化とはバイアスと入力データの各値にかける重み\( \theta_0,\theta_1 \cdots , \theta_n \)を最適化するということです
ではどのようにして重みを最適化するかについて説明します。まず最適化のためには現在の重みを評価する指標が必要です。それがコスト関数です。ロジスティック回帰のコスト関数は以下の式で表せます。
コスト関数の直感的理解
上記の式はクロスエントロピーと呼ばれる指標です。
クロスエントロピーは、真の分布 \( P \)と予測分布 \( Q \)の分布の違いを評価するための指標です
クロスエントロピーは、真の分布 \( P \)と予測分布 \( Q \)が近い程小さくなります

例を用いて説明します 画像が犬であるかどうかを判定する場合を考えます。1枚目は犬 二枚目が猫 三枚目がうさぎの写真であるとすると真の分布は \( P = \{1.0, 0, 0\} \)となります。ここで画像予測モデル AとBを用意したとします。Aの予想は \( Q_\text{A} = \{0.9, 0.2, 0.5\} \)Bの予想は \( Q_\text{B} = \{0.7, 0.4, 0.6\} \)とします。それぞれのエントロピーを\( H(P, Q_A) \)と\( H(P, Q_B) \)とすると以下のように計算できます
\( H(P, Q_A)=-1\{1\log(0.9) + 0 \log(0.1)\}+-1\{0 \log(0.2) + 1 \log(0.8)\}+-1\{0 \log(0.5) + 1 \log(0.5)\}=0.105 + 0.223 + 0.693 = 1.021 \) \( H(P, Q_B)=-1\{1 \log(0.7) + 0 \log(0.3)\}+-1\{0 \log(0.4) + 1 \log(0.6)\}+-1\{0 \log(0.6) + 1 \log(0.4)\}=0.357 + 0.511 + 0.916 = 1.784 \)
\( Q_\text{A} = \{0.9, 0.2, 0.5\} \)と\( Q_\text{B} = \{0.7, 0.4, 0.6\} \)では明らかに\( Q_\text{A} \)のほうが真の分布\( P \)に近いことがわかると思います
コスト関数の値についてもモデルAのほうがモデルBより値が小さくなっています。
このことからコスト関数が小さい程真の分布に近いモデルであるということが直感的にわかってもらえたと思います。実際にコスト関数が小さい程データに適合しているモデルであるため、コスト関数が小さくなるように重みを調整することでデータにモデルを適用させることができます。
ではこのコスト関数がどのように導出されたかを説明するために尤度について説明します。
尤度
多くの統計モデルではそのモデルの性能を評価する指標として尤度を使用します。
尤度とは
尤度とは観測データが特定のモデルのパラメータの下で生成される確率を表現したものです。与えられたデータを90%の確率で生成するモデルは与えられたデータを50%の確率で生成するモデルより優秀なことがわかると思います。
この可能性を求める関数を尤度関数といい下記の式で表されます。
\( L(\theta; X) = P(X \mid \theta) = \prod_{i=1}^{n} P(x_i \mid \theta) \)\( X \)は観測データの集合、\( \theta \)はパラメーターを表します
有名な例を挙げます。
表と裏の確率が平等ではないコインがあります。そのコインを10回投げると表が8回出た後に裏が2回出たとします。するとこの状況下での尤度関数は以下のように計算できます。
\( X= \){表、表、表、表、表、表、表、表、裏、裏}であり\( \theta \)は今回の場合表が出る確率とすると
裏が出る確率は\( 1-\theta \)より
\( L(\theta; X) = \theta^8 \cdot (1 – \theta)^2 \)と表せます
今この問題に対して2つのモデルを考えます。モデルAは表が出る確率\( \theta_\text{A}=0.5 \)と予想している。モデルBは表が出る確率\( \theta_\text{B}=0.9 \)と予想しているとする
すると与えられたデータは[表、表、表、表、表、表、表、表、裏、裏]という結果を生成する確率は尤度関数より
モデルA\( L(\theta;X) = 0.5^8 \cdot (1 – 0.5)^2=0.0009765625 \)
モデルB\( L(\theta;X) = 0.9^8 \cdot (1 – 0.9)^2=0.0043046721 \)
よって尤度関数からモデルBのほうが優れたモデルであることがわかります。直感的にも表が8回と偏っているため、Bのほうが正しい予想をしてそうだと納得していただけると思います。
このように与えられたデータをモデルが出力する確率を尤度といい、尤度が高いほどデータにモデルが適合していると言えることがわかると思います。
例の場合は離散であったが連続の場合も同様で確率密度関数\( P(x) \)にデータを代入した場合の積で求められます
対数尤度
尤度関数の対数を取ったものです。以下の式になります。
\( log L(\theta;X) = \sum_{i=1}^{n} \log P(x_i \mid \theta) \)対数をとっても大小関係に変化はなく対数にすることによって積ではなく和で表現できるようになります。単純に計算を便利にするために対数を取ったと考えてください。
コスト関数の導出
上記の内容から尤度を最大にすることがロジスティック回帰における最適化であるということがわかったと思います。ではロジスティック回帰の対数尤度関数を求めてみましょう。
上記の内容からロジスティック回帰が式\( p= \frac{1}{1 + e^{-\theta^\mathrm{T} x}} = \frac{1}{1 + e^{-(\theta_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n)}} \)で表されること
モデルの評価が対数尤度を使って\( log L(\theta;Y) = \sum_{i=1}^{n} \log P(y_i \mid \theta;x) \)で表されることがわかったと思います
ロジスティック回帰が1を出力する確率は定義から\( P(1\mid\theta;x) =\frac{1}{1 +e^{-\theta^\mathrm{T} x}} \)で表されます。よってロジスティック回帰は2値分類より0を出力する確率は\( P(0\mid\theta;x) =1-P(1\mid\theta;x)=1-\frac{1}{1 + e^{-\theta^\mathrm{T} x}} \)
\( h_{\boldsymbol{\theta}}= \frac{1}{1 + e^{-\theta^\mathrm{T} x}} \)で表すと対数尤度は\( log{P(1\mid\theta;x)}=log{(h_{\boldsymbol{\theta}})} \),\( logP(0\mid\theta;x)=log{(1-h_{\boldsymbol{\theta}})} \)となります
ここで簡単のために\( log{P(y\mid\theta; x)} \)を\( log{P(1\mid\theta; x)} \)と\( logP(0\mid\theta; x) \)を使って表すと\( log{P(y\mid\theta; x)}= ylog(P(1\mid\theta; x)) + (1 – y) logP(0\mid\theta; x) \)と表せます。
上記の式が成立する理由について軽く解説します。
\( y=1 \)を代入すると\( log{P(1\mid\theta; x)}= log(P(1\mid\theta; x)) + (1 – 1) \log(P(0\mid\theta; x)=log(P(1\mid\theta; x)) \)
\( y=0 \)を代入すると\( log{P(0\mid\theta; x)}= 0\times log(P(1\mid\theta; x)) + (1 – 0) \log(P(0\mid\theta; x)=log(P(0\mid\theta; x)) \)よって1つの式で表せていることがわかると思います
よって二値分類の場合には対数尤度関数は以下のように表せます
\( log L(\theta; Y) = \sum_{i=1}^{n} \log P(y_i \mid \theta;x_i)=\sum_{i=1}^{n} y^{(i)} \log(h_{\boldsymbol{\theta}}(\mathbf{x}^{(i)})) + (1 – y^{(i)}) \log(1 – h_{\boldsymbol{\theta}}(\mathbf{x}^{(i)})) \)
対数尤度について負の平均を取ると
\( – \frac{1}{n} \sum_{i=1}^{n} \left[ y^{(i)} \log(h_{\boldsymbol{\theta}}(\mathbf{x}^{(i)})) + (1 – y^{(i)}) \log(1 – h_{\boldsymbol{\theta}}(\mathbf{x}^{(i)})) \right] \)よってコスト関数を導出することができました。
ロジスティック回帰の最適化
コスト関数が小さい程にデータに適合した重みであることは理解していただけたと思います。つまり、コスト関数が小さくなるように重みを変更することが最適化に当たります。つまりコスト関数について勾配降下法を行うとこで重みを最適化できます。
ロジスティック回帰のコード
実際にコードを実行してみましょう!
下記のコードはロジスティック回帰を用いて乳がんかどうかを判定するプログラムです。
下記のコードを実行してロジスティック回帰が最適化されていく様子を見てみましょう
実行すると学習を行うたびにコスト関数の値が減少し、判定精度が向上してるのがわかると思います。皆さんもぜひ実際にコードを組んで理解を深めてください!
まとめ
今回は教師あり機械学習アルゴリズムの1つであるロジスティック回帰の仕組みと学習方法について数学的に解説しました。クロスエントロピー導出などは機械学習に広く関係する内容なのでぜひ自分でも手を動かして導出してみてください!