Coursera MachineLearning 1,2週目 まとめ

MachineLearning

機械学習界隈で評判高いCourseraのMachineLearningを受講したので、講義内容を個人的にまとめてみたいと思います。
1、2週目は単回帰分析と重回帰分析についてです。

単回帰分析 (Linear Regression with one Variables)

この講義で一番最初に学ぶ「学習アルゴリズム」です。

ある日、あなたは土地面積から家の価格を予測できないかと思い、過去の販売データをいくつか集めたところ、以下のようなプロットが得られました。

(出典:Andrew Ng, Coursera Machine Learning Week 1)

土地面積が大きくなればなるほど家の価格も高くなるんだろうな…ということがなんとなく読み取れます。
線形回帰はこういった予想を立てるためのデータがあり、それを元に具体的な数値を予測するモデルを作成するので、教師あり学習(Supervised Learning)というカテゴリーに分類されます。
(第8週目からは教師なし学習 (Unsupervised Learning)についても学びます)

改めてプロットを見てみましょう。
大まかな傾向は掴めそうですが値にばらつきがあって、どれが最適な価格なのか見た目だけでは判断が付きづらいですね。

こんな時に回帰分析を行います。(今回は「土地面積」のみで「家の価格」を予想するので、単回帰分析です)
プロットにそれらしい直線を引き、そこから最適な答えを導きます。

仮定関数 (Hypothesis function)

集めた販売価格のデータ上に直線モデルを当てはめたいのですが、どのように線を引けば良いのでしょうか。土地面積をX、家の価格をYとすると、以下のような一次関数の式になります。

Hypothesis function (仮定関数)と呼ばれる式です。
もしこの仮定関数が最適であれば、新たに土地面積のデータをインプットすると、それに見合った家の価格を予想してアウトプットしてくれるというわけです。

ここで新たなパラメーターθが登場しました。このθを自由に設定し、最適な直線モデルを作成します。

目的関数 (Cost function)

仮定関数が何なのかは分かったけど、パラメーターθはどうやって設定する??

θは自由パラメーターなので色々な値になり得ます。しかし、手当たり次第に値を代入してどの値が最適かを確かめていたらとんでももなく時間がかかりそうです…
最適な仮定関数にするためには、集めてきたデータにどれだけフィットしているかを考えなければいけません。ここでは、仮定関数が予測した値と集めてきたデータとの誤差が最小になるようなパラメーターθを求める必要があります。

ここで、cost function(目的関数)と呼ばれる式を導入します。

m は集めてきたサンプルデータ数(datasetに含まれるデータの総数)、i は何番目のサンプルデータかを示しています。
予測値と実測値で差を計算して2乗した後に(差が負の値になる可能性があるので、2乗して正の値にします)、すべて足し合わせてデータ数で割り平均を求めます。各データの誤差の平均値を求めることが、この式の目的ですね。

この目的関数Jが最小になるようなθを見つけることができれば、最適な直線モデルを得ることができそうです。

最急降下法 (Gradient Descent)

最適な仮定関数を求めるために目的関数を導入して、その目的関数を最小化するθは……という流れでここまで考えてきましたが、ここでようやくθの値を求めます。

θを求めるために、以下の式で示される最急降下法(Gradient Descent)と呼ばれるアルゴリズムを使用します。

jはパラメーターθのインデックスです。今回の場合は、θは2個しかないのでj=0、1 となります。(慣習的にインデックスは0からスタートします)
α は学習率(learning rate)と呼ばれます。この値が大きいと目的関数上を大きく移動し、反対に小さいと移動幅も小さくなります。調整が必要なパラメーターというわけですね。
導関数項は「傾き」を表しています。高校数学でも2次関数を微分して曲線の傾きを求めたと思いますが、ここでも同じことをしています。傾きと学習率αを掛け、得られた値をθから引くことで新たなθを求めます。これを傾きが小さくなるまで繰り返すことで、最適なθを求めます。

イメージを掴むために、目的関数Jとθの関係を可視化してみましょう。以下のような図が得られたとします。

(出典:Andrew Ng, Coursera Machine Learning Week 1)

ここでの目標は目的関数Jの値が最小となるようなθを求めることなので、目的関数が濃い青色の部分に落ち着くまで最急降下法でθをアップデートし続けます。
濃い青色の部分の底付近では傾きが0に限りなく近くなるので、θの変動は小さくなり収束(Convergence)していくというわけですね。(移動幅を示す学習率αを大きくしすぎると、何度も何度も底を通り過ぎてしまい収束しないのでので注意が必要です)

目的関数が最小値(Global Minimum)に達した時のθが、今回の例での最適なθとなります。
最適なθが得られれば、家の価格を予測する仮定関数が作成できますね。

《注意点》
最急降下法でのθのアップデートは同時に行いましょう。
\(θ_{0}\)を計算して、アップデート!次にθ1を計算して、アップデート!という風にはしないで、
\(θ_{0}\)、\(θ_{1}\)を計算して、両方を一気にアップデート!としましょう。

重回帰分析 (Linear Regression with Multiple Variables)

単回帰分析では、一種類のインプット(土地面積)から家の価格を予想しました。
しかし、実際のデータはそんなに単純な傾向のものばかりではありません。築年数や階数など、他にも価格に効いてきそうな要因がありそうです。こういった複数の特徴量(feature)を使用する回帰分析を重回帰分析と呼びます。

仮定関数 (Hypothesis function)

単回帰分析の時のように仮定関数を定義しましょう。
式は以下のようになります。

特徴量(feature)xの増加に伴って、θの数も増えています。
θはそれぞれの特徴量の重み付けをします。特徴「土地の広さ」は家の価格に大きく影響しそうだからθの値も大きくしよう。それに比べると特徴「階数」はそこまで影響しなさそうだから少し小さくてもいいか…というようなことを、集めてきたデータからアルゴリズムに学習させていきます。

θは自由な値をとるパラメーターですが、仮定関数が予測した値と集めてきたデータとの誤差が最小になるような値にする必要がありました。そのためにも、単回帰分析と同様に目的関数を定義します。

目的関数 (Cost function)

θの数が増えているので、単回帰分析の目的関数と比べると左辺が少し変わっていますが、行うことは同じです。

最急降下法 (Gradient Descent)

最急降下法も基本的には同じです。
j は何番目のθを扱っているかを示しています単回帰分析の例ではj=0、1 でしたが、重回帰分析ではj=0, …, n となっています。θがたくさんある場合でも計算可能ということですね。(θが増えると、それに伴い計算コストも増加します。)

スケーリング (feature scaling)

重回帰分析では多くの特徴(feature)を使用することになりますが、それらの変数が取りうる値の範囲が大きく異なる場合、最急降下法の進行を妨げる可能性が出てきます。
今回の例で言えば、特徴「階層」が取りうる値の範囲が1〜3なのに、特徴「土地面積」が取りうる値の範囲は0〜2000、というようなことになってくると目的関数が非対称な形となり、最急降下法で効率よく収束していきません。

値の範囲を揃えるために、各特徴に対して スケーリング(feature scaling) を行います。

μ はi番目の特徴量xの平均値、s は値の範囲(最大値 – 最小値)もしくは標準偏差を示します。
大まかに範囲( \(-1 ≦ x_i ≦ 1\) )を合わせるのが目的なので、分母はどちらでも良いようです。(Mean normalization と呼ばれる手法)
これで各特徴量の値の範囲を揃えることができました。


最初の2週は単回帰分析、重回帰分析についてでした。
3週目は、ロジスティック回帰について学習していきます。

コメント

タイトルとURLをコピーしました