Featured image of post 最小平方法:用線性代數尋找散點數據的「最佳擬合直線」

最小平方法:用線性代數尋找散點數據的「最佳擬合直線」

使用幾何直覺和強大的線性代數工具(正規方程式、正交投影)深入解釋最小平方法的原理。

1. 引言:現實世界的數據與「最佳」模型

現實世界中觀察到的數據幾乎總是包含「雜訊」或「變異數」。為了從這些數據中找出潛在的規律並預測未來或估計未知數據,我們需要建立一個能 最完美 擬合數據的數學模型。

最基礎的方法,至今仍作為現代機器學習基礎發揮著極其重要作用的,就是 最小平方法 (Method of Least Squares)。

在這篇文章中,我們不再僅僅是死記硬背公式,而是從線性代數(正交投影)這一優美的幾何視角,深入探討 「為什麼這種計算能找到最佳擬合直線」。

2. 最小平方法的直觀概念

假設我們有 \(n\) 個數據點 \((x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\)。將這些點繪製在散佈圖上時,它們可能並沒有完美地排成一條直線,但總體上似乎遵循著某條直線的趨勢。

此時,設近似數據的直線方程式為 \(y = c + dx\)。(這裡,截距為 \(c\) ,斜率為 \(d\) )。

對於每個數據點 \(x_i\),該直線預測的值為 \(\hat{y}_i = c + d x_i\)。實際觀測值 \(y_i\) 與預測值 \(\hat{y}_i\) 之間會產生一個誤差(殘差) \(e_i\)。

\[ e_i = y_i - \hat{y}_i = y_i - (c + d x_i) \]

最小平方法是一種尋找能夠使誤差的 平方和 最小化的參數 \(c\) 和 \(d\) 的技術。誤差的平方和 \(E\) 定義如下:

\[ E = \sum_{i=1}^{n} e_i^2 = \sum_{i=1}^{n} (y_i - c - d x_i)^2 \quad (\text{誤差函數的定義}) \]

平方的原因是為了防止正負誤差相互抵消,而且它具有在數學上可微且易於處理的強大優勢。

  flowchart TD
    Data["數據收集"] --> Formulate["模型公式化"]
    Formulate --> Error["定義誤差函數"]
    Error --> Minimize["最小化誤差函數"]
    Minimize --> Optimal["確定最佳參數"]

3. 使用線性代數進行公式化與「無解的方程式」

當我們使用矩陣和向量的語言,即 線性代數 來重寫這一點時,最小平方法的真正優美之處便顯現出來了。

假設所有數據點都完美地位於直線 \(y = c + dx\) 上,我們得到以下 \(n\) 個方程式:

\[ \begin{cases} c + d x_1 = y_1 \\\\ c + d x_2 = y_2 \\\\ \vdots \\\\ c + d x_n = y_n \end{cases} \]

用矩陣形式表示,我們得到:

$$ \begin{bmatrix} 1 & x_1 \\ 1 & x_2 \\ \vdots & \vdots \\ 1 & x_n \end{bmatrix} \begin{bmatrix} c \\ d \end{bmatrix}

\begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix} $$

我們將其簡寫為 \(A\mathbf{x} = \mathbf{b}\)。這裡,

  • \(A\) 是一個 \(n \times 2\) 的 設計矩陣 (Design Matrix)
  • \(\mathbf{x} = \begin{bmatrix} c \\\\ d \end{bmatrix}\) 是我們想要尋找的 參數向量
  • \(\mathbf{b}\) 是觀測值的 目標變數向量

當數據具有變異數時(3個或更多點不在同一直線上),不存在完美滿足此方程式 \(A\mathbf{x} = \mathbf{b}\) 的解 \(\mathbf{x}\)。也就是說,聯立方程式是 不一致的 (inconsistent)。

4. 幾何視角:行空間與正交投影

方程式 \(A\mathbf{x} = \mathbf{b}\) 無法求解在幾何上意味著什麼?

將矩陣 \(A\) 乘以向量 \(\mathbf{x}\) 意味著創建 \(A\) 的每個行向量的線性組合。由 \(A\) 的所有可能的線性組合所創建的空間稱為 \(A\) 的 行空間 (Column Space),記作 \(C(A)\)。

\[ A\mathbf{x} \in C(A) \]

無解意味著向量 \(\mathbf{b}\) 位於這個行空間 \(C(A)\) 的 外部。

