その他

E資格 学習内容まとめ・実装演習(ロジスティック回帰)

はじめに

今回の記事は、前回に引き続き、私が受講しているE資格 JDLA認定プログラムの「ラビットチャレンジ」のレポート記事です。

今回のテーマは機械学習のロジスティック回帰です。

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

ロジスティック回帰とは、さまざまな要因から、ある事象が発生する確率を予測することです。
重回帰分析の偏回帰係数と定数項を求めるという原理はロジスティック回帰と同様です。重回帰分析との違いは、目的変数の種類にあります。
重回帰分析では目的変数は連続値をとります。一方ロジスティック回帰では、目的変数が二値をとります。
ある or ない、0 or 1 などの2つの値しかとりません。

分類問題

ロジスティック回帰は回帰と名前がついていますが、回帰問題ではなく分類問題を扱うことにも注意が必要です。

分類で扱うデータ

入力(説明変数または特徴量)

回帰問題と同様に、\(m\)次元のベクトル(\(m=1\)の場合はスカラ)
$$
x=(x_{1},x_{2},…,x_{m})^T\in\mathbb{R}^m
$$

出力(目的変数)

上述の通り、0 or 1の二値をとります。
$$
y=\{0,1\}
$$

モデル

入力と\(m\)次元パラメータの線形結合をシグモイド関数に入力します。
出力は\(y=1\)になる確率の値です。
$$
P(Y=1\mid{x})=\sigma(w_{0}+w_{1}x_{1}+…+w_{m}x_{m})
$$
線形結合した値をシグモイド関数に与えることで\(y=1\)となる確率が出力されます。
出力された確率が0.5以上なら1、0.5未満なら0と予測します。

パラメータ

$$
w=(w_{1},w_{2},…,w_{m})^T\in\mathbb{R}^m
$$

線形結合

$$
\hat{y}=w^{T}x+w_{0}=\sum_{j=1}^{m}{w_{j}x_{j}+w_{0}}
$$

シグモイド関数

入力は実数で、出力は必ず0〜1の値をとる単調増加関数です。
単調増加関数とは、\(x\)が増えると\(y\)も増える関数のことです。
$$
\sigma(x)=\frac{1}{1+exp(-ax)}
$$
パラメータが変わるとシグモイド関数の形が変わります。
\(a\)を増加させると、\(x=0\)付近での曲線の勾配が増加します。
\(a\)を極めて大きくすると、単位ステップ関数に近づきます。
単位ステップ関数とは、\(x<0\)で\(f(x)=0\)、\(X>0\)で\(f(x)=1\)となるような関数のことです。
バイアス変化は段差の位置を示します。

最尤推定

最尤推定とは、最も尤もらしい推定のことです。
元のデータの\(x,y\)を生成するのに尤もらしいパラメータを探します。
正規分布やt分布など、多くの確率分布がありますが、ロジスティック回帰ではベルヌーイ分布を利用します。
データからそのデータを生成したであろう尤もらしい分布、パラメータを推定するのが最尤推定です。

尤度関数

データは固定し、パラメータを変化させます。
$$
\begin{align}
P(y_{1},y_{2},…,y_{n};p)&=\prod_{i=1}^{n}{p^{y_{i}}(1-p)^{1-y_{i}}} \\
&=\prod_{i=1}^{n}{\sigma(w^{T}x_{i})^{y_{i}}(1-\sigma(w^{T}x_{i}))^{1-y_{i}}} \\
&=L(w)
\end{align}
$$
ロジスティック回帰なので、確率\(p\)はシグモイド関数となるため、推定するパラメータは重みパラメータ(\(w\))となります。
尤度関数を最大化するようなパラメータを選ぶ推定方法を最尤推定と呼びます。

対数尤度関数

対数を取ると、微分の計算が簡単になります。
・同時確率の積が和に変換可能
・指数が積の演算に変換可能
対数尤度関数が最大となる点と尤度関数が最大になる点は同じです。
尤度関数にマイナスをかけたものを最小化し。最小二乗法の最小化と合わせます。
$$
\begin{align}
E(w_{0},w_{1},…,w_{m})&=-logL(w_{0},w_{1},…,w_{m}) \\
&=\sum_{i=1}^{n}\{y_{i}logp_{i}+(1-p_{i})log(1-p_{i})\}
\end{align}
$$

