2018年6月12日火曜日

正規方程式の導出と計算例

A⊤A が正則なとき,‖Ax−b‖ を最小にする x はただ一つであり,それは正規方程式:A⊤Ax=A⊤b を解くことで得られる。
前半は正規方程式を用いた最小二乗法の計算の具体例。後半は正規方程式の導出。

最小二乗法と正規方程式

  • x,b は縦ベクトル,A は行列です。 ‖x‖ はベクトル x の長さを表します。
  • A と b が与えられたとき,‖Ax−b‖ を最小にするような x を求める問題は非常に重要です。→最小二乗法の行列表現(単回帰,多変数,多項式)
  • 連立方程式 Ax=b が解を持つときは嬉しいけども,解を持たない時にも諦めるのではなく,Ax が b に近くなるような x を探したいというモチベーションです。
  • 正規方程式は,Ax=b の両辺に左から A⊤ をかけただけなので覚えやすいです。

正規方程式を用いた計算例

例題

(2,3),(4,7),(9,11) というデータの組に対して最小二乗法を適用してもっともらしい直線を引け。

解答

求める直線の傾きを p,切片を q とおくと,以下のように行列表現できる:
目標:‖Ax−b‖ を最小にする x=(pq) を求める。
ただし,A=(214191),b=(3711)
よって,答えは正規方程式を解くことにより,
x=(A⊤A)−1A⊤b=(14132113)
求める直線の方程式は y=1413x+2113

正規方程式の導出

考え方は非常に単純です。凸な二次関数なので微分して=0 とするだけです。ただし,計算は慣れていないとやや大変です(行列の基本的な演算や微分公式を用いる)。
(正規方程式の導出)
まず,目的関数の二乗 ‖Ax−b‖2 を整理する:
‖Ax−b‖2=(Ax−b)⊤(Ax−b)=(x⊤A⊤−b⊤)(Ax−b)=x⊤A⊤Ax−2x⊤A⊤b+b⊤b
ただし,最後の変形で補足1を用いた。
これを x で微分する(各要素で偏微分する,つまり勾配ベクトルを求める→補足2)と,2A⊤Ax−2A⊤b となる。よって,‖Ax−b‖ が最小となる必要条件として,A⊤Ax=A⊤b が得られる。
特に,A⊤A が正則なときは,x=(A⊤A)−1A⊤b が唯一の解であり,この x が最小値を与える。
補足1:b⊤Ax はスカラーなので,転置を取っても同じ。つまり,b⊤Ax=x⊤A⊤b
補足2:対称行列 A に関する二次形式 x⊤Ax の微分(勾配ベクトル)は 2Ax,
線形関数 x⊤A⊤b の微分は A⊤b
(単純計算で簡単に証明できる)

0 件のコメント:

コメントを投稿