最小二乗法　〜平均線関数と見え方の違い〜

# はじめに
誤差を含むデータを観測した際、そのデータ群の近似曲線を求めるときにまず使用する基本の **「最小二乗法」** について基本を記載します。

最小二乗法がどんなものなのか、使う際の注意などを最初に書いているので、導出や計算式だけ手っ取り早く知りたい方は、後ろの「関数導出計算」に飛んでください。



# 最小二乗法とは
大学時代、レポートを書く時に最小二乗法を多用していました。
その時は、

　「データをいい感じに近似する直線を引くのが最小二乗法」

としか思っていませんでした。
なので、$ax+b$ の係数 $a, b$ を

```math
\begin{eqnarray}
a &=& \frac{\sum{(y_i - \bar{y})(x_i - \bar{x}) }}{ \sum{(x_i - \bar{x})^2} } \\
 &=& \frac{ \sum{x_i y_i} - \frac{1}{n}(\sum{x_i})(\sum{y_i}) }{ \sum{x_i^2} - \frac{1}{n}(\sum{x_i})^2 } \\
\\
b &=& \bar{y} - a \bar{x} \\
&=& \bar{y} - \bar{x} \cdot \frac{\sum{(y_i - \bar{y})(x_i - \bar{x}) }}{ \sum{(x_i - \bar{x})^2} } \\
&=& \frac{ \frac{1}{n} \left\{ \sum{x_i^2} \sum{y_i} - \sum{x_i y_i} \sum{x_i} \right\} }{ \sum{x_i^2} - \frac{1}{n}(\sum{x_i})^2 }
\end{eqnarray}
```

という計算式に放り込んで機械的に求めて直線を描画していました。
今はこんな式を計算するまでもなく、Excelでクリックだけで描画できますね。
便利です。

実際最小二乗法は、このようなデータが比例関係にあるような場合に使われることが多かったように思います。
しかし、最小二乗法は 「ただよしなな直線を引く」 ためだけのものではありません。
もっと多様な応用ができる手法です。

## 相加平均の拡張
　**「最小二乗法とはなにか」**
と言われたら、私は
　**「拡張された相加平均である」**
と答えます。
相加平均はよくご存じの

```math
\bar{x} = \frac{x_1 + x_2 + \cdots + x_n}{n} = \frac{1}{n} \sum_{i=1}^{n}{x_i}
```
の事です。
ここで説明変数を x、目的変数を y としたとき、

　**相加平均を x の関数にしたもの**

が最小二乗法によって求められる関数になります。
なので、最小二乗法で得られた関数と各データの y の値の差を合計すると ０（ゼロ） になります。

```math
\sum_{i=1}^{n}{ \left( f(x_i) - y_i \right )} = 0
```
試してみてください。
（この場合、正確には最小二乗法で求める関数に切片項（定数項）がなければならず、切片項がない場合にはかならずしもゼロにはなりません）

最小二乗法は得られたデータの **関数版相加平均** を求めているわけなのです。

詳しくは前に書いた記事がこちらにありますので、興味のある方は読んでみてください。

https://qiita.com/khidaka/items/36bf08b68358cdb8a7ed

## 平均線関数による違い
最小二乗法で求められる関数は相加平均の拡張だと言いました。
なのでここでは便宜上、最小二乗法で求められる関数のことを **「平均線関数」** と呼ぶことにします。

さて、最小二乗法において大事な前提の一つに

　**平均線関数は既知の関数の線形結合で表される**

というものがあります。
式で書けば、

```math
f(x) = \sum_{i=0}^{n}{a_i g_i(x)}
```
を前提とします、ということです。
この $g_i(x)$ たちが既知の関数というわけです。
ここで $n=1$、$g_0(x) = x^0$、$g_1(x) = x^1$ とすると、平均線関数は先の一次関数 $f(x) = a_0 + a_1 x = ax + b$ になります。

ここで、$g_i(x)$ には既知の関数なら何を想定しても構いません。
最小二乗法はこれらの $g_i(x)$ は一切触らず、これにかかる係数 $a_i$ を求める方法だからです。
既知の関数の寄与度を求める方法とも言えます。

