こんにちは!ぼりたそです!
今回はロジスティック回帰についてわかりやすくまとめた記事を作成しました。二値分類(Yes or No)の回帰を行う時に使用する常套手段ですが、アルゴリズムについては少し難しいところもありますので、初学者の方でもなるべく理解できるようにまとめてみました。
この記事は以下のポイントでまとめています。
また、CSVファイルを学習データとして入力するだけでロジスティック回帰を実行するPythonコードも紹介しているので、ご興味ある方は以下の記事を参照ください。
それでは詳細に説明していきます。
ロジスティック回帰とは?
では、まずはロジスティック回帰とは何なのか?ということについて説明していきます。
ロジスティック回帰とは二値分類問題(「Yes」 or 「No」などの二択問題)を解く場合に使用するモデルになります。
従って、ロジスティック回帰を使えば、メールがスパムかどうか、顧客が製品を購入するかどうかなどを確率も込みで予測することができるのです。
ロジスティック回帰は通常の線形回帰モデルと同じように以下の独立の線型結合の式で表すことができます。
$\beta$ は回帰係数になります。
$$y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_n x_n \\$$
しかし、このままの式で扱うのは非常に勝手が悪いです。なぜなら、下の図のように線形回帰モデルのままだと入力するXに対して出力Yが0 or 1になってしまい、予測精度が非常に悪いからです。
そのため、線形モデルの式をロジスティック関数(シグモイド関数)へ変換します。ロジスティック関数は以下の式で表すことができ、min : 0, max : 1の連続値を取ることができるため、ある事象が起こる確率として扱うことができます。
$$p(x) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_n x_n)}}$$
後はロジスティック関数に基づいて回帰係数を推定すれば予測モデルを構築することができます。
編回帰係数の推定
それでは次に編回帰係数の推定について説明していきます。
通常の回帰モデルでは最小二乗法を使用して編回帰係数を推定しますが、ロジスティック回帰は確率関数で表されるので最尤推定を使用して回帰係数を推定していきます。
最尤推定については以下の記事にまとめてありますので、ご参考にしていただければ思います。
最尤推定を実行するにはまず、尤度関数を設定する必要があります。
まず、ロジスティック回帰における尤度関数の形は、データがベルヌーイ分布に従うという前提に基づいています。
ベルヌーイ分布とは一回の試行で二つの事象の内どちらかが確率 $p$ で起こる時に以下の関数で表すことができます。
$$P(y_i) = p_i^{y_i} (1 – p_i)^{1 – y_i} \\$$
- $y_i$ は試行の結果(0または1)
- $p_i$ は $y_i$ の成功確率(ロジスティック関数:$p(y) = \frac{1}{1 + e^{-y_i}}$)
- $y_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \ldots + \beta_n x_{in} \\$
ロジスティック回帰では全ての観測データが独立だと仮定すると、全データに対する尤度関数は以下のとおり各データの確率の掛け算となります。なお、 $y_i$ は $\beta$ に依存するため $\beta$ の関数として表しています。
$$L(\beta) = \prod_{i=1}^{N} p_i^{y_i} (1 – p_i)^{1 – y_i} \\$$
この尤度関数のままでは計算がしづらいので対数をとりー(マイナス)をかけて、以下のような対数尤度関数として扱うこととします。マイナスをかけているのは対数尤度関数が最小になるようなパラメータ $\beta$ を求めるためです。
$$log L(\beta) = −\sum_{i=1}^{N} \left[ y_i \log(p_i) + (1 – y_i) \log(1 – p_i) \right] \\$$
この対数尤度関数が最小になるような $\beta$ を求めていきます。最小となる点は偏微分関数=0となる場合です。実際に全ての $\beta$ について偏微分を行うと以下のような簡単な関数になります。
$$\frac{\partial J(\beta)}{\partial \beta_j} = \frac{1}{N} \sum_{i=1}^{N} (p_i – y_i) x_{ij} \\$$
しかし、実はこの偏微分した関数は非線形のため、解析的に0となる $\beta$ を計算することが困難です。
そのため、勾配降下法という手法を用います。
勾配降下法は、関数の最小値を見つけるための反復的な手法です。具体的には、関数の勾配(傾き)を利用して、関数の値が減少する方向にパラメータを更新していきます。
わかりやすい例えでいうと、山の頂上から谷底へと降りていくプロセスを想像してください。山の傾きを調べて、最も急な降り方向に進む、これを何度も繰り返すことで、最終的に谷底(関数の最小値)に到達することを目指します。
具体的な最適化手法としては以下の通りです。
- パラメータ( $\beta$ )の初期値をランダムに設定します。
- 目的関数のパラメータに対する勾配を計算します。勾配は、関数の各パラメータ $\beta$ に対する偏微分 $\frac{\partial J(\beta)}{\partial \beta_j}\\$ で表されます。
- 勾配の逆方向にパラメータを更新します。更新式は次のようになります:
$$\beta_j := \beta_j – \alpha \frac{1}{N} \sum_{i=1}^{N} (p_i – y_i) x_{ij}\\$$
・$\alpha$ は学習率
・$\frac{\partial J(\beta)}{\partial \beta_j}$ は対数尤度関数の偏微分した式であり、勾配にあたる
- 目的関数の変化が非常に小さくなるか、あらかじめ設定した最大反復回数に達するまで、2と3のステップを繰り返します。
学習率 $\alpha$ は勾配に対してどれだけ進むかを表しており、大きすぎると最小値を過ぎてしまい解が収束せず、小さすぎると最小化まで膨大な時間がかかってしまいます。
長くなりましたが、この勾配降下法を使用して最小となる編回帰係数 $\beta$ が最も尤もらしい値として推定できます。
編回帰係数の解釈について
では次に編回帰係数の解釈について説明していきます。
編回帰係数は目的変数が1となる確率にどれだけ影響するかを表しています。
その影響度はオッズ比として定義されており、
$$\text{オッズ比} = e^{\beta_j} \\$$
と表すことができ、自然対数関数の $\beta$ 乗となります。
例えば、編回帰係数が1の時、オッズ比は以下のようになります。
$$\text{オッズ比} = e^{1} = 2.7\\$$
この場合、 説明変数Xが1単位増加した時に目的変数Yが1となる確率が2.7倍になることを意味しています。
このように編回帰係数からオッズ比を算出し、目的変数Yの確率にどれだけ影響を与えるかを見積もることができます。
ロジスティック回帰の注意点
ここまでロジスティック回帰の基本的な原理について説明してきましたが、最後にロジスティック回帰を扱う上で注意しなければいけない点について説明して聞きます。
注意点は以下に示す通りです。
- データのスケーリング:
ロジスティック回帰では、入力データのスケーリングが重要です。特に勾配降下法を用いる場合、データの範囲を統一することで収束が速くなり、モデルの性能が向上します。スケーリングの主な手法としては標準化(平均を0、標準偏差を1にする)や正規化(最小を0、最大を1にする)を行います。
- 線形性の仮定:
ロジスティック回帰は、説明変数と対数オッズの間に線形関係があると仮定しています。非線形な関係がある場合は、変数変換や相互作用項の追加を行う方が良いです。
- 多重共線性の回避:
説明変数間の強い相関(多重共線性)は、回帰係数の不安定性を引き起こし、解釈が難しくなります。共線性が疑われる場合は、VIF(Variance Inflation Factor)を計算して、共線性が高い変数を削除または統合しましょう。
- 過学習:
モデルの過学習を防ぐために、データを訓練セットとテストセットに分けて評価を行います。交差検証(クロスバリデーション)が一般的に有効な手法です。
クロスバリデーションについては以下の記事にまとめてあるので参考にしていただければと思います。
ロジスティック回帰は非常に有用な手法ですが、注意点もしっかりと把握した上で使用したいですね。
終わりに
以上がロジスティック回帰についての説明になります。通常の線形回帰と似たような手法と思ったのですが、編回帰係数の推定などは結構複雑で難しいですよね。しかし、二値分類問題は日常の業務でも立ちはだかると思いますので、ぜひうまく利用していたければと思います。