*

【機械学習】Stanford University Machine Learning / Week3【学習メモ】

公開日: : 最終更新日:2014/04/08 Coursera, 機械学習 , , , , ,

0.何の学習メモ?

・スタンフォード大学がCourseraをプラットフォームにして提供している機械学習のコース(詳しくはここ)の学習メモ
・学習メモだけあって雑然としてます

VI.ロジスティック回帰

分類(Classification)

・例:
-Email:スパムor非スパム
-オンライントランザクション:不正(fraudulent)か否か
-腫瘍(Tumor):悪性(Malignant)or良性(Benign)

y \in \{0,1\}
0:”Negative Class”(例:良性腫瘍)・・・どちらかと言うと不在(absence)なもの
1:”Positive Class”(例:悪性腫瘍)・・・どちらかと言うと存在(presence)なもの

・今までの線形回帰を分類問題に適用しようとすると以下の様な問題がある
-閾値(Threshold)を決めて分類しようとしても(例:h_\theta (x) \geq 0.5の場合、y=1)、データの質によっては全然意味が無い(例:腫瘍サイズが極端に大きいケースが追加され、h_\theta (x)の式が変わり、今までの閾値を使うと、悪性が良性に分類されてしまう)。
-分類は0or1の問題だが、h_\theta (x)は>1や0未満にもなってしまう

・そこでロジスティック回帰(Logistic Regression)を使う
0\leq h_\theta (x) \leq 1になるよう調整する
・ロジスティック(兵站、記号論理学)、と名前はついてあるが、分類で使われる

Hypothesisの表現(Representation)

ロジスティック回帰モデル
0 \leq h_\theta (x) \leq 1となってほしいので、
\displaystyle h_\theta (x) = \frac{1}{1+\mathrm{e} ^{-\theta ^T x}}
のように表記する。
・図示すると以下の通り(Wikipediaより)

・これはシグモイド関数(Sigmoid funciton)やロジスティック関数(Logistic function)と呼ばれている

・上記のHypothesisの解釈(Interpretation)は以下のようになる
h_\theta (x)=入力xの時にy=1である推定確率
例:
x=\left[\begin{array}{c} x_0 \\ x_1 \end{array} \right] = \left[\begin{array}{c} 1 \\ tumorSize \end{array} \right]
h_\theta (x)=0.7
であった場合、これは「患者の腫瘍は70%の確率で悪性である可能性がある」といえる
・別に言い換えると、h_\theta (x)=P(y=1|x;\theta)であると言える。
xが与えられ、\thetaでパラメータ化され、た時にy=1である確率

決定境界(Decision Boundary)

・hypothesisに上記シグモイド関数を適用すると以下のようになる。
h_\theta (x) = g(\theta ^T x)
g(z) = \frac{1}{1+\mathrm{e}^{-z}}
→上記のグラフを見ると分かるが、g(z)\geq 0.5を境にzのプラスマイナスが別れていることが分かる。
→よって、h_\theta (x)=g(z)\geq 0.5なら、つまり\theta ^T x \geq 0となる場合に、y=1となるようにする。

例:x_1,x_2の2つの変数でプロットされているデータに対して、以下のhypothesisが適用されるとする。
h_\theta (x)=g(\theta _0 + \theta _1 x_1 + \theta _2 x_2)
そして計算の末(計算方法は後述)、\theta _0 =-3, \theta _1 = 1, \theta _2 =1であると推測された場合、y=1となるのは-3+x_1+x_2\geq 0を満たす場合になる。
つまり、x_1+x_2=3となる式をプロットした場合、y=1の領域とy=0の領域に分かれることになり、この式が決定境界(Decision boundary)と呼ばれる。

・決定境界は非線形な式でも表せられる。

例:x_1,x_2の2つの変数でプロットされているデータに対して、以下のhypothesisが適用されるとする。
h_\theta (x)=g(\theta _0 + \theta _1 x_1 + \theta _2 x_2 + \theta _3 x_1^2 + \theta _4 x_2^2)
そして計算の末(計算方法は後述)、\theta _0 =-1, \theta _1 = 0, \theta _2 =0, \theta _3 =1, \theta _4 =1であると推測された場合、x_1^2+x_2^2=1が決定境界となり、円の内側と外側でy=1の領域とy=0の領域に分かれることになる。