ではイメージをつかむ為に、$g_i(x)$ に既知の関数を具体的に入れるとグラフの見た目的にどうなるのか見ていきましょう。
視覚的に見れば、どういうことを言っているのか理解しやすくなります。

今回、このデータに対して既知関数を変化させて平均線関数を描画していきましょう。

|  | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| x | 0.000000 | 1.111111 | 2.222222 | 3.333333 | 4.444444 | 5.555556 | 6.666667 | 7.777778 | 8.888889 | 10.000000 |
| y | 1.516864 | 3.151712 | 3.208873 | 3.382289 | 2.420594 | 5.507440 | 7.587737 | 9.622711 | 11.497052 | 10.816096 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/efca69ea-5486-fa80-9398-77ac62264289.png)

### n次多項式
平均値関数がn次多項式の場合をみてみます。
全部は描けないので１次多項式から６次多項式までを描画してみます。
既知関数を
```math
\begin{eqnarray}
g_0(x) &=& x^0 \\
g_1(x) &=& x^1 \\
g_2(x) &=& x^2 \\
 &\vdots& \\
g_n(x) &=& x^n

\end{eqnarray}
```
とした場合です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/cf057dc4-d44d-4480-616b-959a3b2b3c02.png)


次数が上がるにつれて曲線の曲がりが多くなり、データ点により近づいていくのが分かります。

これらの曲線は見た目は違いますが、全部　**「データ点と曲線の差の合計が０（ゼロ）になる平均曲線」** です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/8b9fdde6-0f1c-2ae8-4c3d-39c99de8ece5.png)

>　データ点のｙとf(x)の差（青の線）を全部足すと０（ゼロ）になります。

ただの相加平均と違い、平均曲線（平均線関数）は無限にあります。
なので、どのような平均曲線を想定するかはデータを処理する側に責任があります。
それには、取ったデータの背景にある物理現象を想定する必要があります。
（比例関係にある、二次関係にある、など）

では次に x の n乗 でない関数の場合も見てみます。


### 三角関数

三角関数で平均線関数を構成するとどうなるか確認してみます。
#### a + b cos(x)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/27c5c88a-3b8d-a0ec-2849-a1473ad50060.png)

#### a + b sin(x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/ce23fedb-370d-fb9b-605c-03d224cfdafa.png)

#### a + b cos(x) + c sin(x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/414e6ed4-e1d3-1b03-89b8-bfca3176dd10.png)

どれも全然平均の曲線っぽくないですね。
でも、これも平均曲線です。
なので曲線とデータ点との差の合計は０（ゼロ）です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/4e3275cd-664a-3fc5-dbbf-5e882c0b1c36.png)

### 指数・対数関数
指数関数と対数関数で平均線関数を構成したらどうなるか見てみます。

#### a + b exp(x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/6bf8c7da-912c-82e3-85a8-24eb5e01f9d0.png)

#### a + b log(x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/fa78f410-caa6-8e8f-3515-d0ff8718101d.png)

### a + b exp(x) + c log(x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/da773539-c5c6-a140-7572-dd7e9167de8d.png)

全然平均っぽくない、というより、全然データと関係ない曲線に見えます。
まだ $a + b \ e^x + c \ \rm{log}(x)$ はデータに沿ってる感じですが、それでも関係あるようには見えづらいです。

しかしこれらもやはり平均曲線です。
なので、曲線との差を全部足すとやっぱり０（ゼロ）になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/e3e9c10e-86f7-ab00-7bc1-eb84f2d8c8a1.png)


もうすこし見てみます。
今度は関数を多項式として組み合わせてみます。

### 組み合わせ
#### a + bx + c cos(x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/3eedadf9-34f9-4409-f6d9-c4ba637d7ac7.png)

#### a + bx + cx^2 + d sin(x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/99d46889-2794-b2b0-7913-7c6373bd7ec5.png)

#### a + b cos(x) + c exp(x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/2242f2a0-d498-33d8-850c-a0281b2bc08a.png)

#### a + bx + cx^2 + d sin(x) + e log(x)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/7ede3e0d-8dae-abc6-ffdb-629e04fadb68.png)

