※この記事は、「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$$