費用関数

\thetaを決定するためには、線形回帰の場合と同じように費用関数を最小化させる\thetaを求めるようにする。
・線形回帰の場合は、費用関数は以下の通りだった。
\displaystyle J(\theta )=\frac{1}{m} \sum_{i=1}^{m} \frac{1}{2} (h_\theta (x^{(i)})-y^{(i)})^2
・しかし、上記式にロジスティック回帰に使うh_\theta (x)=\frac{1}{1+\mathrm{e}^{-\theta ^T x}}を代入すると、費用関数は非凸型(non-convex)の関数になってしまい、勾配法等で\thetaを求める場合、局所解に陥ってしまう可能性がある。
・そこで一旦費用関数を抽象化して、
\displaystyle J(\theta )=\frac{1}{m} \sum_{i=1}^{m} {\rm Cost}(h_\theta (x),y)
という風に考えてみる。
・ロジスティック回帰では、上記{\rm Cost}関数を以下の通りに定義する。
{\rm Cost}(h_\theta (x),y)=\left \{ \begin{array}{ll} -\log (h_\theta (x)) & {\rm if} \ y=1 \\ -\log(1-h_\theta (x)) & {\rm if} \ y=0 \end{array} \right.
・まずはそれぞれの関数のイメージを掴んでみる。
y=1の時の-\log (h_\theta (x))で表される費用関数は以下の感じ(横軸がh_\theta (x))
ml_w3_minus_log_x
・これはどういうことかというと、y=1かつh_\theta (x)=1の場合、{\rm Cost}=0となるが、h_\theta (x) \rightarrow 0だと{\rm Cost}=\inftyとなる。
→つまり、h_\theta (x) = 0(P(y=1|x;\theta)=0)だと推測したが、y=1だった場合、とても大きなコストでペナルティーを課すのと同義

y=0の時の-\log(1-h_\theta (x))で表される費用関数は以下の感じ。要領はy=1の場合と同じ
ml_w3_minus_log_1-x

\logを使っているのは、y軸で漸近線になり、(1,0)を通る特性を利用したいため。0 \leq h_\theta (x) \leq 1だから出来る。

単純化された費用関数と勾配法

・上述したロジスティック回帰の費用関数では場合分けされてるし、プログラムに適用するときにも少し不便。なので、以下の様に記述することで1行に収めることが出来る。
\begin{array}{lll} \displaystyle  J(\theta)&=&\frac{1}{m}\sum_{i=1}^{m}{\rm Cost}(h_\theta (x^{(i)}),y^{(i)}) \\ &=&-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}\log h_\theta (x^{(i)})+(1-y^{(i)})\log (1-h_\theta (x^{(i)}))] \end{array}
・これは、yが取りうる値が1 {\rm or} 0なので成りうる式。

J(\theta )を最小化させる為に勾配法を適用した場合、繰り返しの式は以下の様になる。
\displaystyle Repeat \{ \\ \begin{array}{lll} \theta _j & := & \theta _j - \alpha \frac{\partial}{\partial \theta _j}J(\theta ) \\ &:=& \theta _j - \alpha \frac{1}{m} \sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})x_j^{(i)} \\ & & ({\rm simultaneously\ update\ all\ }\theta _j) \end{array} \\ \}
※上記の偏微分は実施にやってみるとわかる。→一番下で実施メモ(間違ってたら教えて下さい。。。)

・線形回帰の勾配法と同じであることがわかる。h_\theta (x)の中身は異なるが。

高度な最適化

・今まで最適化には勾配法を使ってきたが、これは学習レート\alphaを決めなきゃいけなかったりと何かと不便。
・なので、勾配法以外の最適化アルゴリズムとして、”Conjugate gradient”、”BFGS”、”L-BFGS”等を活用することが出来る。

メリット

・学習レート\alphaを手動で選ぶ必要が無い
・勾配法よりも速い場合が多い

デメリット

・更に複雑
→アルゴリズムの中で何が行われているのか把握するのが難しい

・Octaveで高度な最適化を使う方法の一つは以下のとおり

-関数部分