よさげだったり、全然違う感じになったりいろいろです。

何度も書きますが、大切なことは
　 <font color="red">**これらの曲線全部が相加平均の拡張という点で同格である**</font> 
ということです。
　**曲線と各データ点の差の総和を取ると０（ゼロ）になります。** 

このようにグラフにすると見た感覚で「よい」「わるい」と判断できますが、「相加平均の拡張条件を満たす」という判定条件においては同格で「よい、わるい」の判断はつかないわけです。
これは視覚グラフ化できない高次元において「よい、わるい」を判断するときに非常に重要な点です。
最小二乗法も高次元版を考えることができますが、最小二乗法に限らず、良し悪しの判定条件というのは「本当にその判定条件で意図した判定ができるのか」ということをいろいろな極端な場合を考えたりして吟味する必要があります。

話を戻しますが、これらの結果をみると、いかに

　**データの後ろにどのような関係を想定するか**

が大切であることがわかります。
この最小二乗法の場合、**想定する関係** とは、**平均線関数にどのような多項式を当てはめるか** になります。

　〇　なんでもかんでも１次多項式（比例関係）
　〇　とりあえず高次多項式

などとはせず、ちゃんとデータの後ろの現象を考察して当てはめをしなければなりません。

### 今回のデータの正解
さて、今回使ったデータの正解のモデル式は以下でした。

```math
 f(x) = 2 + 0.1x^2 + 1.5 \ {\rm sin}(x) + \varepsilon
```
$\varepsilon$ は 平均０、標準偏差0.7 （記号で書けば N(0, 0.49) ）の正規分布に従うノイズです。
この正解のモデル式をつかって最小二乗法で平均線関数を求めるとどうなるか見てみます。

```math
\begin{eqnarray}
g_0(x) &=& x^0 \\
g_1(x) &=& x^2 \\
g_2(x) &=& {\rm sin}(x)
\end{eqnarray}
```
と当てはめた場合ということです。
結果は以下です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151958/5bfb7242-bf89-8a73-fe38-ea209f4aaf8f.png)

赤の線が最小二乗法で求めた平均値関数、青の点線がノイズを除いた正解の関数　$f(x) = 2 + 0.1x^2 + 1.5 \ {\rm sin}(x)$ の線です。

　定数項の値 2 に対して 2.0627
　$x^2$の係数 0.1 に対して 0.1037387
　sin(x)の係数 1.5 に対して 1.309643

正しいモデル式を平均線関数に想定した為、かなり正しく正解の関数を推定できています。
平均線関数を想定するということは、データの後ろにある物理現象や経済現象を引き起こしている法則を推察するということです。
正しく現象を推察できれば、かなり正しく関数を推定できることが分かると思います。


###
想定する多項式の違いによって、出てくる平均線関数がどう変わるかを見ました。
これで、最小二乗法というものがどんなものなのか、なんとなくでもわかって頂けたらよかったと思います。



# 関数導出計算
最小二乗法がどんなものか分かったところで、導出を記載します。

## 前提・出発点
最小二乗法による導出にあたり、前提とする条件が以下です。

　〇　観測データ y は、モデル関数（現象を表す正解の関数と想定する関数） $f(x)$ と正規分布に従う誤差 $\varepsilon$ との和で表される。
```math
 y = f(x) + \varepsilon
```
　〇　モデル関数は既知の関数 $g_i(x)$ の線形結合で表される。
```math
 f(x) = \sum_{i=1}^{m} a_i g_i(x)
```

この条件の元、モデル関数 $f(x)$ から各データ y を引いた値の二乗和を最小にするような $f(x)$ を求めます。
```math
J = \sum_{i=1}^{n} (f(x_i) - y_i)^2
```
この J を最小にします。
この「差の二乗和を最小にする」というところが誤差が正規分布に従うということを想定していることになるのですが、そのあたりは別の解説しているところに説明をお任せします。

ちなみに、今回は
　m は多項式の項数
　n はデータの個数
を示します。

:::note info
添え字ですが、０から始めても１から始めても結果は同じになるのでどちらでもよいです。
記述の都合上、１からの方が書きやすいので今回は１からのスタートとします。
（０からにすると、m+1、n+1 が出てくるので記述が煩雑になる）
:::

