PCA是主成分分析的縮寫,而主成分分析是将資料進行降維的一種方法。
我們以最簡單的二維資料為例:
> A <- matrix(c(3,-4,7,1,-4,-3,
+ 7,-6,8,-1,-1,-7), nrow = 2, byrow=TRUE)
> A
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 3 -4 7 1 -4 -3
[2,] 7 -6 8 -1 -1 -7
A矩陣共有兩行,每行代表一種屬性(e.g. 身高、體重);A矩陣共有六列,每列代表一位個體(e.g. 小明、小紅、小張等)
我們首先觀察圖像:
> plot(A[1,],A[2,])

圖1
可以看到,兩個屬性間具有比較強的相關性。是以,可以通過主成分分析的方法将他們降維到一個連續統之内。
換句話說,我們希望找到一個新的向量,使得圖1各點,向該向量投影。投影點之間的離散程度能夠最大化,這意味着原有資料的變異性得到了最大程度的保留。
首先,我們計算
,來得到
中兩個變量的協方差矩陣(
中各變量已經用均值完成了對中):
> (Cov <- 1/5 * A %*% t(A))
[,1] [,2]
[1,] 20 25
[2,] 25 40
然後,我們求該協方差矩陣
的特征值和特征向量:
> (eigen_Cov <- eigen(Cov))
eigen() decomposition
$values
[1] 56.925824 3.074176
$vectors
[,1] [,2]
[1,] 0.5606288 -0.8280672
[2,] 0.8280672 0.5606288
由于特征值等于矩陣對角線元素之和(也叫“迹”),而
矩陣對角線之和,其實就是A矩陣中兩變量總變異之和。
特征根
較大,意味着該特征根對應的特征向量
解釋了更多的變量變異,是以,它就是我們要找的可以用來降維的那個向量。
當然,不求協方差矩陣
,直接對
進行奇異值分解,也是可以的:
> (svd(A))
$d
[1] 16.870955 3.920571
$u
[,1] [,2]
[1,] -0.5606288 -0.8280672
[2,] -0.8280672 0.5606288
$v
[,1] [,2]
[1,] -0.4432682 0.36734441
[2,] 0.4274162 -0.01313684
[3,] -0.6252722 -0.33450230
[4,] 0.0158520 -0.35420757
[5,] 0.1820041 0.70184671
[6,] 0.4432682 -0.36734441
可以看到,最大的奇異值
,其對應的
向量是
,和之前我們求的
矩陣的特征向量共線。
為什麼會出現這種情況?
因為在對
進行奇異值分解時,
最大奇異值
,其平方
等于
中對應的特征根,而奇異值分解中得到的向量
,正是
對應的特征向量。
又因為
,是以
特征根等于
的
特征根,也就是
奇異值
平方的1/5 :
> 16.870955^2/5
[1] 56.92582
而特征向量方向不變。