function[jVal, gradient] = costFunction(theta)
	jVal = J(theta); %注1
	gradient(1) = XXX; %注2
	gradient(2) = YYY;
	...
	gradient(n+1) = ZZZ; %注3

※注1:上述のロジスティック回帰の費用関数が入る
※注2:勾配法の\theta_0のアップデート式が入る
※注3:Octaveでは\theta_0をtheta(1)と表すので、n+1となっていることに注意

-呼び出し部分

options = optimset('GradObj','on', 'MaxIter','100'); %注4
initialTheta = zeros(AAA,1); %注5
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

※注4:アルゴリズムで使用するオプションを設定
※注5:nの値による

多クラス分類:一対全(Multiclass Classification: One-vs-all)

・今まで取り扱ってきた01での分類の他にも、2つ以上の分類がある例もある
例:Emailのフォルダリング(仕事、友達、家族、趣味)、etc

・そのような場合の分類の方法は、「ある1つのクラスとその他」という風に分ける決定境界をクラスの数だけ設定する。
例:クラスが3つ合った場合、
h_\theta ^{(i)} (x)=P(y=i|x;\theta) \ (i=1,2,3)
という風になる。

・つまり、一対全というのは、
y=iである確率を推測するために、各クラスiに対して、ロジスティック回帰分類h_\theta ^{(i)}(x)を訓練させる。
→新しい入力xが合った場合は、h_\theta ^{(i)}(x)を最大化させるクラスiを選択する。

VII.正則化(Regularization)

過学習(Overfitting)とは?

・あまりに多くの特性(features)があった場合、学習したhypothesisはトレーニングセットに対してよく合う(fit)かもしれない(J(\theta )=\frac{1}{2m} \sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})^2 \approx 0)が、新たに追加されたデータに対しては一般化(generalize)されていない(例:住宅価格を予測出来ない)。このことを過学習(Overfittin)、もしくは”High variance”という。
・逆に全く合っていない場合は、”Underfit”もしくは”High bias”という。
・過学習は線形回帰だけでなくロジスティック回帰でも発生する。

過学習に対処(addressing)するには?

・変数が少ない場合は実際にプロットしてみて歪な形をしていれば、過学習であると分かるが、変数が多い場合は分からない。
・対処の方法(Option)は以下の2種類ある。

1.特性(feature)の数を減らす

・どの特性を使うか、手動で選ぶ。
・モデル選択アルゴリズム(Model selection algorithm)を適用して、自動的に残す/残さない特性を選択する。(後の週で実施)
・ただ、特性を減らすということは情報量が減ることと同義。

2.正則化(Regularization)

・すべての特性は残しつつ、\theta _jの大きさ/値(magnitude/values)を減らす。
・多くの特性がある場合に効果的に作用する。それぞれの特性がyを推測するのに貢献する。

費用関数に正則化を適用する

・正則化の考え方とは?
→パラメータ\theta _0,\theta _1,\ldots ,\theta _nの値を小さくする。
→小さくすることによって、「より単純(Simpler)」なhypothesisになり、過学習の傾向が小さくなる(less prone)。
※なぜ小さくするという考え方が出てくるのかというと、過学習している場合上記の値が大きくなっていくから。

・正則化を適用した線形回帰の費用関数(Cost function)は以下の通り。
\displaystyle J(\theta )=\frac{1}{2m}\left[\sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})^2 + \lambda \sum_{j=1}^{n}\theta _j ^2 \right]
\lambda \sum_{j=1}^{n}\theta _j ^2が正則化の部分で、\lambdaは正則化パラメータ(regularization parameter)。
\theta _0に対しては正則化は適用していない点に注意
・正則化の役割は、\sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})^2でデータに合わせるようにしつつ、\lambda \sum_{j=1}^{n}\theta _j ^2を小さく抑えるようにして(大きくなるとペナルティーが発生するようにする(penalize))、J(\theta )を最小化させるのが目的。

・では\lambdaには何を入れるべきのか?もし\lambda =10^{10}のような大きな値だとどうなるのか?
→どの\thetaも値が小さくなってしまい、線形回帰の場合、h(\theta )=\theta _0に近似した直線になってしまい、データに対して”Underfit”してしまう。

正則化された線形回帰

