1. 程式人生 > >機器學習:向量空間中的投影

機器學習:向量空間中的投影

今天介紹向量空間中的投影,以及投影矩陣。
假設空間中有兩個向量 a,b\mathbf{a}, \mathbf{b}b\mathbf{b}a\mathbf{a} 上的投影為 p\mathbf{p},我們要計算出 p\mathbf{p} 到底是多少,如下圖所示:

在這裡插入圖片描述

為了計算 p\mathbf{p},我們可以先假設 p=xa\mathbf{p} = x \mathbf{a},因為 p\mathbf{p} 是在 a\mathbf{a} 上,所以兩者只差係數的關係,如上圖所示,我們可以找到 b\mathbf{b}p\mathbf{p} 的差:e=bp=b

xa\mathbf{e} = \mathbf{b} - \mathbf{p} = \mathbf{b} - x\mathbf{a},而我們又可以看出,e\mathbf{e} 是和 a\mathbf{a} 垂直的,所以 ea=aTe=0\mathbf{e} \cdot \mathbf{a} = \mathbf{a}^{T} \mathbf{e} = 0,我們可以進一步得到,

aT(bxa)=0\mathbf{a}^{T}(\mathbf{b} - x\mathbf{a})=0
所以:
aTbxaTa=0 \mathbf{a}^{T}\mathbf{b} -x\mathbf{a}^{T}\mathbf{a} =0


進而:
x=aTbaTa x = \frac{\mathbf{a}^{T}\mathbf{b}}{\mathbf{a}^{T}\mathbf{a}}
所以:

p=xa=aaTaTab \mathbf{p} = x \mathbf{a} = \frac{\mathbf{a}\mathbf{a}^{T}}{\mathbf{a}^{T}\mathbf{a}}\mathbf{b}

所以投影矩陣
P=aaTaTa \mathbf{P} = \frac{\mathbf{a}\mathbf{a}^{T}}{\mathbf{a}^{T}\mathbf{a}}

這是到直線的投影,如果是到矩陣的投影,我們也可以用類似的方法求得, 只是將上面的向量 a\mathbf{a} 換成矩陣 A\mathbf{A} ,假設向量 b\mathbf{b} 在矩陣 A\mathbf{A} 上的投影為 Ax\mathbf{A}\mathbf{x},相當於向量 b\mathbf{b} 投影到了矩陣 A\mathbf{A} 的列空間上,而矩陣 A\mathbf{A} 的列空間與其 left-null 空間是互相垂直的,所以:

AT(bAx)=0\mathbf{A}^{T}(\mathbf{b} - \mathbf{A}\mathbf{x})=0
所以:
ATbATAx=0 \mathbf{A}^{T}\mathbf{b} -\mathbf{A}^{T}\mathbf{A}\mathbf{x} =0
進而:
x=(ATA)1ATb \mathbf{x} = (\mathbf{A}^{T}\mathbf{A})^{-1} \mathbf{A}^{T}\mathbf{b}
所以:

p=Ax=A(ATA)1ATb \mathbf{p} = \mathbf{A} \mathbf{x}= \mathbf{A} (\mathbf{A}^{T}\mathbf{A})^{-1} \mathbf{A}^{T}\mathbf{b}

所以投影矩陣
P=A(ATA)1AT \mathbf{P} = \mathbf{A} (\mathbf{A}^{T}\mathbf{A})^{-1} \mathbf{A}^{T}

關於投影,最後多說幾句,講講點到直線的距離,這個與機器學習中的 SVM 的最初的優化函式有關:

在這裡插入圖片描述

這個圖是那本經典的機器學習教材 《Pattern Recognition and Machine Learning》裡的,這個是想說明向量空間中,一個點到直線的距離。假設直線的表示式為 f(x)=wTx+w0f(\mathbf{x})=\mathbf{w}^{T}\mathbf{x}+w_0,如果我們要求一個點x\mathbf{x} 到該直線的距離,我們可以用上面說的投影來求這個距離, 假設點 x\mathbf{x} 到直線上的投影為 x\mathbf{x}_{\perp},如上圖的 x\mathbf{x}_{\perp},而 x\mathbf{x}_{\perp}x\mathbf{x}_{\perp} 的這個向量與 w\mathbf{w} 是平行的,所以我們可以得到如下的表示式:

x=x+rww \mathbf{x} = \mathbf{x}_{\perp} + r \frac{\mathbf{w}}{||\mathbf{w}||}

兩邊同時乘以 w\mathbf{w} 並且加上 w0w_0, 可以得到:

wTx+w0=wTx+w0+rwTww \mathbf{w}^{T}\mathbf{x} + w_0 = \mathbf{w}^{T}\mathbf{x}_{\perp} + w_0 + r \frac{\mathbf{w}^{T}\mathbf{w}}{||\mathbf{w}||}

因為 x\mathbf{x}_{\perp} 在直線上,所以 wTx+w0=0\mathbf{w}^{T}\mathbf{x}_{\perp} + w_0 = 0,進而,我們可以得到:

f(x)=rwr=f(x)w f(\mathbf{x}) = r ||\mathbf{w}|| \Rightarrow r = \frac{f(\mathbf{x})}{||\mathbf{w}||}

因為 ww\frac{\mathbf{w}}{||\mathbf{w}||} 是單位向量,所以這個向量的幅值就是 rr,所以點 x\mathbf{x} 到該直線的距離就是 rr。這個距離的表示式,就是機器學習裡 SVM 的基礎,SVM 要優化的就是尋找這樣一個 w\mathbf{w} 使得所有離該直線最近的點的距離最遠,聽起來好像有點繞哈~