更新:2025/05/18

最小二乗法と行列、正規方程式について

最小二乗法は「たくさんあるデータ点を、なるべくズレの小さい数式モデルで説明したい」ときに不可欠な手法です。本記事では 「行列」で最小二乗法を整理し、数式が苦手な方でも追えるよう丁寧にまとめました。

1. 最小二乗法とは何か

1.1.  問題設定

  • 観測データ(長さ m の列ベクトル)$$ \mathbf{y} = \begin{bmatrix} y_1 \\ \vdots \\ y_m \end{bmatrix} $$
  • モデル行列(サイズ m×n)$$ A = \begin{bmatrix} a_{11}&\dots&a_{1n}\\ \vdots & &\vdots\\ a_{m1}&\dots&a_{mn} \end{bmatrix} $$
  • 求めたいパラメータ(長さ n の列ベクトル) $\mathbf{x} = [x_1,\dots,x_n]^\mathsf{T}$

式で書くと

$$ A\,\mathbf{x} \;\approx\; \mathbf{y} $$

「行(= データ点)の数が列(= パラメータ)の数より多い」ため、通常はピッタリ解けません。

はるか
はるか
ずれが出るのは当たり前。完全一致はしない。
ふゅか
ふゅか
うん、観測データがいっぱいあると、全部にピッタリ合う直線なんて無理だもんね!なるべくズレが小さいやつを探すってのがポイントよね!

1.2. 誤差平方和の最小化

ずれ(残差)を

$$ \mathbf{r}(\mathbf{x}) = A\mathbf{x}-\mathbf{y} $$

と置き、その 2 乗ノルム

$$ J(\mathbf{x}) = \|\mathbf{r}(\mathbf{x})\|^2 = (A\mathbf{x}-\mathbf{y})^\mathsf{T}(A\mathbf{x}-\mathbf{y}) $$

を最小にする $\hat{\mathbf{x}}$ を探します。

2. 誤差平方和の展開

$$ J(\mathbf{x}) = \mathbf{x}^\mathsf{T}A^\mathsf{T}A\mathbf{x} – 2\mathbf{y}^\mathsf{T}A\mathbf{x} + \mathbf{y}^\mathsf{T}\mathbf{y} $$

誤差平方和を丁寧に展開してみましょう。

2.1.  転置のルールを復習

今回の計算式を展開するうえで理解しておく必要がある積の転置の式があります。

2 つのベクトル・行列の積の転置は

$$ (AB)^\mathsf{T} = B^\mathsf{T}A^\mathsf{T} $$

はるか
はるか
積の転置は順番が逆になる。AB の転置は Bᵗ Aᵗ。
ふゅか
ふゅか
そうそう、それ大事!混乱しやすいから、掛ける順番に気をつけなきゃね!

2.2. 本題:残差ベクトルの転置

最小二乗法では、

$$ J(\mathbf{x}) = \|A\mathbf{x} – \mathbf{y}\|^2 = (A\mathbf{x} – \mathbf{y})^\mathsf{T}(A\mathbf{x} – \mathbf{y}) $$

となっていました。

ここで現れる $(A\mathbf{x} – \mathbf{y})^\mathsf{T}$ の部分を注意深く展開してみましょう。

2.3. 計算:残差ベクトルの転置展開

転置の部分の項について着目すると次のようになります。

$$ (A\mathbf{x} – \mathbf{y})^\mathsf{T} = \mathbf{x}^\mathsf{T}A^\mathsf{T} – \mathbf{y}^\mathsf{T} $$

これは以下のように、項ごとに転置を適用することで導かれます。

$$ (A\mathbf{x} – \mathbf{y})^\mathsf{T} = (A\mathbf{x})^\mathsf{T} – \mathbf{y}^\mathsf{T} = \mathbf{x}^\mathsf{T}A^\mathsf{T} – \mathbf{y}^\mathsf{T} $$

これは

  • $(A\mathbf{x})^\mathsf{T} = \mathbf{x}^\mathsf{T}A^\mathsf{T}$(転置の順序反転の公式)
  • $\mathbf{y}$ は列ベクトルなので $\mathbf{y}^\mathsf{T}$ は行ベクトル

2.4. 最終的な目的関数の展開

以上を踏まえて、目的関数 $J(\mathbf{x})$ の展開は次のように進みます:

$$ \begin{align*} J(\mathbf{x}) &= (A\mathbf{x} – \mathbf{y})^\mathsf{T}(A\mathbf{x} – \mathbf{y}) \\ &= \left(\mathbf{x}^\mathsf{T}A^\mathsf{T} – \mathbf{y}^\mathsf{T} \right)(A\mathbf{x} – \mathbf{y}) \\ &= \mathbf{x}^\mathsf{T}A^\mathsf{T}A\mathbf{x}-\mathbf{x}^\mathsf{T}A^\mathsf{T}\mathbf{y}-\mathbf{y}^\mathsf{T}A\mathbf{x}+\mathbf{y}^\mathsf{T}\mathbf{y} \end{align*} $$

