(一)矩陣乘法

摘錄自:CodingLabs - PCA的數學原理

作者 張洋 | 發佈於 2013-06-22

1.內積與投影

下面先來看一個高中就學過的向量運算:內積。兩個維數相同的向量的內積被定義為:

(a_1,a_2,cdots,a_n)^mathsf{T}cdot (b_1,b_2,cdots,b_n)^mathsf{T}=a_1b_1+a_2b_2+cdots+a_nb_n

內積運算將兩個向量映射為一個實數。其計算方式非常容易理解,但是其意義並不明顯。下面我們分析內積的幾何意義。假設AB是兩個n維向量,我們知道n維向量可以等價表示為n維空間中的一條從原點發射的有向線段,為了簡單起見我們假設AB均為二維向量,則A=(x_1,y_1)B=(x_2,y_2)。則在二維平面上AB可以用兩條發自原點的有向線段表示,見下圖:

好,現在我們從A點向B所在直線引一條垂線。我們知道垂線與B的交點叫做AB上的投影,再設AB的夾角是alpha ,則投影的矢量長度為|A|cos(alpha ),其中|A|=sqrt{x_1^2+y_1^2}是向量A的模,也就是A線段的標量長度。

注意這裡我們專門區分了矢量長度和標量長度,標量長度總是大於等於0,值就是線段的長度;而矢量長度可能為負,其絕對值是線段長度,而符號取決於其方向與標準方向相同或相反。

到這裡還是看不出內積和這東西有什麼關係,不過如果我們將內積表示為另一種我們熟悉的形式:

Acdot B=|A||B|cos(alpha )

現在事情似乎是有點眉目了:AB的內積等於AB的投影長度乘以B的模。再進一步,如果我們假設B的模為1,即讓|B|=1,那麼就變成了:

Acdot B=|A|cos(alpha )

也就是說,設向量B的模為1,則AB的內積值等於AB所在直線投影的矢量長度!這就是內積的一種幾何解釋,也是我們得到的第一個重要結論。在後面的推導中,將反覆使用這個結論。

2.基

下面我們繼續在二維空間內討論向量。上文說過,一個二維向量可以對應二維笛卡爾直角坐標系中從原點出發的一個有向線段。例如下面這個向量:

在代數表示方面,我們經常用線段終點的點坐標表示向量,例如上面的向量可以表示為(3,2),這是我們再熟悉不過的向量表示。

不過我們常常忽略,只有一個(3,2)本身是不能夠精確表示一個向量的。我們仔細看一下,這裡的3實際表示的是向量在x軸上的投影值是3,在y軸上的投影值是2。也就是說我們其實隱式引入了一個定義:以x軸和y軸上正方向長度為1的向量為標準。那麼一個向量(3,2)實際是說在x軸投影為3而y軸的投影為2。注意投影是一個矢量,所以可以為負。

更正式的說,向量(x,y)實際上表示線性組合:

x(1,0)^mathsf{T}+y(0,1)^mathsf{T}

不難證明所有二維向量都可以表示為這樣的線性組合。此處(1,0)(0,1)叫做二維空間中的一組基。

所以,要準確描述向量,首先要確定一組基,然後給出在基所在的各個直線上的投影值,就可以了。只不過我們經常省略第一步,而默認以(1,0)和(0,1)為基。

我們之所以默認選擇(1,0)和(0,1)為基,當然是比較方便,因為它們分別是x和y軸正方向上的單位向量,因此就使得二維平面上點坐標和向量一一對應,非常方便。但實際上任何兩個線性無關的二維向量都可以成為一組基,所謂線性無關在二維平面內可以直觀認為是兩個不在一條直線上的向量。

例如,(1,1)和(-1,1)也可以成為一組基。一般來說,我們希望基的模是1,因為從內積的意義可以看到,如果基的模是1,那麼就可以方便的用向量點乘基而直接獲得其在新基上的坐標了!實際上,對應任何一個向量我們總可以找到其同方向上模為1的向量,只要讓兩個分量分別除以模就好了。例如,上面的基可以變為(frac{1}{sqrt{2}},frac{1}{sqrt{2}})(-frac{1}{sqrt{2}},frac{1}{sqrt{2}})

