【Python】ロジスティック回帰を使ってクラスの確率を予測するモデルの構築Part2
はじめに
この記事は株式会社インプレスの「Python機械学習プログラミング Pytorch&scilit-learn編」を読んで、私が学習したことをまとめています。リンク一覧はこちらから。今回は3章3節の「ロジスティック回帰を使ってクラスの確率を予測するモデルの構築」を読んで学んだことをまとめていきます。
※まとめている中で、思った以上にボリュームがあったので、細かく記事を分けています。今回は「3.3.2 ロジスティック損失関数を使ってモデルの重みを学習する」を読んで学んだことをまとめています。
Part1の「3.3.1 ロジスティック回帰と条件付き確率」をまとめた記事こちらからどうぞ。
また、用語などの定義については【Python】ADALINE(フルバッチ勾配降下法)と学習の収束にまとめていますので、こちらをご確認ください。
前回はロジスティック回帰アルゴリズムにおいて、活性化関数として与えられるシグモイド関数
今回はADALINEのときと同様に、モデルのパラメータを学習させるための損失関数
定義
ここで、各
ここで、
であり、また【Python】ロジスティック回帰を使ってクラスの確率を予測するモデルの構築Part1より
と表すことができます。このとき定義より
が成り立ちます。ゆえに
が成り立ちます。
[参考資料]
ここで、
を損失関数
損失関数の定義は以上になりますが、上の形のままだと扱いづらいので最後に式の変形を行います。尤度関数ではなく、なぜ対数を取った対数尤度関数を用いているのかといえば、やはり積の計算を和に変換してしまう対数の便利な性質が理由です。計算が圧倒的に楽になります。また、マイナスを付与する理由は、対数尤度関数は最大化することによってパラメータの最適化を行うため、他の損失関数と同様に最小化で最適化を行うために付与しています。
それでは式変形を以下に記します。
L_2 (\boldsymbol{w}, b) のグラフの描画
損失関数最後にロジスティック回帰の損失関数の値を具体的に示すグラフを描画していきます。
import matplotlib.pyplot as plt
import numpy as np
# シグモイド関数を定義
def sigmoid(z):
return 1.0 / (1.0 + np.exp(-z))
# y = 1 の損失値を計算する関数
def loss_1(z):
return - np.log(sigmoid(z))
# y = 0 の損失値を計算する関数
def loss_0(z):
return - np.log(1 - sigmoid(z))
# 0.1間隔で-10以上10未満のデータを生成
z = np.arange(-10, 10, 0.1)
sigma_z = sigmoid(z) # シグモイド関数をインスタンス化
c1 = [loss_1(x) for x in z] # y = 1の損失値を計算する関数をインスタンス化
c0 = [loss_0(x) for x in z] # y = 0の損失値を計算する関数をインスタンス化
# 結果をプロット
plt.plot(sigma_z, c1,
label = 'L(w, b) if y = 1')
plt.plot(sigma_z, c0,
label = 'L(w, b) if y = 0',
linestyle = '--')
plt.ylim(0.0, 5.1)
plt.xlim([0, 1])
plt.xlabel('$\sigma(z)$')
plt.ylabel('$L_2(w, b)$')
plt.legend(loc = 'best')
# グラフを保存
plt.savefig('3-4.png')
plt.show()
このグラフは次のように読むことができます。
-
クラス1であると正しく予測できた場合
の値が高い(=クラス1である確率が高い)ほど、損失関数の値も0に近づく。\sigma_3 (z) -
クラス0であると正しく予測できた場合
の値が低い(=クラス0である確率が高い)ほど、損失関数の値も0に近づく。\sigma_3 (z)
これまでの議論の流れを追えており、かつグラフの読み取りが難なくできる人ならば自明ですが、慣れていない人はそれぞれ個の情報をつなぎ合わせることは意外と難しいものです。参考に【Python】ロジスティック回帰を使ってクラスの確率を予測するモデルの構築Part1の際に描画したシグモイド関数も下図のとおり掲載しておきますので、損失関数との関係を整理するのに役立ててください。
参考文献
- Sebastian Raschka, Yuxi(Hayden)Liu, Vahid Mirjalili.Python機械学習プログラミング PyTorch&scilit-learn編.株式会社インプレス,2022
- Christopher M. Bishop.パターン認識と機械学習 上.丸善出版,2014
- Soledad Galli.データサイエンティストのための特徴量エンジニアリング.株式会社マイナビ,2023
- 寺田学, 辻真吾, 鈴木たかのり, 福島真太郎.Pythonによる新しいデータ分析の教科書 第2版.翔泳社,2023
- 三宅敏恒.線形代数学-初歩からジョルダン標準形へ-.培風館,209
- 稲垣宣生,山根芳知,吉田光雄.統計学入門.裳華房, 2009
- 宮腰忠.高校数学+α 基礎と論理の物語.共立出版, 2013
Discussion