ここを出発点として多項式の係数を以下求めていきます。


## 係数の導出
J を最小にするところから始めます。

J を関数とみると、$y, g_i(x)$ は既知なので（$g_i(x)$ は自分で想定して決める）未知変数は m 個の係数 $a_1, a_2, \cdots, a_m$ になります。
J は二乗の関数で二乗の係数は１なので下に凸となります。
なので、極値＝最小値です。
各係数を変数とみて、それぞれの極値を同時に満たす $f(x)$ を求めればよいので、J を各変数で偏微分して０と置けばそれが求まります。
（微分して０の点は関数の極値になります。今回の場合は最小値。Ｊ は係数の関数とみなしているので、多変数関数かつ下に凸の関数。なので偏微分して全部がゼロを満たす点が多変数関数Ｊの最小値になります）

$a_1, a_2, \cdots, a_m$ の m 個全部に対して偏微分をしますが、形は全部同じになるので、代表して $k$ を使うと、
```math
\begin{eqnarray}
\frac{\partial J}{\partial a_k}
&=&
\frac{\partial}{\partial a_k}\left\{\sum_{i=1}^{n}(f(x_i)-y_i)^2\right\} \\
&=&
\frac{\partial}{\partial a_k}\left\{\sum_{i=1}^{n}\left(\sum_{j=1}^{m}a_jg_j(x_i)-y_i\right)^2\right\} \\
&=&
2\sum_{i=1}^{n}\left(\sum_{j=1}^{m}a_jg_j(x_i)-y_i\right)\frac{\partial}{\partial a_k}\left(\sum_{j=1}^{m}a_jg_j(x_i)-y_i\right) \\
&=&
2\sum_{i=1}^{n}\left(\sum_{j=1}^{m}a_jg_j(x_i)-y_i\right)g_k(x_i) \\
&=&
2\sum_{i=1}^{n}\sum_{j=1}^{m}a_jg_j(x_i)g_k(x_i)-2\sum_{i=1}^{n}y_ig_k(x_i) \\
&=&
0 \\
\\
∴　&&\sum_{i=1}^{n}\sum_{j=1}^{m}a_jg_j(x_i)g_k(x_i)=\sum_{i=1}^{n}y_ig_k(x_i)

\end{eqnarray}
```

$k$ には１からｍ の値が順に入るので、これは m個 の連立方程式になります。

```math
\begin{eqnarray}

\sum_{i=1}^{n}\sum_{j=1}^{m} a_j g_j(x_i) g_1(x_i) &=& \sum_{i=1}^{n} y_i g_1(x_i) \\
\sum_{i=1}^{n}\sum_{j=1}^{m} a_j g_j(x_i) g_2(x_i) &=& \sum_{i=1}^{n} y_i g_2(x_i) \\
\sum_{i=1}^{n}\sum_{j=1}^{m} a_j g_j(x_i) g_3(x_i) &=& \sum_{i=1}^{n} y_i g_3(x_i) \\
 & \vdots & \\
\sum_{i=1}^{n}\sum_{j=1}^{m} a_j g_j(x_i) g_m(x_i) &=& \sum_{i=1}^{n} y_i g_m(x_i) \\

\end{eqnarray}
```

連立方程式なので、これを行列表記に直してやります。
まず右辺から。

```math
\begin{eqnarray}
\sum_{i=1}^{n} y_i g_k(x_i) &=& y_1 g_k(x_1) + y_2 g_k(x_2) + \cdots + y_n g_k(x_n) \\
&=& 
\begin{bmatrix}
y_1 & y_2 & \cdots & y_n
\end{bmatrix}
\begin{bmatrix}
g_k(x_1) \\
g_k(x_2) \\
\vdots \\
g_k(x_n)
\end{bmatrix} \\
&=&
\begin{bmatrix}
g_k(x_1) & g_k(x_2) & \cdots & g_k(x_n)
\end{bmatrix}
\begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_n
\end{bmatrix} \\
\end{eqnarray}
```

であることを思い出せば、

