【機械学習】線形回帰の複数特徴と勾配降下法へのフィット方法【Coursera】-その5-

2019年9月27日

Courseraで受講している機械学習について、勉強したことをアウトプットしていこうと思います。
あくまでも自分用となるので、もっと詳しく知りたい人は是非受講してみてください。

複数特徴

例えば家の価格を知りたい時に、土地面積だけで予測を出すのではなく、
それ以外の要素も利用して予測を出したい場合、複数の特徴を利用する必要があります。
ベッドルームの数、築年数、部屋数等々・・・
今までxで定義していたものが複数になるということです。
これらを指定するのは以下の様に定義します。

n=特徴の数
x(i)=xの何行目の特徴
x(i)j=xのi行目のj列の特徴

今までの仮説の式は以下の通りでしたが、特徴が増えたことで利用できなくなります

hθ(x)=θ0+θ1x
→これは利用できない!

xが増えていくので、実際には以下のような式になるでしょう。

hθ(x)=θ0+θ1×1+θ2×2・・・・θnxn

更に計算しやすいように、存在しないx(i)0を1と定義しましょう。
同じ様にθパラメータのθ0も1と定義することにします。
つまり、以下のようになります。
(Rというのは次元数を定義する時に利用する記号)

これを踏まえた上で式を再定義しましょう。

hθ(x)=θ0x0+θ1×1+θ2×2・・・・θnxn
=θTx
(Tは転置を意味します。)

これはどういう意味なのでしょう。
前回やった転置を思い出すと、行列で掛け算をする際は
1つ目の行と2つ目の列が一致していなければなりませんでした。
→(n*m)(m*o)
現在では、x0、θ0を定義したことでこれが可能となっている状態です。

以上が特徴が増えた場合の計算式となります。
これは別名では多変量の線形回帰と呼ばれています。

勾配降下法へのフィッティング

では多変量の線形回帰となった今、これを勾配降下法へフィッティングさせるにはどうすればいいのか考えていきましょう。
まずは復習も含めて今までのノーテーションを見ていきましょう。

パラメータのn+1というのは先程追加したθ0(1)というのが追加されたため、
nに対して1を足すということです。
また、目的関数のJ(θ0…)というのは、単純にJ(θ)と表現することもできます。

さて、では勾配降下法についてはどの様になるでしょうか。
今までは特徴が1つのみで実装してきたのですが、今回からは複数になるため、
単純にその分反復回数が増えます。

今まで最後のx(i)0等については、xiだけにしていましたが、今回からは特徴が増えますので、どの行のどの列に対しての勾配降下なのかを定義しています。
この違いだけです。
次は、この勾配降下法を実践でどの様に利用するのかを見ていきましょう。

勾配降下法の実践的トリック

ここでは、Feature Scalingを学んでいきます。
例えば敷地面積がx1、ベッドルームの数がx2だとします。
x1は0~2000feet2までの値を取ります。
x2は1~5までの値を取ります。
この状況で計算をしていくと、x1とx2の値がかけ離れすぎていて、
計算するのに膨大な時間パラメータの更新に費やさなければならなくなります。
そこで、x1/2000、x2/5を行ってから計算すると、以前より歪まなく、きれいな高等線図になります。

この様にパラメータの最大値で割ることで0~1の間の数字に収めてあげることで数段早く収縮を望めるようになります。
これは数学的に判明していることで、実際に計算すると分かるようですね。

平均ノーマライズ法

また、最大値で割るという他に、平均ノーマライズ法というものがあります。
これは、xiに対して、xi-μiと書き換え、これが平均して0になるようにするというのが平均ノーマライズ法です。
ただし、これはx0には適用しないでください。x0=1だから。
先程のx1とx2で計算すると、以下のようにだいたい半分の値を引いてあげて最大値で割るという式になります。
 x1=size-1000/1000
 x2=bedroom-2/3
これらの式は以下の様に定義します。
 x=x1-μ1/S1
μというのは、xiに対する平均値を取ります。
S1は最小値-最大値で計算を行ってください。

勾配降下法の実践的tips

このセクションはLearning Rateのαに関しての話です。
LRの仕事というのは、我々の代わりに適切なθを見つけてくれるということです。
これを図にプロットしましょう。
x軸には勾配降下法の反復回数を、y軸には目的関数のJ(θ)をプロットしてあげます。
以下図の様に、正しくJ(θ)が減少していればそれはLRが正しく機能していることを指します。

逆にJ(θ)が増加するようであれば、それはLRを見直す必要があるでしょう。
ですが、想定以上にゆっくりと降下する場合もLRを見直してください。

その他の特徴について

多項式回帰

家の横幅が1つ目の特徴、家の奥行きが2つ目の特徴だとした場合、
今までの仮説関数を利用すると以下の様になると思います。
 hθ(x)=θ0+θ1×1+θ2×2
ですが、渡された特徴をそのまま利用するという必要は無いわけです。
例えば価格を決定づけているものは、自身の土地面積だと仮定したとします。
つまり、x1(横幅)*x2(奥行き)とするということです。
その場合特徴は1つだけとなり、 hθ(x)=θ0+θ1x となります。

この様に特徴をどの様に定義するかという議題に密接して、多項式回帰というものが挙げられます。
今までの式では当てはまらないようなものが現れた場合、それに当てはまる式を足しこんで開ければ良いということになるが、その際に利用するのが多項式回帰です。

今までの二次関数(θ0+θ1×1+θ2×2)は、途中まではフィットしていても、徐々に下降してしまうモデルです。
家のサイズが大きくなりすぎて逆に値段が下がるなんてことは無いですよね?
なのでこれでは当てはまらない。

そこで3次関数を利用します。
簡単に書くと、以下の様になります。
 θ0+θ1×1+θ2×2+θ3×3
つまり、今までの特徴+その図にフィットする様に特徴を足しこみます。
例えばルート関数を利用しましょう。
特徴は家のサイズのみだとして、それに対してルート関数を実装します。
 hθ(x)=θ0+θ1×1+θ2√x1
ルート関数は徐々に緩やかに変化を行いますが、逆に小さくなることはない関数です。

この様に、どの特徴を利用するか。というのはそのデータに対して逐次決定してあげなければなりません。
ですが、現状では「こういうデータにはこの特徴の関数を利用したほうが良い」ということは分かりません。今後はこういうのもキャリアと共についてくるとは思いますが・・・。
ですので今は「データに対してフィットする特徴を選んであげる」ことができるということを覚えておきましょう。

終わりに

今回でかなり理解が進んだなと思います。
今までぼんやりしかわからなかったところも徐々に解消しつつあるので、
今後続けていくことでもっともっと楽しくなるのだろうなぁとか思います。(笑)

それではまた。。。