MLエンジニアへの道 #2 - ロジスティック回帰の前提知識

Last Edited: 7/19/2024

この記事はロジスティック回帰の前提知識を紹介します。

ML

機械学習には2つの主要なタスクがあります:回帰と分類です。前回の記事では、線形回帰を使用して線形相関のあるデータに対する回帰タスク に取り組む方法を学んだので、次にロジスティック回帰を使用してバイナリ分類を実行する方法について説明します。ただし、 ロジスティック回帰には確率と統計の理解が必要です。そのため、この記事では前提知識を学ぶことでロジスティック回帰をより理解しやすくしたいと思います。

ロジット関数

確率については皆さんご存じでしょう。たとえば、じゃんけんを5回して3回勝った場合、勝率は60%と言えます。しかし、勝つためのオッズはどうでしょうか? 勝つためのオッズを計算するには、勝った回数を負けた回数で割ります。

odds=32=1.5 odds = \frac{3}{2} = 1.5

確率からオッズも計算できます。これは、分母(試合の総数)が勝ちと負けの両方で同じだからです。

odds=3/52/5=32=1.5 odds = \frac{3 / 5}{2/ 5} \\ = \frac{3}{2} = 1.5

したがって、次のようにオッズを確立できます: odds=p1podds = \frac{p}{1-p}。では、500回のゲームをプレイして499回勝ったとしましょう。 勝つためのオッズは499、負けるオッズは1/499で約0.002です。この例から、オッズは全く対称的ではないことがわかります。 これを対称的にするために、ログ関数を使用します。

log(oddswinning)=log(499)=2.7log(oddslosing)=log(0.002)=2.7 log(odds_{winning}) = log(499) = 2.7 \\ log(odds_{losing}) = log(0.002) = -2.7

これを確率 pp に変換すると、次のようになります:

log(odds)=log(p1p) log(odds) = log(\frac{p}{1-p})

これをロジット関数と呼び、さまざまな領域で使用します。

ロジスティック関数

上で確率からロジットへの変換方法を学んだところで、ロジットから確率への変換方法も見てみましょう。

x=log(p1p) x = log(\frac{p}{1-p})

上記のようにロジットを xx として設定し、pp を孤立させてロジット関数の逆関数を求めることができます。計算を続けましょう。

ex=p1pp=(1p)exp=expex(1+ex)p=exp=ex1+ex e^x = \frac{p}{1-p} \\ p = (1-p)e^x \\ p = e^x - pe^x \\ (1+e^x)p = e^x \\ p = \frac{e^x}{1+e^x}

分母と分子の両方に exe^{-x} を掛けると、

p=1ex+1 p = \frac{1}{e^{-x}+1}

これは、ロジットを確率に変換できる標準ロジスティック関数(またはシグモイド関数)と呼ばれます。これは、ロジットを-\infty から \infty の範囲で取得し、0から1の範囲の確率を導出できます。

一般的なロジスティック関数には他のパラメータもあります:

f(x)=L1+ek(xx0) f(x) = \frac{L}{1+e^{-k(x-x_0)}}

ここで、LL は関数の上限、kk は曲線の急峻度、x0x_0は関数の中点です。このロジスティック関数を、0および1で表されるバイナリ結果変数をプロットして得られるデータ にパラメータ kk および x0x_0を変更することでフィットさせることを想像できるでしょう。

尤度

英語では、確率(probability)と尤度(likelihood)は互換的に使用されますが、数学の世界では異なる意味を持ちます。 確率は分布またはモデルがあるときの観測値の可能性に関するもので(P(観測 | モデル))、尤度は観測値があるとき分 布またはモデルがどれほど観測値に適しているかを示します(L(モデル | 観測))。

最尤推定

尤度は、モデルがデータにどれだけ適合するかの尺度として使用できます。尤度が高いほど、そのモデルがデータを生成した正しいものである可能性が高くなります。 尤度が最高に達するモデルのパラメータを見つけるプロセスは最尤推定(MLE)と呼ばれ、これには複数の方法があります。