```math
\begin{eqnarray}
\begin{bmatrix}
 \sum_{i=1}^{n} y_i g_1(x_i) \\
 \sum_{i=1}^{n} y_i g_2(x_i) \\
 \sum_{i=1}^{n} y_i g_3(x_i) \\
  \vdots \\
 \sum_{i=1}^{n} y_i g_m(x_i) \\
\end{bmatrix}
&=&
\begin{bmatrix}
g_1(x_1) & g_1(x_2) & \cdots & g_1(x_n) \\
g_2(x_1) & g_2(x_2) & \cdots & g_2(x_n) \\
 \vdots & \vdots & \ddots & \vdots \\
g_m(x_1) & g_m(x_2) & \cdots & g_m(x_n) \\
\end{bmatrix}
\begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_n
\end{bmatrix} \\

\end{eqnarray}
```

次に左辺。

```math
\scriptstyle{
\begin{eqnarray}
\begin{bmatrix}
\sum_{i=1}^{n}\sum_{j=1}^{m} a_j g_j(x_i) g_1(x_i) \\
\sum_{i=1}^{n}\sum_{j=1}^{m} a_j g_j(x_i) g_2(x_i) \\
\vdots \\
\sum_{i=1}^{n}\sum_{j=1}^{m} a_j g_j(x_i) g_m(x_i)
\end{bmatrix}
&=&
\begin{bmatrix}
g_1(x_1) & g_1(x_2) & \cdots & g_1(x_n) \\
g_2(x_1) & g_2(x_2) & \cdots & g_2(x_n) \\
 \vdots & \vdots & \ddots & \vdots \\
g_m(x_1) & g_m(x_2) & \cdots & g_m(x_n) \\
\end{bmatrix}
\begin{bmatrix}
\sum_{j=1}^{m} a_j g_j(x_1) \\
\sum_{j=1}^{m} a_j g_j(x_2) \\
\vdots \\
\sum_{j=1}^{m} a_j g_j(x_n)
\end{bmatrix} 
\\
&=&
\begin{bmatrix}
g_1(x_1) & g_1(x_2) & \cdots & g_1(x_n) \\
g_2(x_1) & g_2(x_2) & \cdots & g_2(x_n) \\
 \vdots & \vdots & \ddots & \vdots \\
g_m(x_1) & g_m(x_2) & \cdots & g_m(x_n) \\
\end{bmatrix}
\begin{bmatrix}
g_1(x_1) & g_2(x_1) & \cdots & g_m(x_1) \\
g_1(x_2) & g_2(x_2) & \cdots & g_m(x_2) \\
 \vdots & \vdots & \ddots & \vdots \\
g_1(x_n) & g_2(x_n) & \cdots & g_m(x_n) \\
\end{bmatrix}
\begin{bmatrix}
a_1 \\
a_2 \\
\vdots \\
a_m
\end{bmatrix}

\end{eqnarray}
}
```
行列は大文字アルファベット、ベクトルは太文字小文字アルファベットで表すのが通例なので、

```math
\begin{eqnarray}
G &=& \begin{bmatrix}
g_1(x_1) & g_2(x_1) & \cdots & g_m(x_1) \\
g_1(x_2) & g_2(x_2) & \cdots & g_m(x_2) \\
 \vdots & \vdots & \ddots & \vdots \\
g_1(x_n) & g_2(x_n) & \cdots & g_m(x_n) \\
\end{bmatrix}
\\
\boldsymbol{a} &=& 
\begin{bmatrix}
a_1 \\
a_2 \\
\vdots \\
a_m
\end{bmatrix}
\\
\boldsymbol{y} &=&
\begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_n
\end{bmatrix}

\end{eqnarray}
```
とすると、この連立方程式は

```math
G^{t} G \boldsymbol{a} = G^{t} \boldsymbol{y} 
```
と表すことができます。
これは　**正規方程式** と呼ばれます。
$G^{t} G$ は $m \times m$ の正方行列になるので、これが正則ならば逆行列が存在します。
この中身は任意に選んだ既知関数 $g_j(x)$ なので、関数の選び方を工夫すれば正則になります。
具体的には、$g_j(x)$ が互いに一次独立なように関数を選ぶと正則になります。
（まれに得られたデータの値と既知関数の選び方によって正則にならない時がありますが、まずないです）
なので、逆行列を使って、