・上述の通り、正則化された線形回帰は以下の通り。
J(\theta )=\frac{1}{2m}\left[\sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})^2 + \lambda \sum_{j=1}^{n}\theta _j ^2 \right]

・上記に対して、勾配法(Gradient descent)を適応すると以下の様な式になる。
\displaystyle Repeat \{ \\ \theta _0 := \theta _0 - \alpha \frac{1}{m} \sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})x_0 ^{(i)} \\ \theta _j := \theta _j (1-\alpha \frac{\lambda }{m})-\alpha \frac{1}{m} \sum_{i=1}^{m} (h_\theta (x^{(i)})-y^{(i)})x_j ^{(i)} \\ (j=1,2,3,\ldots ,n) \\ \}
\theta _0だけ独立しているのは、\theta _0に対して正則化は適用していない為
\theta _jに対するアップデート式は、\theta _j := \theta _j - \alpha \left[ \frac{1}{m} \sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})x_j ^{(i)} - \frac{\lambda }{m} \theta _j \right]の変形式
m > 0,\lambda > 0\alphaがそこそこ小さい場合、1-\alpha \frac{\lambda }{m} < 1となり、アップデートの度に\thetaは小さくなっていく。

・勾配法を使わずに、微分で求める場合、通常の式は以下の通りだった。
X=\left[\begin{array}{c} (x^{(1)})^T \\ \vdots \\ (x^{(m)})^T \end{array} \right] , y=\left[\begin{array}{c} (y^{(1)}) \\ \vdots \\ (y^{(m)}) \end{array} \right]
\theta = (X^T X)^{-1} X^T y
・上記対して正則化を適用すると(\lambda > 0の場合)、
\theta = \left( X^T X + \lambda \left[\begin{array}{ccccc} 0 & & & & \\ & 1 & & & \\ & & 1 & & \\ & & & \ddots & \\ & & & & 1 \end{array} \right] \right) ^{-1} X^T y
\left[\begin{array}{ccccc} 0 & & & & \\ & 1 & & & \\ & & 1 & & \\ & & & \ddots & \\ & & & & 1 \end{array} \right](n+1) \times (n+1)行列。
・上記式は常に可逆行列。

正則化されたロジスティック回帰

・ロジスティック回帰を正則化するには、上述したロジスティック回帰の費用関数に正則化の式を加えるのみなので、以下の通り。
\displaystyle J(\theta)=- \left[ \frac {1}{m} \sum_{i=1}^{m} y^{(i)} \log h_\theta (x^{(i)}) + (1-y)^{(i)} \log (1-h_\theta (x^{(i)})) \right] + \frac {\lambda }{2m} \sum_{j=1}^{n} \theta _j ^2

・勾配法は線形回帰と同様
Repeat \{ \\ \theta _0 := \theta _0 - \alpha \frac{1}{m} \sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})x_0 ^{(i)} \\ \theta _j := \theta _j (1-\alpha \frac{\lambda }{m})-\alpha \frac{1}{m} \sum_{i=1}^{m} (h_\theta (x^{(i)})-y^{(i)})x_j ^{(i)} \\ (j=1,2,3,\ldots ,n) \\ \}
・式は全く同じだが、h_\theta (x) = \frac{1}{1+\mathrm{e}^{-\theta ^T x}}であることに注意

高度な最適化

・上述したfminunc関数に正則化を適用する場合は、以下の通り。

function[jVal, gradient] = costFunction(theta)
	jVal = J(theta); %注1
	gradient(1) = XXX; %注2
	gradient(2) = YYY; %注3
	...
	gradient(n+1) = ZZZ; %注4

※注1:上述の正則化されたロジスティック回帰の費用関数が入る
※注2:勾配法の\theta_0のアップデート式が入る(正則化式が入ってない)
※注3:勾配法の\theta_1のアップデート式が入る(正則化式が入っている)
※注4:Octaveでは\theta_0をtheta(1)と表すので、n+1となっていることに注意



メモ

\displaystyle -\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}\log h_\theta (x^{(i)})+(1-y^{(i)})\log (1-h_\theta (x^{(i)}))]
\theta _jで偏微分してみる。

