1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

「ロジスティック回帰分析」について

Last updated at Posted at 2020-01-14

ロジスティック回帰分析の考え方

ロジスティック回帰分析とは

  • 二値分類に使われるアルゴリズム。(=ラベルが2種類の教師あり訓練データ)
  • 例1:ある人のデータから、病気が発症しているorしていないの判定
  • 例2:商品のデータ(大きさ、形、キズなど)から、その商品が合格or不合格の判定

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

  • $y$:コレが「0になるのか」「1になるのか」で、ラベルがどちらか予測したい
  • $\mathbf{x}=(x_1, x_2, \cdots, x_n)$:コレを使って、$y$が0なのか1なのかを予測したい
  • $P(Y=0|X=\mathbf{x})$:$\mathbf{x}$をもとに計算される、$y$が0になる確率。コレが0.5(50%)を超えるとき、「$y=0$」と予測する
  • $P(Y=1|X=\mathbf{x})$:$\mathbf{x}$をもとに計算される、$y$が1になる確率。コレが0.5(50%)を超えるとき、「$y=1$」と予測する
  • ※今回は、2パターンしかないので「$P(Y=0|X=\mathbf{x}) + P(Y=1|X=\mathbf{x}) = 1$」となる

今回は「yが0になる確率」または「yが1になる確率」を使ってyを予測したい。
しかし確率は必ず0~1 (0%~100%)であるのに対し、通常の重回帰分析は

f(\mathbf{x}) = w_0 + w_1x_1 + w_2x_2 + \cdots + w_nx_n = w_0 + \sum_{i=1}^{n} w_ix_i = \mathbf{w}\mathbf{\tilde{x}} \\
\mathbf{\tilde{x}} = (1, x_1, x_2, \cdots, x_n)

と表され、予測結果が0~1の範囲から飛び出る可能性があり、確率の予測に向いてない。
そのため、シグモイド関数を使って0~1に収まるように変換する。
※シグモイド関数:

\sigma(\xi)= \frac{1}{1+e^{-\xi}}

↓こんなの($\lim_{\xi \to \infty}$で1に、$\lim_{\xi \to -\infty}$で0に近づく)
シグモイド.png

コレの$\xi$に$f(\mathbf{x})$を放り込んで、「yが1になる確率」を

P(Y=1|X=\mathbf{x}) = \sigma(f(\mathbf{x})) = \sigma(\mathbf{w}\mathbf{\tilde{x}})

と表し、訓練データの正答率が一番高くなるような、パラメータ$\mathbf{w}=(w_0, w_1, w_2, \cdots, w_n)$を求める。

サンプル

winequality-red( http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality のwinequality-red.csv)に適用した例

  • 簡単に図を作るため、↓を行っている
    • quality(=目的変数)が3と8のものだけ考える
    • 説明変数は"volatile acidity"と"alcohol"の2つだけで考える
  • 点 = 実際のデータ(教師データ)
  • 新しいデータに対しては、境界線のどちらに居るかで予測する
  • 図を作ったコードはココ( https://github.com/kzy611/qiita/blob/master/LogisticRegression_winequality-red.ipynb )

fig1.png

パラメータ(係数)の求め方

今回、$P(Y=0|X=\mathbf{x})$は「$P(Y=1|X=\mathbf{x})$ではない確率」なので、

\begin{align}
P(Y=0|X=\mathbf{x}) &= 1-P(Y=1|X=\mathbf{x}) \\
&= 1-\sigma(\mathbf{w}\mathbf{\tilde{x}})
\end{align}

$y=0$の場合と$y=1$の場合を合体させると、↓のようになり

P(Y=y|X=\mathbf{x}) = \left\{
\begin{array}{ll}
\sigma(\mathbf{w}\mathbf{\tilde{x}}) & (y = 1) \\
1-\sigma(\mathbf{w}\mathbf{\tilde{x}}) & (y = 0)
\end{array}
\right.

1つの式で表そうとすると↓のようになる。($y=0, y=1$を入れてみると、不要なほうが0乗になって消える)

P(Y=y|X=\mathbf{x}) = \bigl(\sigma(\mathbf{w}\mathbf{\tilde{x}})\bigr)^y \bigl(1-\sigma(\mathbf{w}\mathbf{\tilde{x}})\bigr)^{1-y}

ここで、i番目のサンプルを$\mathbf{x_i}$とすると、n個の訓練データで全部正解する確率は

\prod_{i=1}^{n} P(Y=y|X=\mathbf{x_i}) =  \prod_{i=1}^{n} \bigl(\sigma(\mathbf{w}\mathbf{\tilde{x_i}})\bigr)^y \bigl(1-\sigma(\mathbf{w}\mathbf{\tilde{x_i}})\bigr)^{1-y}

コレ(=訓練データを全部正解する確率)が最大となるようなパラメータ$\mathbf{w}$を求める。(=最尤法

「関数が最小・最大となるパラメータ$\mathbf{w}$を求める」=「関数を微分したものが0になるパラメータ$\mathbf{w}$を求める」

が定石だが、掛け算・乗数がたくさんあると微分しづらい。

そのため、代わりに「対数をとってマイナスをかけたもの↓」を考え、コレを最小にするパラメータ$\mathbf{w}$を求める。

\begin{align}
E(\mathbf{w}) &= -\log \Bigl({ \prod_{i=1}^{n} \bigl(P(Y=y|X=\mathbf{x_i}) \bigr)} \Bigr) \\
&= -\log{\Bigl( \prod_{i=1}^{n} \bigl(\sigma(\mathbf{w}\mathbf{\tilde{x_i}})\bigr)^y \bigl(1-\sigma(\mathbf{w}\mathbf{\tilde{x_i}})\bigr)^{1-y}\Bigr)} \\
&= - \sum_{i=1}^{n} \Bigl(y \log{\sigma(\mathbf{w}\mathbf{\tilde{x_i}})} + (1-y) \log{\bigl(1-\sigma(\mathbf{w}\mathbf{\tilde{x_i}})\bigr)}\Bigr)
\end{align}

コレをwで微分したときの一階微分は↓のようになる、(途中計算は機械学習のエッセンスを参照して・・・)

\frac{\partial E(\mathbf{w})}{\partial \mathbf{w}} = \sum_{i=1}^{n} (\sigma(\mathbf{w}\mathbf{\tilde{x_i}})-y_i)\mathbf{\tilde{x_i}}

ココまでできれば、あとは一階微分が0になるパラメータ$\mathbf{w}$を求めれば完了。(機械学習のエッセンスでは、二階微分を使ってニュートン法によって求めてる)

パラメータ使って結果を予測する

↑で求めたパラメータ$\mathbf{w}$を使い、与えられた$\mathbf{x}$から$P(Y=0|X=x), P(Y=1|X=x)$を計算し、

  • $P(Y=0|X=x)$が大きい(=0.5(50%)を超える)⇒「y=0」と予測⇒ラベルがどちらか予測
  • $P(Y=1|X=x)$が大きい(=0.5(50%)を超える)⇒「y=1」と予測⇒ラベルがどちらか予測

参考リンク

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?