```math
\boldsymbol{a} =　(G^{t} G)^{-1} G^{t} \boldsymbol{y} 
```
これで各既知関数の係数が全て求められました。
あとは求められた係数を使って平均値関数を構成し、データ点と一緒に平均線関数のグラフを描画するだけです。

##
以上が最小二乗法によって平均線関数を求める方法です。
後半の導出に関しては特に面白いところはありませんが、前半の
　
　最小二乗法で求める平均線関数はどんなものなのか

というところを分かってもらえたらと思います。


# 平均値関数との差がゼロになる証明
これはおまけとして記載しておきます。
ずっと「平均線関数」と言ってきましたが、本当に最小二乗法で得られる関数が「平均」の拡張なのか、そのことを記載しようと思います。
おまけなので、今までよりはサラッと行きます。

## 相加平均
　⚪︎ 相加平均
　⚪︎ 各値からの差の合計が０（ゼロ）になる値
この２つは必要十分条件です。

以下証明。
【相加平均】　→ 【差の合計が０になる値】
```math
\begin{eqnarray}
\mu &=& \frac{1}{n}\sum_{i=1}^{n} x_i \\
\\
\sum_{i=1}^{n} (x_i - \mu) &=& \sum_{i=1}^{n} (x_i - \frac{1}{n}\sum_{j=1}^{n} x_j ) \\
&=& \sum_{i=1}^{n} x_i - \sum_{i=1}^{n} \left ( \frac{1}{n}\sum_{j=1}^{n} x_j \right ) \\
&=& \sum_{i=1}^{n} x_i - n \cdot \left ( \frac{1}{n}\sum_{j=1}^{n} x_j \right ) \\
&=& \sum_{i=1}^{n} x_i - \sum_{j=1}^{n} x_j \\
&=& 0

\end{eqnarray}
```

【差の合計が０になる値】　→ 【相加平均】

```math
\begin{eqnarray}
\sum_{i=1}^{n} (x_i - \mu) &=& 0 \\
\sum_{i=1}^{n} x_i - \sum_{i=1}^{n} \mu &=& 0 \\
\sum_{i=1}^{n} x_i - n \cdot \mu &=& 0 \\
\\

\therefore \quad \mu = \frac{1}{n}\sum_{i=1}^{n} x_i \\

\end{eqnarray}
```

証明終わり。

これで、
　⚪︎ 差の合計が０になる値は相加平均
　⚪︎ 相加平均との差の合計は０になる
ということが証明されました。

## 最小二乗法で求めた関数とデータ値との関係
### 最小二乗法で求めた関数とデータ値との差の合計
これは上記の
　【相加平均】　→ 【差の合計が０になる値】
に該当します。

最小二乗法で求めた関数を以下とします。
```math
f(x) = \sum_{i=1}^{m} a_i g_i(x) \\
```
なお、この関数は定数項を持つとします。つまり、
```math
\begin{eqnarray}
f(x) &=& \sum_{i=1}^{m} a_i g_i(x) \\
&=& a_1 + \sum_{i=2}^{m} a_i g_i(x)
\end{eqnarray}
```
この関数との差の合計を求めます。

