最小二乗法(least−squares fitting)
(x,f(x))なる点列にフィットする線(linear fitting of points(x,f(x))
例:
で表される点列を
でfittingさせることを考える。差の二乗を考えてそれが最小となる
を求める。この「差の二乗」を考えるというのが、この方法の名前たるゆえんである。
![E(A,B)=\displaystyle \sum_{i=1}^{m}\left[\left(Ax_{i}+B\right)-y_{i}\right]^{2}](./funda04_images/math004.png)
最小値は、
(合成関数の微分法により)](./funda04_images/math006.png)
行列表現で書けば![\left[\begin{array}{l}\sum_{i=1}^{m}x_{i}^{2} \sum_{i=1}^{m}x_{i}\\\sum_{i=1}^{m}x_{i} 1\end{array}\right]\left[\begin{array}{l}A\\B\end{array}\right]=\left[\begin{array}{l}\sum_{i=1}^{m}x_{i}y_{i}\\\sum_{i=1}^{m}y_{i}\end{array}\right]](./funda04_images/math007.png)
あとは逆行列つかえば
が求まる。
直交回帰を用いた点列にフィットする線(linear fitting of points using orthogonal regression)
以下の議論ではn次元での点列と線を考える。
直線:
は単位ベクトル
点列:
,
,
は
と直交する単位ベクトル,
は適当な係数
を起点として考えると計算がすんなりいきそうなので、
とおく。
こいつを使って、
からこの直線
を法線とする平面への投影は

このベクトルの長さの二乗は 
よって最小化すべきエネルギー関数は 
これは次の二通りの書き方が出来る。
1.
![E(\displaystyle \vec{A},\vec{D})=\sum_{i=1}^{m}(\vec{Y}_{i}^{T}\left[I-\vec{D}\vec{D}^{T}\right]\vec{Y}_{i})](./funda04_images/math022.png)
2.
![\vec{E}(\vec{A},\vec{D})=\vec{D}^{T}\left(\sum_{i=1}^{m}\left[\left(\vec{Y}_{i}\text{・}\vec{Y}_{i}\right)I - \vec{Y}_{i}\vec{Y}_{i}^{T}\right]\right)\vec{D}=\vec{D}^{T}M(A)\vec{D}](./funda04_images/math023.png)
ちょっと補足が必要だろう。
1.は、
を
に代入し、
,
だけで表したもの。
この式変形がわかりにくい人のために少しベクトルの計算をおさらいしておこう。ベクトルは行列の一種なので行列で成り立つものはベクトルでも成り立つが、ベクトル特有の法則がある。
1.
(ただしxの各要素は実数であるとする→複素数に拡張するなら、転置ではなく、複素共役転置ベクトル
を用いて
と書く。複素共役転置ベクトルについても以下の3.の転置に公式とかが使える。しかし、当分関係ないのでこれ以上詳しくは立ち入らない。)
これを使えば、ベクトルの内積を行列の掛け算として書ける。行列の掛け算に変形すれば、行列の掛け算のさまざまな公式を使うことが出来るようになる。行列の掛け算に関する公式は以下のようなもの。
2.
ただし
は行列。
結合則。
3.
,
, 
転置してあるものを展開するのに重要な公式である。
4.
, ただし
は単位行列
は数字の1の行列のやつだと思うとわかりやすい。
5.
ただし cはスカラー。
行列の掛け算に対して交換則。たとえば、
はスカラーなのでこの部分に関しては交換則が成り立つ。例)
ただし、行列においては一般的には交換則は成り立たないことに注意。
6.
の形がベクトルの内積であることから、交換則が成り立つのは明らか。
7.
分配則。このへんは、実数の時のと同じなので説明はいらんでしょう。
よく使うのはそんだけ。これらを使うと、たとえば、
ベクトルの内積の2乗:
などと自在に変形できたりする。行列の結合則から、この
の部分を先に計算することも許されることになる。この
はなんじゃい、というと、これは
が3次元のベクトルなら、
は3×3の行列だ。テンソルなんて呼ばれることもある。
もうちょい練習。
ベクトルの和の2乗:
行列の積の2乗:
行列の和の2乗:
ちょっと前置きが長くなったが、問題の部分、計算してみよう。

行列の積の2乗の形になったので、↑の公式で展開してみる。

ところで
なので

行列の分配則で

ところで、
の部分、結合則から
と計算してもいいはずだ。それで、
は実のところ内積なので
(
は単位ベクトルなので)だったりする。となれば、

てなことになる。
2.のほうは、1.からの変形だ。
を
の外に追い出すように外側に来るように変形する。