たとえば、モデルのパラメータに関する尤度関数を取得、尤度関数の偏微分を計算、それを0に設定し、方程式のを解くことで、尤度が最大になるパラメータを導出できます。 また、負の尤度関数をコスト関数として設定することで、勾配降下法を使用することもできます。

KLダイバージェンス

2つの分布やモデルがどれだけ異なるかを定量化したい場合、次のようにモデルに応じて観測値の確率を比較できます。

P(ObservationsModelp)P(ObservationsModelq)=p1np2(tn)q1nq2(tn) \frac{P(Observations | Model_p)}{P(Observations | Model_q)} = \frac{p_1^np_2^{(t-n)}}{q_1^nq_2^{(t-n)}}

上記の方程式は、実際のモデル pp と予測モデル qq の両方がバイナリな結果の確率分布を持ち(p1,p2,q1,q2p_1, p_2, q_1, q_2)、tt 回の観測が行われ、 そのうちの1の結果を nn 回観測したと仮定します。上記の方程式の解を1と比較することで、2つの分布がどれだけ異なるかを把握することができます。

しかし上の指標は、1からの距離が値が1より小さいか大きいかに応じて異ってしまうという対称性の問題があります。この問題を解決するために、ログ関数を使用できます。 (ログ関数を適用する実際の理由は情報理論に関連しており、この記事の範囲を超えています。)

log(p1np2(tn)q1nq2(tn)) log(\frac{p_1^np_2^{(t-n)}}{q_1^nq_2^{(t-n)}})

観測の総数 tt で割ることもできます。これは単調関数であるためです。(これも情報理論に関連しています。)

1tlog(p1np2(tn)q1nq2(tn)) \frac{1}{t}log(\frac{p_1^np_2^{(t-n)}}{q_1^nq_2^{(t-n)}})

この方程式をさらに整理すると、次のようになります:

ntlog(p1)+tntlog(p2)ntlog(q1)tntlog(q2)=p1log(p1)+p2log(p2)p1log(q1)p2log(q2)=i=12pilog(pi)i=12pilog(qi) \frac{n}{t}log(p_1) + \frac{t-n}{t}log(p_2) - \frac{n}{t}log(q_1) - \frac{t-n}{t}log(q_2) \\ = p_1log(p_1) + p_2log(p_2) - p_1log(q_1) - p_2log(q_2) \\ = \sum_{i=1}^{2}p_ilog(p_i) - \sum_{i=1}^{2}p_ilog(q_i)

これで、モデルごとの観測値の確率の比を導出することで、バイナリな結果におけるKLダイバージェンスの公式に到達しました。 KLダイバージェンスの一般的な公式は次のとおりです:

DKL(PQ)=iP(i)log(P(i))iP(i)log(Q(i)) D_{KL}(P || Q) = \sum_iP(i)log(P(i)) - \sum_iP(i)log(Q(i))

KLダイバージェンスが大きくなるほど、モデル PPQQ の違いが大きいということを指します。

クロスエントロピー

上記のKLダイバージェンス公式を使用して、予測モデル QQ と実際のモデル PP がどれだけ異なるかを比較できます。モデル QQ KLダイバージェンスを最小化できるようパラメータを調整することで、モデル QQ をモデル PP に近似するようにすることができます。

しかし、KLダイバージェンス公式を詳しく見ると、方程式の最初の部分はモデル QQ のパラメータに依存しないことがわかります。(最初の部分は PP のエントロピーに対応しますが、これはこの記事の範囲を超えています。)したがって、モデルのパラメータを変更してKLダイバージェンス を最適化したい場合、後者の部分のみを求めれば良いことになります。KLダイバージェンスの後者の部分は、PPQQ の間のクロスエントロピーに対応します。

H(P,Q)=iP(i)log(Q(i)) H(P, Q) = - \sum_iP(i)log(Q(i))

クロスエントロピーを最小化することで、KLダイバージェンスを最小化し、観測値 を生成するために使用されたモデル PPQQ を近似することができます。

リソース