Engineering Skills

製品開発エンジニアがデータ解析のノウハウを垂れ流します

回帰分析と最小二乗法

技術開発に関わっていると原因Xから結果Yを精度良く予測しなければならない機会は多いです。また製品開発の立場から次の製品でどのような不具合が発生するか予測することも重要です。最も基本的な予測手法は入力Xに対して応答Yをを線形近似することです。線形近似、つまり直線で関係を予測します。どのような直線が最も精度が高いか?これを与えてくれるものが最小二乗法です。

最小二乗法

いったい何を"二乗"して"最小"化するかというと、それはモデル式と実データとの誤差です。 1次近似の場合、モデル式は下記の通りです。

f:id:OceanOne:20200302011524j:plain

実データと予測結果には常に誤差が生じます。誤差を考慮すると下記の通りです。

f:id:OceanOne:20200302011753j:plain 

最小二乗法は誤差を最小化します。最小化を定式化したいと思いますが、下記はどうでしょう?

 

f:id:OceanOne:20200304020944j:plain

残念ながら上式は誤差を最小化しません。実測より予測を小さくせよ、という意味になってしまいます。それでは下記はどうでしょう?

f:id:OceanOne:20200304021623j:plain

実測と予測の差を最小化する。正しいです。正しいですが困った事が起こります。誤差=0を境に符号が反転するので、滑らかにつながらず不連続点になります。

f:id:OceanOne:20200304022330j:plain

誤差を二乗すれば、最小化は誤差を0にする方向に働き、不連続点も生まれません。最小二乗法では最小値を求めるために微分を行います。不連続点があると微分できないため不都合が生じます。以上をグラフで示すと下記のようになります。

f:id:OceanOne:20200304024353j:plain

 左から{error}、|error|、(error)^2です。二乗を最小化すれば、微分可能で上手く最小化できます。

最小二乗法による一次近似 - 傾き

誤差項の二乗について書き直すと下記のようになります。これを満たすa、bを求めるためにそれぞれの偏微分が0になる点を求めます。先ほどのグラフで底を打った極値を求めるイメージです。

f:id:OceanOne:20200305013340j:plain

 まず傾きaで偏微分していきます。

f:id:OceanOne:20200305013658j:plain

f:id:OceanOne:20200305014030j:plain

f:id:OceanOne:20200305014208j:plain

f:id:OceanOne:20200305014225j:plain

f:id:OceanOne:20200305014239j:plain

ここで、上式=0とすると下記のようになります。 

f:id:OceanOne:20200305014447j:plain

それぞれ下記のように置き換えると

f:id:OceanOne:20200305014802j:plain

f:id:OceanOne:20200305014813j:plain

f:id:OceanOne:20200305014822j:plain

このようになります。

f:id:OceanOne:20200305015120j:plain

最小二乗法による一次近似 - 切片

次に切片bで偏微分していきます。

f:id:OceanOne:20200305020502j:plain

f:id:OceanOne:20200305020519j:plain

f:id:OceanOne:20200305020550j:plain

f:id:OceanOne:20200305020620j:plain

f:id:OceanOne:20200305020643j:plain

ここでも、上式=0とすると下記のようになります。

f:id:OceanOne:20200305020657j:plain

f:id:OceanOne:20200305020845j:plain

傾きaと同様に下記のように書き換えると

f:id:OceanOne:20200305021042j:plain

f:id:OceanOne:20200305021141j:plain

置き換えた結果は下記でf:id:OceanOne:20200305021233j:plain

最小二乗法による係数の推定値

傾きaと切片bでの偏微分結果をまとめると下記のようになります。

f:id:OceanOne:20200305021438j:plain

f:id:OceanOne:20200305021451j:plain

この2式を連立して解きます。第2式を第1式に代入すると

f:id:OceanOne:20200305022325j:plain

f:id:OceanOne:20200305022348j:plain

f:id:OceanOne:20200305022406j:plain

f:id:OceanOne:20200305022424j:plain

これで切片aを求めることができます。また分散公式を使うことにより下記のように変形できます。

f:id:OceanOne:20200325011936j:plain

さらに本節第2式に上式を代入すると

f:id:OceanOne:20200305022525j:plain

f:id:OceanOne:20200305022541j:plain

f:id:OceanOne:20200305022555j:plain

f:id:OceanOne:20200305022607j:plain

直線近似の切片bも求めることが出来ました。

まとめ

今回は一次近似での最小二乗法を書き下しました。式変形を覚える必要はないですが、偏微分=0で連立方程式を作ることが押さえられていればよいと思います。これを知っていれば変数がいくら増えても対応することが可能です。
また、通常は解析ツールで出力が出てくるので上記手続きを意識することは少ないですが、お使いのソフトがエラー出力した場合など背景技術を知っているとやはり強みになると思います。