現在,我們想獲得(3,2)在新基上的坐標,即在兩個方向上的投影矢量值,那麼根據內積的幾何意義,我們只要分別計算(3,2)和兩個基的內積,不難得到新的坐標為(frac{5}{sqrt{2}},-frac{1}{sqrt{2}})。下圖給出了新的基以及(3,2)在新基上坐標值的示意圖:

另外這裡要注意的是,我們列舉的例子中基是正交的(即內積為0,或直觀說相互垂直),但可以成為一組基的唯一要求就是線性無關,非正交的基也是可以的。不過因為正交基有較好的性質,所以一般使用的基都是正交的。

3. 基變換的矩陣表示

下面我們找一種簡便的方式來表示基變換。還是拿上面的例子,想一下,將(3,2)變換為新基上的坐標,就是用(3,2)與第一個基做內積運算,作為第一個新的坐標分量,然後用(3,2)與第二個基做內積運算,作為第二個新坐標的分量。實際上,我們可以用矩陣相乘的形式簡潔的表示這個變換:

egin{pmatrix} 1/sqrt{2} & 1/sqrt{2} \ -1/sqrt{2} & 1/sqrt{2} end{pmatrix} egin{pmatrix} 3 \ 2 end{pmatrix} = egin{pmatrix} 5/sqrt{2} \ -1/sqrt{2} end{pmatrix}

太漂亮了!其中矩陣的兩行分別為兩個基,乘以原向量,其結果剛好為新基的坐標。可以稍微推廣一下,如果我們有m個二維向量,只要將二維向量按列排成一個兩行m列矩陣,然後用「基矩陣」乘以這個矩陣,就得到了所有這些向量在新基下的值。例如(1,1),(2,2),(3,3),想變換到剛才那組基上,則可以這樣表示:

egin{pmatrix} 1/sqrt{2} & 1/sqrt{2} \ -1/sqrt{2} & 1/sqrt{2} end{pmatrix} egin{pmatrix} 1 & 2 & 3 \ 1 & 2 & 3 end{pmatrix} = egin{pmatrix} 2/sqrt{2} & 4/sqrt{2} & 6/sqrt{2} \ 0 & 0 & 0 end{pmatrix}

於是一組向量的基變換被乾淨的表示為矩陣的相乘。

一般的,如果我們有M個N維向量,想將其變換為由R個N維向量表示的新空間中,那麼首先將R個基按行組成矩陣A,然後將向量按列組成矩陣B,那麼兩矩陣的乘積AB就是變換結果,其中AB的第m列為A中第m列變換後的結果。

數學表示為:

egin{pmatrix} p_1 \ p_2 \ vdots \ p_R end{pmatrix} egin{pmatrix} a_1 & a_2 & cdots & a_M end{pmatrix} = egin{pmatrix} p_1a_1 & p_1a_2 & cdots & p_1a_M \ p_2a_1 & p_2a_2 & cdots & p_2a_M \ vdots & vdots & ddots & vdots \ p_Ra_1 & p_Ra_2 & cdots & p_Ra_M end{pmatrix}

其中p_i是一個行向量,表示第i個基,a_j是一個列向量,表示第j個原始數據記錄。

特別要注意的是,這裡R可以小於N,而R決定了變換後數據的維數。也就是說,我們可以將一N維數據變換到更低維度的空間中去,變換後的維度取決於基的數量。因此這種矩陣相乘的表示也可以表示降維變換。

上述分析給矩陣相乘找到了一種物理解釋:兩個矩陣相乘的意義是將右邊矩陣中的每一列列向量變換到左邊矩陣中每一行行向量為基所表示的空間中去。更抽象的說,一個矩陣可以表示一種線性變換。很多同學在學線性代數時對矩陣相乘的方法感到奇怪,但是如果明白了矩陣相乘的物理意義,其合理性就一目了然了。


推薦閱讀:

線性代數的一些名詞概念很模糊?

TAG:矩阵 | 线性代数 |