3点から最小二乗法で直線 y = a*x + b を求める
(1) 与えられた3点
(x1, y1)
(x2, y2)
(x3, y3)
(2) 傾き a の式
a = ( nΣ(xy) - ΣxΣy ) / ( nΣ(x^2) - (Σx)^2 )
n = 3
展開形:
a = [ 3*(x1y1 + x2y2 + x3y3) - (x1 + x2 + x3)(y1 + y2 + y3) ]
/ [ 3*(x1^2 + x2^2 + x3^2) - (x1 + x2 + x3)^2 ]
(3) 切片 b の式
b = ( Σy - aΣx ) / n
b = [ (y1 + y2 + y3) - a(x1 + x2 + x3) ] / 3
(4) 最小二乗直線の式
y = a*x + b
(5) 行列表現
[ y1 ] [ x1 1 ] [ a ]
[ y2 ] = [ x2 1 ] [ b ]
[ y3 ] [ x3 1 ]
これを一般に
y = X*θ
θ = [a, b]^T
と表す。
(6) 最小二乗法の解(正規方程式)
θ = (X^T * X)^(-1) * X^T * y
(7) 行列の中身
X^T * X =
[ (x1^2 + x2^2 + x3^2) (x1 + x2 + x3) ]
[ (x1 + x2 + x3) 3 ]
X^T * y =
[ (x1y1 + x2y2 + x3*y3) ]
[ (y1 + y2 + y3) ]
(8) よって
[ a ] [ (x1^2 + x2^2 + x3^2) (x1 + x2 + x3) ]^(-1) [ (x1y1 + x2y2 + x3*y3) ]
[ b ] = [ (x1 + x2 + x3) 3 ] [ (y1 + y2 + y3) ]
(9) 結果
上記の a, b を求めることで、3点に対して誤差二乗和が最小となる直線
y = a*x + b
が得られる。