勾配降下法

反復学習でパラメータを逐次的に更新するアプローチの1つです。
\(η\)は学習率と呼ばれるハイパーパラメータで、モデルのパラメータの収束しやすさを調整します。

勾配降下法が必要な理由については以下の通りです。
・線形回帰モデル(最小二乗法) ⇨ MSEのパラメータに関する微分が0になる値を解析的に求めることが可能
・ロジスティック回帰モデル(最尤法) ⇨ 対数尤度関数をパラメータで微分して0になる値を求める必要があるのだが、解析的に求めるのが困難

パラメータが更新されなくなった場合、それは勾配が0になったということで、少なくとも反復学習で探索した範囲では最適な解が求められたことになります。
$$
w^{k+1}=w^{k}-\eta\sum_{i=1}^{n}{(y_{i}-p_{i})x_{i}}
$$

勾配降下法では、パラメータを更新するのにN個すべてのデータに対する和を求める必要があります。
しかし、\(n\)が巨大になった際にデータをオンメモリに載せる容量が足りないことや、計算時間が莫大になるなどの問題を抱えています。
それは次で説明する確率的勾配降下法を利用して解決します。

確率的勾配降下法(SGD)

データを1つずつランダムに(確率的に)選んでパラメータを更新します。
勾配降下法でパラメータを1回更新するのと同じ計算量でパラメータを\(n\)回更新できるので、効率よく最適な解を探索できます。
$$
w^{k+1}=w^{k}-\eta(y_{i}-p_{i})x_{i}
$$

モデルの性能評価

混同行列(confusion matrix)

混同行列とは、各検証データに対するモデルの予測結果を4つの観点(表)で分類し、それぞれに当てはまる予測結果の個数をまとめた表のことです。

分類の評価方法

正解率(Accuracy)

分類の評価には、正解率がよく使われます。
正解率は、( 正解した数 / 予測対象となった全データ数 ) です。
e.g. メールのスパム分類
スパム数が80件、普通のメールが20件だった場合は、すべてをスパムとする分類器の正解率は80%となります。

分類したいクラスにはそれぞれ偏りがあることが多く、この場合、単純な正解率はあまり意味をなさず、正解率の問題点と言えます。
$$
\frac{TP+TN}{TP+FN+FP+TN}
$$

再現率(Recall)

「本当にPositiveなもの」の中からPositiveと予測できる割合のことです。
NegativeなものをPositiveとしてしまう事象については考えていません。
再現率は、誤り(False Positive)が多少多くても抜け漏れは少ないような予測をしたい際に利用します。
e.g. 病気の検診
「陽性であるものを陰性と誤診(False Negative)」としてしまうのを避けたい。
⇨「陰性を陽性であると誤診(False Positive)」とするものが少し増えたとしても再検査すれば良いということです。
$$
\frac{TP}{TP+FN}
$$

適合率(Precision)

モデルが「Positiveと予測」したものの中で本当にPositiveである割合のことです。
本当にPositiveなものをNegativeとしてしまうことについては考えていません。
見逃し(False Negative)が多くてもより正確な予測をしたい際に利用します。
$$
\frac{TP}{TP+FP}
$$

F値(F-measure)

F値は次のように定義されます。
$$
\frac{2Recall\cdot{Precision}}{Recall+Precision}
$$
理想的には、再現率も適合率も高いモデルが良いモデルだが、両者はトレードオフの関係にあります。どちらかを小さくすると、もう片方の値が大きくなってしまいます。
そのため、調和平均を取ることで、バランスを示すことができ、高ければ高いほど良くなる。

実装演習

実装演習については、以前別の記事でTitanicのロジスティック回帰には触れていたので、リンクを貼っておきます。

機械学習初学者がkaggleをはじめてみた②(データの確認)前回の記事の続きです。 https://shotslog.com/%e6%a9%9f%e6%a2%b0%e5%ad%a6%e7%b...

こちらの記事でデータの確認や可視化を行っています。

機械学習初学者がkaggleをはじめてみた③(前処理・ロジスティック回帰)前回の記事の続きです。 https://shotslog.com/%e6%a9%9f%e6%a2%b0%e5%ad%a6%e7%b...

また、上記の記事で特徴量エンジニアリングからロジスティック回帰までを行なっています。