```math
\small{
\begin{eqnarray}
\sum_{i=1}^{n} (f(x_i) - y_i) &=& \sum_{i=1}^{n} f(x_i) - \sum_{i=1}^{n} y_i \\
&=& \sum_{i=1}^{n} \sum_{j=1}^{m} a_j g_j(x_i) - \sum_{i=1}^{n} y_i \\
&=&
\begin{bmatrix}
1 & 1 & \cdots & 1
\end{bmatrix}
\begin{bmatrix}
g_1(x_1) & g_2(x_1) & \cdots & g_m(x_1) \\
g_1(x_2) & g_2(x_2) & \cdots & g_m(x_2) \\
\vdots & \vdots & \ddots & \vdots \\
g_1(x_n) & g_2(x_n) & \cdots & g_m(x_n)
\end{bmatrix}
\begin{bmatrix}
a_1 \\ a_2 \\ \vdots \\ a_m
\end{bmatrix}

-

\begin{bmatrix}
1 & 1 & \cdots & 1
\end{bmatrix}
\begin{bmatrix}
y_1 \\ y_2 \\ \vdots \\ y_n
\end{bmatrix}
\\
&=& \boldsymbol{e}^{t} G \boldsymbol{a} - \boldsymbol{e}^{t} \boldsymbol{y} \\
&=&  \boldsymbol{e}^{t} (G \boldsymbol{a} - \boldsymbol{y})

\end{eqnarray}
}
```
次に最小二乗法で求めた関数 $f(x)$ の係数に対する関係式である正規方程式を変形すると、

```math
\begin{eqnarray}
G^{t} G \boldsymbol{a} &=& G^{t} \boldsymbol{y} \\
G^{t} G \boldsymbol{a} - G^{t} \boldsymbol{y} &=& O \\
G^{t} ( G \boldsymbol{a} - \boldsymbol{y} ) &=& O
\end{eqnarray}
```
ここで $（G \boldsymbol{a} - \boldsymbol{y}）$ は関数とデータとの差の縦ベクトルです。
なので一般的には零ベクトルではありません。
さらに、$G^{t}$ も零行列ではありません。

```math
\begin{eqnarray}
(G \boldsymbol{a} - \boldsymbol{y}) &\neq& O \\
G^{t} &\neq& O
\end{eqnarray}
```

よって、この２つの行列は互いに零因子です。
したがって、縦ベクトル $（G \boldsymbol{a} - \boldsymbol{y}）$ は $G^{t}$ のどの行ベクトルとも直交します。
$G^{t}$　の行ベクトルは互いに一次独立だから、これらの行ベクトルが張るベクトル空間 $V$ の直行補空間 $V^{\perp}$ は縦ベクトル $（G \boldsymbol{a} - \boldsymbol{y}）$ を含みます。

```math
（G \boldsymbol{a} - \boldsymbol{y}） \in V^{\perp}
```
さて最初に求めた $\boldsymbol{e}^{t} (G \boldsymbol{a} - \boldsymbol{y})$ ですが、この値がどうなるのかは $\boldsymbol{e}$ がどのベクトル空間に属しているかによります。

今、最小二乗法で求めた関数 $f(x)$ は定数項を持つ前提で話を進めてきました。
定数項は
```math
\begin{eqnarray}
\begin{matrix}
f(x) &=& a_1 g_1(x) & + & a_2 g_2(x) & + & \cdots \\
&=& a_1 \cdot x^0 & + & a_2 g_2(x) & + & \cdots \\
&=& a_1 \cdot 1 & + & a_2 g_2(x) & + & \cdots \\
&=& a_1 & + & a_2 g_2(x) & + & \cdots
\end{matrix}
\end{eqnarray}
```
と表されるので、$g_1(x) = 1$ であり、$G^{t}$ は

```math
G^{t} = 
\begin{bmatrix}
1 & 1 & \cdots & 1 \\
g_2(x_1) & g_2(x_2) & \cdots & g_2(x_n) \\
\vdots & \vdots & \ddots & \vdots \\
g_m(x_1) & g_m(x_2) & \cdots & g_m(x_n)
\end{bmatrix}
```

となるので、第一行の行ベクトルは
```math
\begin{bmatrix}
1 & 1 & \cdots & 1
\end{bmatrix}
```
です。
$\boldsymbol{e}$ は、

```math
\boldsymbol{e} = 
\begin{bmatrix}
1 \\ 1 \\ \vdots \\ 1
\end{bmatrix}
```
なので、この第一行の行ベクトルは $\boldsymbol{e}^{t}$ と一致。
すなわち、$\boldsymbol{e}$　は　$G^{t}$ の行ベクトルが張るベクトル空間 $V$ に属します。
```math
\boldsymbol{e} \in V
```
一方、$（G \boldsymbol{a} - \boldsymbol{y}）$　は $V$ の直行補空間 $V^{\perp}$ に属しているので、

