*

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

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

0.何の学習メモ?

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

IV.多変量線形回帰

(※前回IIで終わったのにIIIが無いのは、IIIが行列の復習だった為省略)

複数の変数

・前回までは1つの変数(例:部屋の広さ)だったが、今回は複数の変数(例:ベッドルームの数、築年数、etc)のデータを対象にする
・前回の表記法(notation)に加えて、
n=特徴(変数)の数
x^{(i)}=i番目の訓練データの入力値。ベクトル。
→例(広さ、部屋数、階数、年数の変数が合った場合):x^{(2)}=\left[\begin{array}{c} 1416 \\ 3 \\ 2 \\ 40 \\ \end{array} \right]
x_j^{(i)}=i番目の訓練データの変数jの値。
→例(上記の例をそのまま用いると):x_3^{(2)}=2

・変数が複数になったことによって、hypothesisの記述も変更
・元々は、h_\theta (x)=\theta _0 + \theta _1 x
・式を簡便化するために、\theta _0だったものを、\theta _0 x_0とする。(x_0=1)
h_\theta (x)=\theta _0 x_0 + \theta _1 x_1 + \cdots + \theta _n x_nとなる
・ここで、x=\left[\begin{array}{c} x_0 \\ x_1 \\ \vdots \\ x_n \\ \end{array} \right] \in \mathbb{R}^{n+1} , \theta =\left[\begin{array}{c} \theta _0 \\ \theta _1 \\ \vdots \\ \theta _n \\ \end{array} \right] \in \mathbb{R}^{n+1}とすると
h_\theta (x)=\theta ^T x
・これが多変量線形回帰(Multivariate linear regression)

多変量時の勾配法

・それぞれを改めて定義すると、
-Hypothesis:h_\theta (x)=\theta ^T x
-パラメータ(Parameter):\theta
→これは\theta _0 , \theta _1 , \ldots , \theta _nをベクトルにしたもの。n+1次元ベクトル(dimensional vector)。
-費用関数(Cost funciton):J(\theta )=\frac{1}{2m} \sum_{i=1}^{m} \left(h_\theta (x^{i})-y^{i} \right)^2
-勾配法(Gradient descent):
\displaystyle \flushleft{Repeat \{ }
\displaystyle \theta _j :=\theta _j - \alpha \frac{\partial }{\partial \theta _j} J(\theta ) (simultaneously update for every j=0, \ldots , n)
\}
→偏微分を解くと(実際に手計算すると分かるが)以下の様になる
\displaystyle \flushleft{Repeat \{ }
\displaystyle \theta _j :=\theta _j - \alpha \frac{1}{m} \sum_{i=1}^{m} \left(h_\theta (x^{i})-y^{i} \right) x_j^{(i)}
(simultaneously update \theta _j for j=0, \ldots , n)
\}

勾配法を実際にやる為に

特性スケーリング(Feature scaling)

・例えば、広さ(x_1:0~2000)と部屋数(x_2:1~5)でコンター図(Contour)を書こうとした場合、かなり縦長で窮屈な図になってしまう。その場合、勾配法を実施しようとしても少しずつしか移動できず(\alphaが大きいと容易に飛び出してしまう)、大域的最適(global optima)になるまで時間が掛かってしまう。
・そこで、それぞれの変数(特性)を同じ様なスケールにすることによってわりかし均等なコンター図になり、大域的最適になるまでの時間を短縮出来る
・スケーリングする際には、全ての変数が-1 \leqq x_i \leqq 1の範囲になるようにする。きっちりこの範囲にする必要はない
→OK:0 \leqq x_1 \leqq 3 , -2 \leqq x_2 \leqq 0.5
→NG:-100 \leqq x_3 \leqq 100 , -0.0001 \leqq x_4 \leqq 0.0001
→今回の例でいくと、x_1 = \frac {size}{2000}

・スケーリングの方法には平均正則化(Mean normalization)がある
・平均がおおよそ0になるように、x_iから平均\mu _iを引く。(x_0 =1には適用してはだめ)
\displaystyle x_i = \frac {x_i - \mu _i}{s_i}
s_iには、i変数の値の範囲(max - min)でもいいし、標準偏差(standard deviation)でもいい
→スケールの範囲はおおよそ、-0.5 \leqq x_i \leqq 0.5

学習レート\alphaのデバッグ

・勾配法が正しく機能していることを確認するには?
→反復数(No. of iterations)を横軸に、縦軸を費用関数J(\theta )を縦軸にして、J(\theta )の収束度合いを見る
→各反復でJ(\theta )は減少していくはず
→自動で収束するか判断する方法もある。閾値(threshold)を十分小さい数\epsilon(例:10^{-3})として、ある反復でこの数値以下だった場合収束と見なす。とは言え、閾値を何にするかが問題
→収束に必要な反復数はケースによって異なるので、グラフにプロットして確認するのがいいかも

・学習レートが大きすぎると判断できる場合
-反復毎にJ(\theta )が増加していく
-反復を通じて、J(\theta )の増減が繰り返されている
→適切な小さい\alphaを選べば、J(\theta )は減少していく
・しかし、\alphaが小さすぎると、収束まで時間が掛かってしまう

・適切な\alphaを探すには、例えば0.001から始まって、0.003、0.01、・・・とおおよそ等比で値を調整して、グラフにプロットしながら、J(\theta )が減少する\alphaの範囲を探し、その中で一番収束が早いものを選んだりしてみる