このうち、

$\mathbf{x}^\mathsf{T}A^\mathsf{T}\mathbf{y}$ と $\mathbf{y}^\mathsf{T}A\mathbf{x}$ はスカラーとして等しいため、

$$ J(\mathbf{x}) = \mathbf{x}^\mathsf{T}A^\mathsf{T}A\mathbf{x} – 2\mathbf{y}^\mathsf{T}A\mathbf{x} + \mathbf{y}^\mathsf{T}\mathbf{y} $$

とまとめられます。

3.  行列で得られる“正規方程式”

$$ A^\mathsf{T}A\,\hat{\mathbf{x}} = A^\mathsf{T}\mathbf{y} $$

これが 正規方程式 です。先ほどの関数を微分することで求めることができます。

3.1. 目的関数の再掲

まず最小二乗法で使う目的関数を確認します。

$$ J(\mathbf{x}) \;=\; \lVert A\mathbf{x}-\mathbf{b}\rVert^{2} \;=\; (A\mathbf{x}-\mathbf{b})^{\mathsf T}(A\mathbf{x}-\mathbf{b}) \qquad (A\in\mathbb{R}^{m\times n},\; \mathbf{x}\in\mathbb{R}^{n},\; \mathbf{b}\in\mathbb{R}^{m}) $$

3.2. 微分の公式を確認

勾配 $\nabla_{\mathbf{x}}$
$C\mathbf{x}$ $C^{\mathsf T}$
$\mathbf{x}^{\mathsf T}C\mathbf{x}$ $(C+C^{\mathsf T})\mathbf{x}$

ベクトルの微分について詳しく知りたい方は、次の記事を参考にしてください。

3.3. 各項を順番に微分する

3.3.1. 2 次形式

$$ \mathbf{x}^{\mathsf T}A^{\mathsf T}A\mathbf{x} \quad\Longrightarrow\quad \nabla_{\mathbf{x}} = 2A^{\mathsf T}A\,\mathbf{x}. $$

3.3.2. 線形項

$$ -\,2\mathbf{b}^{\mathsf T}A\mathbf{x} \quad\Longrightarrow\quad \nabla_{\mathbf{x}} = -\,2A^{\mathsf T}\mathbf{b}. $$

3.3.3.  定数項

$$ \mathbf{b}^{\mathsf T}\mathbf{b} \quad\Longrightarrow\quad \nabla_{\mathbf{x}} = \mathbf{0}. $$

3.4. 勾配をまとめる

$$ \nabla_{\mathbf{x}}J(\mathbf{x}) = 2A^{\mathsf T}A\,\mathbf{x} \;-\; 2A^{\mathsf T}\mathbf{b}. $$

3.5. 極値条件(勾配 0)から正規方程式へ

$$ \nabla_{\mathbf{x}}J(\mathbf{x}) = \mathbf{0} \;\;\Longrightarrow\;\; 2A^{\mathsf T}A\,\hat{\mathbf{x}} -2A^{\mathsf T}\mathbf{b} = \mathbf{0} \;\;\Longrightarrow\;\; A^{\mathsf T}A\,\hat{\mathbf{x}} = A^{\mathsf T}\mathbf{b}. $$

$$ \boxed{\;\hat{\mathbf{x}} = (A^{\mathsf T}A)^{-1}A^{\mathsf T}\mathbf{b}\;} $$

最小二乗法の解 となります。

4. 単回帰を具体的に解いてみる

4.1. データと行列設定

観測ペア $(t_i, y_i)\, (i=1\ldots m)$ で直線

$$ y = \beta_0 + \beta_1 t $$

を当てはめたい。

$$ A= \begin{bmatrix} 1 & t_1\\ \vdots & \vdots\\ 1 & t_m \end{bmatrix}, \quad \mathbf{x}= \begin{bmatrix} \beta_0\\ \beta_1 \end{bmatrix}, \quad \mathbf{y}= \begin{bmatrix} y_1\\ \vdots\\ y_m \end{bmatrix} $$

4.2. 正規方程式

$$\underbrace{\begin{bmatrix} m & \sum t_i\\ \sum t_i & \sum t_i^2 \end{bmatrix}}_{A^\mathsf{T}A} \begin{bmatrix}\beta_0\\\beta_1\end{bmatrix}=\underbrace{\begin{bmatrix} \sum y_i\\ \sum t_i y_i \end{bmatrix}}_{A^\mathsf{T}\mathbf{y}} $$

2×2 の線形方程式を解くだけで、よく教科書に出る回帰係数の公式

$$ \beta_1=\frac{\sum (t_i-\bar{t})(y_i-\bar{y})}{\sum (t_i-\bar{t})^2}, \quad \beta_0=\bar{y}-\beta_1\bar{t} $$

が再現できます。

5. 関連記事

PR