一、一些概念
線性相關:其中一個向量可以由其他向量線性表出。
線性無關:其中一個向量不可以由其他向量線性表出,或者另一種說法是找不到一個X不等於0,能夠使得AX=0。如果對於一個矩陣A來說它的列是線性無關的,則AX=0,只有0解,此時矩陣A可逆。
秩:線性無關向量個數。
基:
特征向量:向量X經過矩陣A旋轉后,與原來的X共線,。
即為特征值,表示向量的伸縮。如果把矩陣看成進行線性變化的矩陣(旋轉,拉伸),那么特征向量就是這樣一種向量,它經過這種特定的變換后保持方向不變,只是進行長度上的伸縮而已。反過來,特征向量組成的正交底恰恰也是一種變換,將矩陣從一個空間映射到另一個空間。
特征分解:
如果矩陣A是對稱矩陣,那會得到一個更強的特征分解,A可實現U對角化,即正交對角化。特征向量U正交:
二、PCA的本質(協方差矩陣對角化,對稱矩陣特征分解)
數據量太大的時候,需要降維。怎么降呢?需要保證維度減少,但同時信息量保留的最多,轉換成數學術語就是每個行向量的方差盡可能大(方差代表信息),行向量間的協方差為0(讓行與行之間盡量不相關,信息盡量轉移到某幾個單獨的變量上,從而實現降維)。下面以矩陣X為例進行講解,假設拿到的數據是矩陣X ,
它的協方差矩陣則為(標准化數據以后):
有兩步需要做1.現在希望的是降維后的協方差矩陣對角元盡可能大(信息量足夠多),非對角元盡可能為0(行與行之間無關,如果相關說明沒有降維成功),即變成一個對角矩陣。因此我們需要對X做一個線性變換,使得做線性變換后的矩陣的協方差矩陣變成對角矩陣(相當於變化新的坐標)。而怎么線性變換呢?具體如下圖,使得Q=Ut時,Cy就會變成一個對角矩陣,這時候需要用到前面的特征值分解,因為Cx是對稱矩陣,所以可以進行特征分解:
2.Cy變成對角矩陣后,我們如何降維呢?此時需要將對角元上的特征值進行排序,此時可以把特征值小的那部分對應的信息丟掉,此時就達到了降維的目的。特征值此時代表的就是信息量的大小。具體如下圖中的例子:
Python中用到的代碼:
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
pca就是尋找協方差矩陣的特征值,特征向量,找到方向最大的變異方向(特征向量),再找到跟它正交的,如此下去找到n個主成分。需要先標准化,因為是通過最大化線性組合方差得到,所以對變量的測量尺度敏感。
三、SVD分解(奇異矩陣分解)
前面講到的對稱矩陣的分解才能實現正交對角化(UT=U-),而對稱矩陣是建立在Rn*n的空間,而對於任意秩為R的矩陣A屬於Rm*n的空間時,能不能找到類似的分解呢?答案是可以滴,這就是SVD分解了, 為奇異值,且大於0。
SVD與特征分解有沒有什么關系呢?
奇異值就是A*AT非零的特征值開根號。在PCA應用中,協方差矩陣是正定矩陣,而正定矩陣(一定是對稱矩陣)的奇異分解實質等價於特征分解。
SVD同樣可以進行降維。