```math
（G \boldsymbol{a} - \boldsymbol{y}） \in V^{\perp}
```
このことから $\boldsymbol{e}$ と $（G \boldsymbol{a} - \boldsymbol{y}）$ は直行することがわかります。

```math
\boldsymbol{e} \perp （G \boldsymbol{a} - \boldsymbol{y}）
```
したがって、この２つのベクトルの内積は０（ゼロ）。

```math
\boldsymbol{e}^{t} (G \boldsymbol{a} - \boldsymbol{y}) = 0
```
これで、最小二乗法で求めた関数 $f(x)$ と各データの y 座標の差の合計が0（ゼロ）になることが証明できました。

```math
\begin{eqnarray}
\boldsymbol{e}^{t} (G \boldsymbol{a} - \boldsymbol{y}) &=& \sum_{i=1}^{n} (f(x_i) - y_i) \\
&=& 0
\end{eqnarray}
```


### データ値との差の合計が０（ゼロ）になる関数
これは先の
　【差の合計が０になる値】　→ 【相加平均】
に該当します。


関数は以下で表されるとし、定数項を持つとします。
```math
\begin{eqnarray}
f(x) &=& \sum_{i=1}^{m} a_i g_i(x) \\
&=& a_1 + \sum_{i=2}^{m} a_i g_i(x)
\end{eqnarray}
```
また、既知の関数 $g_i(x)$ は互いに一次独立であるとします。
この関数とデータ値との差を0（ゼロ）とします。

```math
\begin{eqnarray}
\sum_{i=1}^{n} (f(x_i) - y_i) &=& \boldsymbol{e}^{t} (G \boldsymbol{a} - \boldsymbol{y}) \\
&=& 0　 \\

\end{eqnarray}
```

この式を満たすような $\boldsymbol{a}$ が求まれば関数 $f(x)$ が決まります。

が。
残念ながらここまでです。
これを満たすような関数は最小二乗法で求められる関数以外にも無数にあるからです。
すなわち、必要十分条件ではありません。

一つ前で最小二乗法で求めた関数との差の合計がゼロになることは証明できているので、これは

　**「最小二乗法で求めた関数」は「関数との差の合計がゼロ」であることの十分条件**

です。
逆は成り立ちません。


十分条件なので、範囲を適切に狭めてやれば（条件を適切に課してやれば）最小二乗法で求めた関数を導くことはできます。

$\boldsymbol{e}$ と $(G \boldsymbol{a} - \boldsymbol{y})$ はベクトルでかつ直行しているので、

　⚪︎　$\boldsymbol{e}$ を含みかつ $(G \boldsymbol{a} - \boldsymbol{y})$ と直行するベクトル空間を張る基底ベクトルを行に持つ行列

の中から係数ベクトル $\boldsymbol{a}$ を求めることができる行列を選ぶと導くことができます。
そのような行列は $G^{t}$ になります。
$G^{t}$ を $\boldsymbol{e}$ と取り替えると、

```math
G^{t}(G \boldsymbol{a} - \boldsymbol{y}) = O
```
この式は
```math
\boldsymbol{e}^{t}(G \boldsymbol{a} - \boldsymbol{y}) = 0
```
を満たします。
```math
G^{t}(G \boldsymbol{a} - \boldsymbol{y}) = O 
\implies　
\boldsymbol{e}^{t}(G \boldsymbol{a} - \boldsymbol{y}) = 0
```
ここで十分条件であることが再度確認できます。
ここが「範囲を狭める」ことに該当します。

取り替えた式を変形すると
```math
\begin{eqnarray}
G^{t}(G \boldsymbol{a} - \boldsymbol{y}) &=& O \\
G^{t} G \boldsymbol{a} &=& G^{t} \boldsymbol{y}
\end{eqnarray}
```
これは正規方程式なので、最小二乗法で求めた式と同じものが求まります。



# おわり
最小二乗法が相加平均の拡張であるという話と、平均線関数の求め方、相加平均の拡張であるという証明を行いました。
何かの役に立てれば幸いです。

間違いなどあればお知らせ頂ければありがたく思いいます。

よろしくお願いいたします。