(...)
の形でくくってしまいたいのだが、
が邪魔だ。
なので、これをかけても値は変わらない。
あと
はスカラーであることから、この部分で交換則が成り立って、
とか出来てしまう。よって、
![E(\displaystyle \vec{A},\vec{D})=\sum_{i=1}^{m}(\vec{Y}_{i}^{T}\left[I-\vec{D}\vec{D}^{T}\right]\vec{Y}_{i})=\vec{D}^{T}\left(\sum_{i=1}^{m}\left[\left(\vec{Y}_{i}^{T}\vec{Y}_{i}\right)I - \vec{Y}_{i}\vec{Y}_{i}^{T}\right]\right)\vec{D}](./funda04_images/math074.png)
あと、この
の中身はAをパラメータとする行列なのでM(A)と置くと

さて、式変形が終わったところで計算していこう。
1.は
で微分すると
![\displaystyle \frac{\partial E}{\partial A}=\frac{\partial Y}{\partial A}\frac{\partial E}{\partial Y}=-2\left[I-\vec{D}\vec{D}^{T}\right]\sum_{i=1}^{m}\vec{Y}_{i}](./funda04_images/math078.png)
これは
のときは、常に偏微分が0になる。つまり、
, 早い話が点列の重心。
※ このベクトルの微分、少し説明がいるかも知れない。詳しいことはベクトル解析の教科書を見ればいいのだが、
,
(ただし
はスカラ,
はベクトル,
は対称行列)などと
とか
と同じ感覚で計算できることを言っておこう。あと、
は対称行列であることにも注意か。
2.の式で
を与えると
が決まる。
は二次形式なので、この最小値は、
のもっとも小さい固有値である。
※
これを行列Aに関する行列の二次形式(quadratic form)という。「主軸変換」でよく出てくる形だ。計算が簡略になるのでふつうは
が対称行列と仮定する。これを仮定しても一般性を失わないし、これを仮定しないと行列からめて微分する時にややこしいからである。(さっきの
みたいなの) またこれは
の固有ベクトルの方向が主軸となるような回転変換(鏡像変換もこれに含む)である。詳しいことは、線形代数の教科書に書いてある。
のとき、
は
![M(A)=\left(\sum_{i=1}^{m}(x_{i}-a)^{2}+\sum_{i=1}^{n}(y_{i}-b)^{2}\right)\left[\begin{array}{l}1 0\\0 1\end{array}\right]-\left[\begin{array}{l}\sum_{i=1}^{m}(x_{i}-a)^{2} \sum_{i=1}^{m}(x_{i}-a)(y_{i}-b)\\\sum_{i=1}^{m}(x_{i}-a)(y_{i}-b) \sum_{i=1}^{m}(y_{i}-b)^{2}\end{array}\right]](./funda04_images/math100.png)
のときは省略。
直交回帰を用いた点列にフィットする超平面(hyperplanar fitting of points using orthogonal regression)
同様にn次元での平面でフィッティングさせてみる
平面:
点列:
,
,
は
と直交する単位ベクトル,
は適当な係数
よって
最小二乗法のためのエネルギー関数 
さっきの議論と同様、二通りに書けて
1.![E(\displaystyle \vec{A},\vec{N})=\sum_{i=1}^{m}\left(\vec{Y}_{i}^{T}\left[\vec{N}\vec{N}^{T}\right]\vec{Y}_{i}\right)](./funda04_images/math110.png)
2.

1.は
で微分すると
![\displaystyle \frac{\partial E}{\partial A}=-2\left[\vec{N}\vec{N}^{T}\right]\sum_{i=1}^{m}\vec{Y}_{i}](./funda04_images/math114.png)
これは
のときは、常に偏微分が0になる。つまり、
, 早い話が点列の重心。
以下、線にフィットさせる時と同様の議論なので割愛。
円の2次元の点列へのフィッティング(fitting a circle to 2D points)
点列:
, ただしすべての点が同一直線上(collinear)にはないとする。
円:
エネルギー関数は

これが0になるのは、
のとき。


これらが0になるのは、


のとき。
この3つからごちょごちょやれば、


てな非線形の等式が得られるんで、この式で
とかそういうイテレーションで解けるんじゃないかと。
球の3次元の点列へのフィッティング(fitting a sphere to 3D points)
↑の議論とおなじ。結論は



の形になるので、イテレーションで解ける。
二次曲線を2次元の点列にフィッティング(fitting a quadratic curve to 2Dpoints)
点列:
二次曲線:
自由度を減らすため、
は単位長とする。
とおけば、
・
とすれば、エネルギー関数は

とか置くといいだろう。
のときはベストフィットだし、それらしい近似になっているはずだ。
,(↑で定めたので)
行列の二次形式なのでこの最小値は、Mの一番小さい固有値で、
はその固有値に対応する単位長の固有ベクトルとなる。
二次曲線を3次元の点列にフィッティング(fitting a quadratic curve to 3Dpoints)
二次曲線:
以下二次元のとき同様。
参考文献
1.『3DGame EngineDesign』 , David H.Eberly , MORGANKAUFMANNPUBLISHERS ,ISBN1−55860−593−2.
2.多変量解析の教科書いろいろ。(;´Д`)