我們正在尋找的不是一個完美的解,而是在 \(C(A)\) 內一個盡可能接近 \(\mathbf{b}\) 的向量。我們稱之為 \(A\hat{\mathbf{x}}\)。此時,向量 \(\mathbf{b}\) 與 \(A\hat{\mathbf{x}}\) 之間的距離(的平方)最小。這正是最小平方法。

在幾何上,給出空間中某點 \(\mathbf{b}\) 到某個平面 \(C(A)\) 的最短距離的點,正是從 \(\mathbf{b}\) 到 \(C(A)\) 所作的 垂足。這被稱為 正交投影 (Orthogonal Projection)。

設誤差向量為 \(\mathbf{e} = \mathbf{b} - A\hat{\mathbf{x}}\),最短距離的條件是「誤差向量 \(\mathbf{e}\) 正交於行空間 \(C(A)\)」。

正交於行空間 \(C(A)\) 意味著正交於 \(A\) 的所有行向量。這意味著誤差向量 \(\mathbf{e}\) 屬於矩陣 \(A\) 的轉置矩陣 \(A^T\) 的 左零空間 (Left Nullspace)。即,

\[ A^T \mathbf{e} = \mathbf{0} \quad (\text{正交條件}) \]

5. 正規方程式的推導

讓我們將 \(\mathbf{e} = \mathbf{b} - A\hat{\mathbf{x}}\) 代入上述的正交條件。

\[ A^T (\mathbf{b} - A\hat{\mathbf{x}}) = \mathbf{0} \]\[ A^T \mathbf{b} - A^T A \hat{\mathbf{x}} = \mathbf{0} \]

整理後,我們得到以下極其重要的方程式。

\[ A^T A \hat{\mathbf{x}} = A^T \mathbf{b} \quad (\text{正規方程式}) \]

這個方程式被稱為 正規方程式 (Normal Equation)。最初的 \(A\mathbf{x} = \mathbf{b}\) 沒有解,但這個在等式兩邊左乘 \(A^T\) 的正規方程式總是有解的。此外,如果 \(A\) 的行向量是線性獨立的,\(A^T A\) 就是可逆的(具有反矩陣),並且最佳解 \(\hat{\mathbf{x}}\) 被唯一確定如下:

\[ \hat{\mathbf{x}} = (A^T A)^{-1} A^T \mathbf{b} \]

這個公式是統計學和機器學習中最優美的結果之一。你可以僅僅透過正交性的幾何概念得出這個結論,而無需使用微積分。

  flowchart LR
    b["向量 b"] -->|"正交投影"| p["投影向量 p = A x_hat"]
    p --> C["行空間 C(A)"]
    b -->|"誤差向量 e"| p
    e["e = b - A x_hat"] -.->|"正交"| C

6. Python中的實作範例

讓我們實際用程式來計算一下,而不僅僅是理論。使用 Python 中的數值計算函式庫 NumPy,你可以非常容易地實作正規方程式。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np

# 樣本數據 (x 和 y)
x_data = np.array([1, 2, 3, 4, 5])
y_data = np.array([2.1, 3.9, 6.2, 8.1, 9.8])

# 創建設計矩陣 A
# 組合 x_data 的行和用於截距的 1 的行
# 使用 np.c_ 沿著行的方向連接
A = np.c_[np.ones(len(x_data)), x_data]
b = y_data

# 求解正規方程式:(A^T A) x_hat = A^T b
# A.T 是 A 的轉置,@ 表示矩陣乘法
A_T_A = A.T @ A
A_T_b = A.T @ b

# 使用 np.linalg.solve 求解聯立方程式
# 在數值上比直接計算反矩陣更穩定
x_hat = np.linalg.solve(A_T_A, A_T_b)

c_hat, d_hat = x_hat
print(f"最佳截距: {c_hat:.4f}")
print(f"最佳斜率: {d_hat:.4f}")

執行這段程式碼將計算出最擬合給定數據點的直線的截距和斜率。在幕後,它正是執行了前面推導出的矩陣計算。

7. 總結與未來發展

最小平方法是從數據中估計模型參數的最強大、最標準的技術。使用微積分的知識,它可以被推導為「誤差函數的梯度變為0的點」,但透過從線性代數的角度將其理解為「在行空間上的正交投影」,其數學結構的優美性便凸顯出來。

這種方法並不侷限於簡單的直線擬合(簡單迴歸)。透過在設計矩陣 \(A\) 的行中添加如 \(x^2, x^3\) 等項,它可以自然地擴展到 多項式迴歸,也可以發展為對每個數據點的重要性進行加權的 加權最小平方法。

作為接近數據背後真相的第一步,對最小平方法本質的理解具有不可估量的價值。

comments powered by Disqus