変数の選択と多項式回帰

・hypothesisに使う変数は、何も最初に与えられた変数を使う必要はなく、必要に応じて組み合わせても大丈夫
→例:住宅価格を求めるために、敷地の縦と横の長さという2つの変数が与えられたら、それらを掛けあわせた面積という1つの変数を新たに作ってもいい。(むしろこの場合はその方が合理的だし、計算も早くなる。擬似相関に気をつけろ的な話になるかも)

・敷地面積を横軸に、住宅価格を縦軸にプロットした際に、どう見ても直線ではなく曲線がフィットすると思った時に使えるのが多項式回帰(Polynomial regression)。名前の通り、データにフィットするように項の数や値を設定する感じ。
・スケーリングは適切に行う必要がある。
・実際にどうやって設定していくかは今後学習する、らしい。

→例1:項を増やしてみる
h_\theta (x) = \theta _0 + \theta _1 x_1 + \theta _2 x_2

h_\theta (x) = \theta _0 + \theta _1 x_1 + \theta _2 x_2 + \theta _3 x_3

→例2:項の値を変えてみる(1)
h_\theta (x) = \theta _0 + \theta _1 (size) + \theta _2 (size) + \theta _3 (size)

h_\theta (x) = \theta _0 + \theta _1 (size)^1 + \theta _2 (size)^2 + \theta _3 (size)^3

→例3:項の値を変えてみる(2)
h_\theta (x) = \theta _0 + \theta _1 (size)^1 + \theta _2 (size)^2

h_\theta (x) = \theta _0 + \theta _1 (size)^1 + \theta _2  \sqrt{size}

正規方程式

・勾配法では反復を繰り返しながら大域的最適を求めようとしていたが、正規方程式(Normal equation)を使えば解析的(analytically)に\thetaを解くことが出来る

・何をしているのかというと、要は接線の傾きが0の\thetaを求めている
→例1:1次元(\theta \in \mathbb{R})の場合、
J(\theta )=a \theta ^2 + b \theta +cという費用関数だった場合、
\frac{d}{d \theta}J(\theta ) =0
となる\thetaを求めればいい

→例2:n+1次元(\theta \in \mathbb{R}^{n+1})の場合、(mはデータ数、nは変数の数)
J(\theta )=\frac{1}{2m} \sum_{i=1}^{m} \left(h_\theta (x^{i})-y^{i} \right)^2
\frac{\partial }{\partial \theta _j} J(\theta )=0 (for every j)
となる\theta _0 , \theta _1, \ldots , \theta _nを求めればいい

・これを行列で表現してみる
m個の訓練データ(x^{(1)},y^{(1)}), \ldots ,(x^{(m)},y^{(m)})n個の変数(特性)が合った場合、
x^{(i)}=\left[\begin{array}{c} x_0^{(i)} \\ x_1^{(i)} \\ \vdots \\ x_n^{(i)} \\ \end{array} \right] \in \mathbb{R}^{n+1}
x_0^{(i)}=1であることを忘れずに
各訓練データは上記のように示せ、それを転置(Transpose)しながら配置すると、下記のようになる
X=\left[\begin{array}{ccc} - & (x^{(1)})^T & - \\ - & (x^{(2)})^T & - \\  & \vdots &  \\ - & (x^{(m)})^T & - \\ \end{array} \right]
※この時、Xはdesign matrixとも呼ばれる
\theta = (X^T X)^{-1} X^T y
※ちなみにOctaveだと、pinv(X’*X)*X’*yらしい
で各\thetaの値が求められる
・この正規方程式で求める場合、スケーリングは考えなくても大丈夫

・これだけ聞くと正規方程式が最強に見えてくるが、ケースによっては勾配法の方が良い場合がある
m個の訓練データ、n個の変数があった場合、それぞれ以下の特徴がある

勾配法の特徴

・学習レート\alphaを選択する必要がある
・多くの反復が必要
nが大きくても上手く機能する

正規方程式の特徴

・学習レート\alphaを選択する必要がない
・反復は不要
(X^T X)^{-1}を計算する必要がある
→nxnの計算になり、大体O(n^3)の計算量になる
nが大きいと計算に時間がかかってしまう
n=10^5ぐらいならぎりぎり普通のコンピューターでも計算できるが、n=10^6なら勾配法を選ぶ(講師談)

・もしX^T X)が非可逆行列(non-invertible)だったら?(特異行列(singular)/退化(degenerate))
→確認ポイントは2つ:
-冗長(一次従属)な変数(特性)はないか?
例:ある面積を変数1はメートル表記、変数2はフィート表記
・・・該当変数を削除

-変数が訓練データ数に比べて多すぎないか?
例:m=10なのに、n=100
・・・いくつか変数を削除するか、正則化(後の講義で説明)するか

V.Octave入門

・Windowsには、ここを参考にして入れたら上手くインストール出来た。
・Macには、ここを参考にして入れても上手くインストール出来ない・・・。

・ここのセクションは、関数の紹介だったのでパス。
・面白いと思ったのは、関数をファイルを別にして(function.m的な感じ)読み込めること。

関連記事

small-icon.hover

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

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

記事を読む

small-icon.hover

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

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

記事を読む

small-icon.hover

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

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 ↑