「機械学習」勉強メモ1

※この記事は、「Coursera」の「Machine Learning」を学習してのメモなので、 不足、間違いなどがあるかも。

線形回帰と仮説関数

機械学習のモデルに、線形回帰がある。

線形回帰は、直線の形に回帰(ある状態に収束する)ことであり、これは中学で習った一次関数、y=ax+bの形で表せる。

例えば、気温とアイスの売り上げデータがあるとする。気温をx軸、売り上げをy軸にプロットしてみると、気温が上がれば、売り上げも上がっていると推測できたとする。

データをもとに、y=ax+bの「a」と「b」を求めて数式化できれば、気温「x」を入力するだけで、アイスの売り上げ予想が出力できる。

機械学習の世界では、この式を仮説関数と呼ばれる下記で表現する。

$$h_θ(x)=θ_0+θ_1x$$

ここでの「h」は「hypothesis」(仮説)のこと。

θは、統計学の世界で、未知数や、推定値を表す記号のことで、今回求めたいのが、「\(θ_0\)」「\(θ_1\)」の2つである。

この、θはパラメータとも呼ばれる。「機械学習でモデルがわかっても、パラメータを正しく設定しないと精度が出ない」という時のパラメータはこの値のこと。

目的関数

では、このパラメータをどのように求めるのか、その前段として目的関数が必要になる。

下記の、目的関数は、仮定した 「\(θ_0\)」「\(θ_1\)」を評価するための関数である。

$$J(θ_0,θ_1)=\frac{1}{2m}\sum_{i=1}^m (h_θ(X_i)-Y_i)^2$$

これは、二乗誤差関数とも呼ばれるもので、予測値「\(h_θ(X_i)\)」と、計測値「\(Y_i\)」の誤差を計算して、最小にしましょうというもの。

「m」は与えられた、教師データ数であり、誤差の二乗を「m」回足し合わせて、2mで割っている。m回足し合わせて、mで割るのは、平均を出すためで、二乗するのは、「負の数にならない」メリットがあり、他にも「精度が出る」とも解説されている。2で割っているのは、後に数式を微分するときに計算が楽になるとのこと。

この式で得られる値を0に近づけることができれば、予測値と、計測値の誤差をより小さくすることができたということであり、より精度の高いパラメータといえる。

最急降下法

最適なパラメータの見つけ方は、次の手順で行われる。

まず、適当に 「\(θ_0\)」「\(θ_1\)」適当に決め、目的関数\(J(θ_0,θ_1)\)でそれを評価する。次に、パラメータ「\(θ_0\)」「\(θ_1\)」を同時に更新し、また、目的関数で評価する。パラメータをいくつか変えて同様に評価し、自分の周りを見回して(一番急な坂道を下るように)目的関数の結果を小さくできる方向にパラメータを変更する。

これを繰り返すことで、やがて、これ以上 \(J(θ_0,θ_1)\)を小さくできなくなった地点が一つの到達地点となる。

ただし、 「\(θ_0\)」「\(θ_1\)」の初期値と、変更する値次第で到達地点は変わってくる。

アルゴリズムは、下記の式で表すことができる。

$$θ_j:=θ_j-α\frac{∂}{∂θ_j}J(θ_0,θ_1)$$

この式の意味は、「\(θ_j\)」に「\(θ_j\)」からある値(少しづつ変化させる為のもの)を引いたものを代入して、\(J(θ_0,θ_1)\)を最小化できるように更新していこうというもの。

αは、「学習率」と呼ばれ、この値が大きくなれば、変化させる値は大きくなるし、小さくすれば、少しづつ目的地に近づくようになる。

\(\frac{∂}{∂θ_j}J(θ_0,θ_1)\)の部分は、目的関数の偏微分である。

偏微分とは、多変数関数で特定の文字以外を、変数とみなして微分することであり、微分とは、ある地点の変化の傾きを得ることである。

なので、ここでは\(θ_1\)を定数とみなして偏微分することと、\(θ_0\)を定数とみなして偏微分する必要がある。

まずは、\(θ_1\)を定数とみなして、\(\frac{∂}{∂θ_0}J(θ_0,θ_1)\)を求めてみる。

目的関数の式を当てはめると、下記のようになる。

$$\frac{∂}{∂θ_0}\frac{1}{2m}\sum_{i=1}^m ((θ_0+θ_1x_i)-y_i)^2$$

これを解くには、合成関数の微分公式を利用して\(((θ_0+θ_1x_i)-y_i)^2\)の部分を微分する

合成関数の微分方式:
y が u の関数で,u が x の関数であるとき,y を x で微分したものは以下のようになる

$$\frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx}$$

\((θ_0+θ_1x_i)-y_i\)をuとして、\(u^2\)の微分結果2uと、uを\(θ_0\)で微分した結果1をかけて、微分結果は、\(2((θ_0+θ_1x_i)-y_i)\)となる。

よって、最終的には、下記のようになる。

$$θ_0:=θ_0-α\frac{1}{m}\sum_{i=1}^m (θ_0+θ_1x_i)-y_i)$$

\(θ_1\)も同様に計算すると下記のようになる。

$$θ_1:=θ_1-α\frac{1}{m}\sum_{i=1}^m (θ_0+θ_1x_i)-y_i)x_i$$