・まずはy^{(i)}\log \frac{1}{1+\mathrm{e}^{-\theta ^T x}}から。
Z=y^{(i)}\log \frac{1}{1+\mathrm{e}^{-\theta ^T x}}
としたとき、\frac{\partial Z}{\partial \theta _j}は求めづらいので、合成関数を微分する要領で進めてく。
A=\frac{1}{1+\mathrm{e}^{-\theta ^T x}}
\frac{\partial Z}{\partial \theta _j}=\frac{\partial A}{\partial \theta _j} \frac{\partial Z}{\partial A}
\frac{\partial Z}{\partial \theta _j}=\frac{\partial }{\partial \theta _j} \frac{1}{1+\mathrm{e}^{-\theta ^T x}} \frac{\partial }{\partial A}y^{(i)}\log A
B=1+\mathrm{e}^{-\theta ^T x}
\frac{\partial Z}{\partial \theta _j}=\frac{\partial }{\partial \theta _j} 1+\mathrm{e}^{-\theta ^T x} \frac{\partial }{\partial B} \frac{1}{B} \frac{\partial }{\partial A}y^{(i)}\log A
C=-\theta ^T x
\frac{\partial Z}{\partial \theta _j}=\frac{\partial }{\partial \theta _j}-\theta ^T x \frac{\partial }{\partial C} 1+\mathrm{e}^{C} \frac{\partial }{\partial B} \frac{1}{B} \frac{\partial }{\partial A}y^{(i)}\log A
\frac{\partial Z}{\partial \theta _j}=(-x_j) (\mathrm{e}^{C}) (-\frac{1}{B^2}) (y^{(i)}\frac{1}{A})
\frac{\partial Z}{\partial \theta _j}=(-x_j) (\mathrm{e}^{-\theta ^T x}) (-\frac{1}{(1+\mathrm{e}^{-\theta ^T x})^2}) (y^{(i)}(1+\mathrm{e}^{-\theta ^T x}))
\frac{\partial Z}{\partial \theta _j}=x_j y^{(i)}(1-\frac{1}{1+\mathrm{e}^{-\theta ^T x}})
\frac{\partial Z}{\partial \theta _j}=x_j y^{(i)}(1-h_\theta (x^{(i)}))

・同様に、(1-y^{(i)})\log (1- \frac{1}{1+\mathrm{e}^{-\theta ^T x}})もやると、
\frac{\partial Z}{\partial \theta _j}=(-x_j) (\mathrm{e}^{-\theta ^T x}) (\frac{1}{(1+\mathrm{e}^{-\theta ^T x})^2}) ((1-y^{(i)})\frac{1+\mathrm{e}^{-\theta ^T x}}{\mathrm{e}^{-\theta ^T x}})
\frac{\partial Z}{\partial \theta _j}=-x_j (1-y^{(i)}) \frac{1}{1+\mathrm{e}^{-\theta ^T x}}
\frac{\partial Z}{\partial \theta _j}=-x_j (1-y^{(i)}) h_\theta (x^{(i)})

・2つの式を合わせると、
-\frac{1}{m}[\sum_{i=1}^{m}x_j y^{(i)}(1-h_\theta (x^{(i)}))-x_j (1-y^{(i)}) h_\theta (x^{(i)})]

\displaystyle \frac{1}{m}[\sum_{i=1}^{m}(h_\theta (x^{(i)})-y^{(i)})x_j]

関連記事

small-icon.hover

【機械学習】Stanford University Machine Learning / Week1【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラットフォームにして提供している

記事を読む

small-icon.hover

【機械学習】Stanford University Machine Learning / Week4【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラットフォームにして提供している

記事を読む

small-icon.hover

【機械学習】Stanford University Machine Learning / Week2【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラットフォームにして提供している

記事を読む

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

small-icon.hover
【機械学習】Stanford University Machine Learning / Week4【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

small-icon.hover
【機械学習】Stanford University Machine Learning / Week3【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

small-icon.hover
【機械学習】Stanford University Machine Learning / Week2【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

small-icon.hover
【機械学習】Stanford University Machine Learning / Week1【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

ダウンロード
【WebSocket】Safariからlocalhostに対してハンドシェイクする際の注意点

この記事の対象者 とりあえずlocalhostで色々と試したい

→もっと見る

PAGE TOP ↑