前回の記事「分類とロジスティック回帰入門」では、決定境界を計算して学習例中のものを分離するタスクであるロジスティック回帰アルゴリズムの数学的基礎の概要を説明しました。 線形回帰と同様に、ロジスティック回帰アルゴリズムでは、決定境界が実際にデータ点を正しく分離するために、最適な୧⃛(๑⃙⃘◡̈๑⃙⃘)୨⃛パラメータを求めることができます。 この記事では、そのような \thetas を計算する方法を見ていきます。
Suppose we have a generic training set
{ (x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \dots, (x^{(m)}, y^{(m)}). \(x^{(1)}, y^{(1)})を1例目、以下m個の学習例で構成される。 具体的には、x^{(m)}はm番目の例の入力変数、y^{(m)}はその出力変数である。 分類問題なので、各例はもちろん出力yが0と1の間に束縛されています。
各例は通常通り特徴ベクトル
で表現されます。
最後に前回のロジスティック回帰の仮説関数ですが、
h_theta(x) = \frac{1}{1 + e^{THETA^{THETA}} x}}
ここでの課題は、現在の学習セットが与えられたときに、誤差を最小にするために、上式の最適なパラメータ﹁thetas﹂を選択することです。 この手順は、線形回帰で行ったことと似ています。コスト関数を定義し、コスト関数出力を最小化することによって、各「 \theta 」の最良の可能値を見つけようとします。 この最小化は勾配降下アルゴリズムによって行われ、そのタスクはコスト関数の出力を解析して最小点を見つけることです。
線形回帰で使ったコスト関数はここでは使えません
線形回帰で使ったオリジナルのコスト関数 J(\theta) を覚えているかもしれません。 今言えることは、ここではロジスティック回帰ではうまくいかないということです。 もしあなたがロジスティック回帰の問題で、線形回帰のコスト関数を使ってJ( \theta) を生成しようとすると、下の図に見られるように、非凸関数:グローバル最小点を簡単に見つけることができない奇妙な形のグラフになってしまうのです。 非凸関数の一例。 右側の灰色の点は潜在的な局所最小値を示している。
この奇妙な結果は、ロジスティック回帰では周りにシグモイド関数があり、これは非線形(つまり直線ではない)であることに起因するものです。 図1のJ(heta)では、勾配降下アルゴリズムが局所最小点で止まってしまう可能性があるのです。 そのため、線形回帰のときと同じようにきちんとした凸関数が必要です。椀状の関数で、勾配降下関数が最適な最小点に収束するのを緩和します。
A better cost function for logistic regression
ここで少し線形回帰で使ったコスト関数に戻ってみます:
J(\vec{theta}) = \frac{1}{2m} \ʕ-̫͡-ʔʔ (h_theta(x^{(i)}) – y^{(i)})^2
which can rewrite in a slightly different way:
J(\vec{theta}) = \frac{1}{m}. \sum_{i=1}^{m} \frac{1}{2}(h_theta(x^{(i)}) – y^{(i)})^2
何も怖いことは起きなかったよ。 和の部分の隣にある “Σ(゚д゚lll) “を移動させただけです。 では、より一般的な関数
Thresholdmathrm{Cost}(h_theta(x^{(i)}),y^{(i)}) = \frac{1}{2}(h_theta(x^{(i)}) – y^{(i)})^2
つまり、入力として二つのパラメータを取る関数 “viewmathrm{Cost}”が定義されたわけですね。 h_theta(x^{(i)})を仮説関数、y^{(i)}を出力とする関数です。
この新しいパズルのピースで、線形回帰のコスト関数を次のように書き直すことができます。 \sum_{i=1}^m \mathrm{Cost}(h_theta(x^{(i)}),y^{(i)})
しかし、線形回帰のコスト関数はロジスティック回帰の問題では使えないことが分かっています。 では、これはどういうことでしょうか。 さて、ロジスティック回帰の場合は、和の部分はそのままで、別の \mathrm{Cost} 関数を求めればよいことがわかります。
ロジスティック回帰のコスト関数
ロジスティック回帰の場合、♪Cost♪関数は以下のように定義されます。 & \{if y = 1}. \\-\log(1-h_\theta(x)) & \{if y = 0}end{cases}
わかりやすくするためにiのインデックスは削除しました。 この関数を用いることで、上述したように勾配降下アルゴリズムが処理すべき関数に凸性を持たせることができます。 その数学的な証明もありますが、今回の入門講座の範囲外です。
y=1の場合、h_theta(x)が1に近づくと出力(つまり支払うべきコスト)は0に近づきます。 逆にh_Θtheta(x)が0に近づくと支払うべきコストが無限大になります。下の2.の左側のプロットでよくわかります。 これは望ましい性質で、アルゴリズムが実際の値からかけ離れたものを予測するほど、大きなペナルティが欲しくなります。 ラベルが y = 1 でもアルゴリズムが h_theta(x) = 0 と予測した場合、結果は完全に間違っていることになります。 ラベルがy = 0なのにアルゴリズムがh_Θ(x) = 1と予測したときのペナルティが大きい。
Addal cost function optimizations
What we have just seen is the verbose version of the cost function for logistic regression.Now to do it is a long time, but the algorithm is a long time. これは、数式をアルゴリズムに変換する際に、退屈な if/else ステートメントを避けるのに役立ちます。
Mathrm{Cost}(h_theta(x),y) = -y \log(h_theta(x)) – (1 – y) \log(1-h_theta(x))
証明:yを0と1に置換してみると、元の関数の2個で終了します。
最適化を行うと、ロジスティック回帰のコスト関数は次のように書き換えられます:
◇begin{align}J(\theta) & = ◇dfrac{1}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) \drac{1}{m} = – \drac{1}{m}. \end{align}
マイナス記号を外に出して、括弧を増やさないようにしました。
コスト関数と勾配降下を繋げる
あとはどうでしょう。 仮説関数とコスト関数ができたので、ほぼ完了です。 あとは、コスト関数のパラメータである “the \thetas “の最適値を探す、つまり、勾配降下アルゴリズムを実行してコスト関数を最小化することになります。 手順は線形回帰の時と同じです。
より正式には、コスト関数:
◇min_{theta} J(\theta)
を最小化したいのですが、これによって最適(つまり誤差の少ない)なパラメータ群(theta)を出力することができます。 これができたら、新しい入力例とその特徴xに対して、仮説関数に新しい \theta を使って予測をする準備が整います:
h_theta(x) = \frac{1}{1 + e^{theta^{THEATH}} x}}
ここで h_theta(x) は出力、予測、あるいは y = 1 となる確率です。
これからコスト関数を最小化する方法は、勾配降下を使用します。
コスト関数を最小化するために、各パラメーターで勾配降下関数を実行する必要があります:
begin{align} \ʕ-̫͡-ʔʔ \theta_j & := \theta_j – \alpha \frac{partial}{partial \theta_j} J(\theta) \text{}}end{align}
Remember to update all \theta_j as did in linear regression counterpart: if you have n features, that is a feature vector \vec{theta} = , all those parameters have been simultaneously updated on each iteration:
㉒begin{align} \⑭収束するまで繰り返す⑯⑯⑯。 \theta_0 & := \cdots \theta_1 & := \cdots \theta_n & := ■■■■■■■■■■■■■■■■■■ ̄■ ̄࡞ټ J(\theta), which becomes:
◇frac{partial}{partial \theta_j} ◇frac{partial}{partial}, J(\theta_j}) J(\theta) = \dfrac{1}{m}. \sum_{i=1}^{m} (h_theta(x^{(i)}) – y^{(i)}) x_j^{(i)}
従って、上記のループは次のように書き換えられる:
begin{align}。 \Ίταμμα για για για για \theta_j := \theta_j – \alpha \dfrac{1}{m}. \sum_{i=1}^{m} (h_theta(x^{(i)}) – y^{(i)}) x_j^{(i)}. \text{}end{align}
意外にも、多変量線形回帰でやっていたことと同じに見えますね。 ただ、変わったのは仮説h_theta(x)の定義で、線形回帰の場合はh_theta(x) = \theta^{TOP}{x} でしたが、ロジスティック回帰では h_theta(x) = \frac{1}{1 + e^{theta^{CAPTOP}} となってますね。 x}}.
今後は、線形回帰で見た勾配降下アルゴリズムを最適化するために、最小点への変換が正しく動作するように、同じテクニックを適用できます。 次の章では、いくつかの高度な最適化のトリックを掘り下げるとともに、オーバーフィッティングの問題の定義と回避について説明します。