【機械学習】Stanford University Machine Learning / Week2【学習メモ】
0.何の学習メモ?
・スタンフォード大学がCourseraをプラットフォームにして提供している機械学習のコース(詳しくはここ)の学習メモ
・学習メモだけあって雑然としてます
IV.多変量線形回帰
(※前回IIで終わったのにIIIが無いのは、IIIが行列の復習だった為省略)
複数の変数
・前回までは1つの変数(例:部屋の広さ)だったが、今回は複数の変数(例:ベッドルームの数、築年数、etc)のデータを対象にする
・前回の表記法(notation)に加えて、
–=特徴(変数)の数
–=i番目の訓練データの入力値。ベクトル。
→例(広さ、部屋数、階数、年数の変数が合った場合):
–=i番目の訓練データの変数jの値。
→例(上記の例をそのまま用いると):
・変数が複数になったことによって、hypothesisの記述も変更
・元々は、
・式を簡便化するために、だったものを、
とする。(
)
・となる
・ここで、とすると
・
・これが多変量線形回帰(Multivariate linear regression)
多変量時の勾配法
・それぞれを改めて定義すると、
-Hypothesis:
-パラメータ(Parameter):
→これはをベクトルにしたもの。n+1次元ベクトル(dimensional vector)。
-費用関数(Cost funciton):
-勾配法(Gradient descent):
(simultaneously update for every
)
→偏微分を解くと(実際に手計算すると分かるが)以下の様になる
(simultaneously update for
)
勾配法を実際にやる為に
特性スケーリング(Feature scaling)
・例えば、広さ(:0~2000)と部屋数(
:1~5)でコンター図(Contour)を書こうとした場合、かなり縦長で窮屈な図になってしまう。その場合、勾配法を実施しようとしても少しずつしか移動できず(
が大きいと容易に飛び出してしまう)、大域的最適(global optima)になるまで時間が掛かってしまう。
・そこで、それぞれの変数(特性)を同じ様なスケールにすることによってわりかし均等なコンター図になり、大域的最適になるまでの時間を短縮出来る
・スケーリングする際には、全ての変数がの範囲になるようにする。きっちりこの範囲にする必要はない
→OK:
→NG:
→今回の例でいくと、
・スケーリングの方法には平均正則化(Mean normalization)がある
・平均がおおよそ0になるように、から平均
を引く。(
には適用してはだめ)
・
→には、
変数の値の範囲(
)でもいいし、標準偏差(standard deviation)でもいい
→スケールの範囲はおおよそ、
学習レート
のデバッグ
・勾配法が正しく機能していることを確認するには?
→反復数(No. of iterations)を横軸に、縦軸を費用関数を縦軸にして、
の収束度合いを見る
→各反復では減少していくはず
→自動で収束するか判断する方法もある。閾値(threshold)を十分小さい数(例:
)として、ある反復でこの数値以下だった場合収束と見なす。とは言え、閾値を何にするかが問題
→収束に必要な反復数はケースによって異なるので、グラフにプロットして確認するのがいいかも
・学習レートが大きすぎると判断できる場合
-反復毎にが増加していく
-反復を通じて、の増減が繰り返されている
→適切な小さいを選べば、
は減少していく
・しかし、が小さすぎると、収束まで時間が掛かってしまう
・適切なを探すには、例えば0.001から始まって、0.003、0.01、・・・とおおよそ等比で値を調整して、グラフにプロットしながら、
が減少する
の範囲を探し、その中で一番収束が早いものを選んだりしてみる
変数の選択と多項式回帰
・hypothesisに使う変数は、何も最初に与えられた変数を使う必要はなく、必要に応じて組み合わせても大丈夫
→例:住宅価格を求めるために、敷地の縦と横の長さという2つの変数が与えられたら、それらを掛けあわせた面積という1つの変数を新たに作ってもいい。(むしろこの場合はその方が合理的だし、計算も早くなる。擬似相関に気をつけろ的な話になるかも)
・敷地面積を横軸に、住宅価格を縦軸にプロットした際に、どう見ても直線ではなく曲線がフィットすると思った時に使えるのが多項式回帰(Polynomial regression)。名前の通り、データにフィットするように項の数や値を設定する感じ。
・スケーリングは適切に行う必要がある。
・実際にどうやって設定していくかは今後学習する、らしい。
→例1:項を増やしてみる
↓
→例2:項の値を変えてみる(1)
↓
→例3:項の値を変えてみる(2)
↓
正規方程式
・勾配法では反復を繰り返しながら大域的最適を求めようとしていたが、正規方程式(Normal equation)を使えば解析的(analytically)にを解くことが出来る
・何をしているのかというと、要は接線の傾きが0のを求めている
→例1:1次元()の場合、
という費用関数だった場合、
となるを求めればいい
→例2:n+1次元()の場合、(mはデータ数、nは変数の数)
(for every
)
となるを求めればいい
・これを行列で表現してみる
・個の訓練データ
、
個の変数(特性)が合った場合、
※であることを忘れずに
各訓練データは上記のように示せ、それを転置(Transpose)しながら配置すると、下記のようになる
※この時、はdesign matrixとも呼ばれる
※ちなみにOctaveだと、pinv(X’*X)*X’*yらしい
で各の値が求められる
・この正規方程式で求める場合、スケーリングは考えなくても大丈夫
・これだけ聞くと正規方程式が最強に見えてくるが、ケースによっては勾配法の方が良い場合がある
・個の訓練データ、
個の変数があった場合、それぞれ以下の特徴がある
勾配法の特徴
・学習レートを選択する必要がある
・多くの反復が必要
・が大きくても上手く機能する
正規方程式の特徴
・学習レートを選択する必要がない
・反復は不要
・を計算する必要がある
→nxnの計算になり、大体の計算量になる
・が大きいと計算に時間がかかってしまう
→ぐらいならぎりぎり普通のコンピューターでも計算できるが、
なら勾配法を選ぶ(講師談)
・もしが非可逆行列(non-invertible)だったら?(特異行列(singular)/退化(degenerate))
→確認ポイントは2つ:
-冗長(一次従属)な変数(特性)はないか?
例:ある面積を変数1はメートル表記、変数2はフィート表記
・・・該当変数を削除
-変数が訓練データ数に比べて多すぎないか?
例:m=10なのに、n=100
・・・いくつか変数を削除するか、正則化(後の講義で説明)するか
V.Octave入門
・Windowsには、ここを参考にして入れたら上手くインストール出来た。
・Macには、ここを参考にして入れても上手くインストール出来ない・・・。
・ここのセクションは、関数の紹介だったのでパス。
・面白いと思ったのは、関数をファイルを別にして(function.m的な感じ)読み込めること。
関連記事
-
-
【機械学習】Stanford University Machine Learning / Week3【学習メモ】
0.何の学習メモ? ・スタンフォード大学がCourseraをプラットフォームにして提供している
-
-
【機械学習】Stanford University Machine Learning / Week4【学習メモ】
0.何の学習メモ? ・スタンフォード大学がCourseraをプラットフォームにして提供している
-
-
【機械学習】Stanford University Machine Learning / Week1【学習メモ】
0.何の学習メモ? ・スタンフォード大学がCourseraをプラットフォームにして提供している