[Raspberry pi]Pythonで機械学習備忘録(2)〜単回帰,最小二乗法

  • 2020.09.29
  • IoT
[Raspberry pi]Pythonで機械学習備忘録(2)〜単回帰,最小二乗法

前回に引き続き、今回は実際に回帰モデルの計算方法をまとめていきます.

計算方法がわかれば、いよいよプログラムとしてラズパイ に組み込めます.
また、僕自身も約高校ぶりに真面目に計算をしているた途中式なども少し詳細に書いています.

ちなみにこちらの書籍で機械学習に必要な数学を学んでいます.

単回帰

1つの入力に対して1つの出力を予測するモデルです.
機械学習における初期中の初期ということからまずはここから調べていきます.

単回帰モデルの予測式は以下のような一次関数になります.

予測式:\(y_p = w_0 + w_1 * x \)\(\\\) \(y_p\):予測値\(\\\) \(w_0\):定数項\(\\\) \(w_1\):係数パラメータ\(\\\) \(x\):説明変数

ただし、分散している値が1本の直線で結び付くわけがないため、これに誤差を追加することで正解の式とする.

\(y_t = w_0 + w_1 * x + ε\)\(\\\) \(y_t:\)正解値\(\\\) \(ε\)(エプシロン):残差

ここで定義した式と変数をベースにして直線を推定していきます.

最小二乗法

まず初めに最小二乗和(残差平方和)を説明します.
最初に公式を載せます.

最小二乗法

正解値と予測値の差を誤差とした場合、どちらかが負の値だと正確な誤差が出せません.
そういった問題を解消するために、各座標ごとに「正解値と予測値の差の二乗」をとります.

さらにそれらの合計値をとる事を「最小二乗和」、その和が最小となるような\(w_0,w_1\)を求めるのが「最小二乗法」と呼びます.

ではどのようにして最小値を求めて行くのかを以下の「最小二乗推定量」の項より説明していきます.

補足

ちなみに\(w_0、w_1\)の頭についている記号はハットと言います. 予測値を表す記号です.
ハット

単回帰の項目で載せた式をハットを用いて表現すると以下のようになります.

正解値をハットを使って
また、「arg min」の部分に関しては「それ以降のΣ式を最小とする\(w_0,w_1\)」という解釈で大丈夫です.

最小二乗推定量 

\(w_0,w_1\)の最小値はそれぞれ(\(w_0,w_1\))の偏微分が0になる時の値です. 実際に最小二乗法の式を展開しつつ、整理していきます. 最小二乗和を以下のようにおきます.
また、前述の「\(w_0,w_1\)の最小値はそれぞれ(\(w_0,w_1\))の偏微分が0になる時」について「SSE」を使って表すと以下になります.
SSE偏微分
「偏微分って何?」って思われた方は調べてみた方が早いとは思いますが、以下を参考に理解してみてください. 関数\(f(x)\)の\(x,y\)についてそれぞれ偏微分しています.
偏微分参考
xについて偏微分した場合ですと、\(2x^2\)を微分(\(4x\)になる)し、それ以外は定数としてみなすので微分すると0になります.\(\\\) \(y\)に関しても同様です.

それでは先ほど定義した式SSEを展開していきましょう.

SSE展開1
SSE展開2
ここで(\(w_0,w_1\))についての偏微分を以下におきます.
w0偏微分
w1偏微分
これら2式の連立方程式を解く事で\(w_0,w_1\)に関する式を導出できます.\(\\\) 要は\(w_0=〜、w_1 =〜\)の式に直すと、それらが\(w_0,w_1\)の最小値になるのです.\(\\\)\(\\\) まずは\(w_0\)の方からやっていきます.
w0式
nx適用
ここで上記\(\bar{x}\)について説明します.\(\\\) 以下を定義します.
nx
どうしてこうなるかというと、\(n=3、x_i=2x_i\)を代入してみると分かるかと思います.\(\\\) 計算結果の12とは2,4,6,の平均値4を3倍(n倍)した数です.\(\\\) つまり\(\bar{x}\)にnをかけた値になります.
Σとは
では続きを解いていきます.\(\\\) 先ほどの偏微分の式を\(w_0\)で整理します.
w0計算結果
\(w_0\)が導出できました.\(\\\) 次は\(w_1\)について、\(w_0\)の式を以下に代入しつつ解いていきます.
w1式
両辺を-2で割りつつ、\(w_0\)を代入.
w1にw0代入

さらに整理.

w1更に整理
w1更に整理2
\(w_1\)の式に直します.
w1計算結果(仮)
ここでxの分散(\(S_{xx}\))、x,y(\(S_{xy}\))の共分散を以下に表します.
xの分散
x,yの共分散
この式を先ほどの\(w_1\)式に当てはめることで以下のように表せます.
w1計算結果
これで\(w_0,w_1\)を導出できました.以下にまとめます.
w0計算結果
w1計算結果
だいぶ大雑把なこと言いますが、これらが「最小二乗推定量」です.\(\\\) もう少し具体的にいうと誤差の2乗を最小にする時のやり方のことです.\(\\\) \(w_1\)式を見ると、x,yの共分散をxの分散で割る事で\(w_1\)の最小値を求めることができてますよね.

決定係数

予測式が理想の式とどのくらい一致しているのか知っておく必要があります.
そのための指標として、「決定係数」(R)があります.
「決定係数」値の範囲は0〜1となっており、1に近いほど理想に近いと判断できます.
また、相関係数(r)とはイコール(厳密には相関係数を2乗する)の関係にあります.

回帰変動が全変動に対してどれくらいの影響を与えているかの係数でもあり、その全変動(SST)は回帰変動(SSR)と残差変動(SSE)の合計になります.

以上の点を踏まえ計算式を以下に載せます.

決定係数

決定係数と相関係数との関係式は以下です.

決定係数と相関係数

また、ついでに相関係数の公式も載せておきます.

相関関数

決定係数、相関係数に関しては以下のサイトが分かりやすかったです.
相関係数Rと決定係数R2

分散分析

最後です.分散分析に関しては決定係数の項で登場しています.
ここでは式のみ紹介します.

全変動(SST)

SST
SST2

回帰変動(SSR)

SSR

残差変動(SSE)

SSE公式

詳しくは以下を参考にしてください.
全変動,回帰変動,残差変動の意味と関係

終わりに

今回は主に数学的な部分をまとめてきました.
ここら辺に関しては読んで理解するというよりは実際に紙とペンで計算して理解していきました.
久々だったのもあってだいぶ苦戦しましたが、後はここで導出した式をコードに書き起こしていくだけです.
ここまで見ていただきありがとうございます.

参考:
Pythonで基礎から機械学習 「単回帰分析」
単回帰分析とは