引用自:
1. http://blog.jobbole.com/86905/
2. 應用統計學與R語言實現學習筆記(十二)——主成分分析
3. 主成分分析入門
1. 主成分分析基本思想
研究一個問題,必須考慮許多指標,這些指標能從不同的側面反映我們所研究的對象的特征,但在某種程度上存在信息的重疊,具有一定的相關性。這種信息的重疊有時甚至會抹殺事物的真正特征與內在規律。
主成分分析是利用降維的思想, 在力求數據信息丟失最少的原則下,對高維的變量空間降維,即在眾多變量中找出少數幾個綜合指標(原始變量的線性組合),并且這幾個綜合指標將盡可能多地保留原來指標變異方面的信息,且這些綜合指標互不相關。這些綜合指標就稱為主成分。主成分的數目少于原始變量的數目。
主成分分析是一種數學變換方法,它把給定的一組變量通過線性變換轉換為一組不相關的變量。在這種變換中,保持變量的總方差不變,同時,使第一主成分具有最大方差,第二主成分具有次大方差,依此類推。
主成分與原始變量間的關系
(1)每一個主成分是原始變量的線性組合。
(2)主成分的數目少于原始變量的數目。
(3)主成分保留了原始變量的大多數變異信息。
(4)各主成分間互不相關。
2. 幾何解釋
假定只有二維,即只有兩個變量,由橫坐標和縱坐標所代表;每個觀測值都有相應于這兩個坐標軸的坐標值。如果這些數據形成一個橢圓形狀的點陣(這在二維正態的假定下是可能的)該橢圓有一個長軸和一個短軸。在短軸方向上數據變化較少。在極端的情況,短軸如退化成一點,長軸的方向可以完全解釋這些點的變化,由二維到一維的降維就自然完成了。
由圖可以看出這些樣本點無論是沿著xl軸方向或x2軸方向都具有較大的離散性,其離散的程度可以分別用觀測變量xl的方差和x2的方差定量地表示。顯然,如果只考慮x1和x2中的任何一個,那么包含在原始數據中的經濟信息將會有較大的損失。
當坐標軸和橢圓的長短軸平行,那么代表長軸的變量就描述了數據的主要變化,而代表短軸的變量就描述了數據的次要變化。但是,坐標軸通常并不和橢圓的長短軸平行。因此,需要尋找橢圓的長短軸,并進行變換,使得新變量和橢圓的長短軸平行。如果長軸變量代表了數據包含的大部分信息,就用該變量代替原先的兩個變量(舍去次要的一維),降維就完成了。橢圓的長短軸相差得越大,降維也越有道理。
3. 數學模型
1. 二維情況
將xl軸和x2軸先平移,再同時按逆時針方向旋轉θθ角度,得到新坐標軸Fl和F2。Fl和F2是兩個新變量。根據旋轉變換的公式:
旋轉變換的目的是為了使得n個樣品點在F1軸方向上的離散程度最大,即F1的方差最大。變量Fl代表了原始數據的絕大部分信息,在研究某經濟問題時,即使不考慮變量F2也無損大局。經過上述旋轉變換原始數據的大部分信息集中到Fl軸上,對數據中包含的信息起到了濃縮作用。
F1, F2除了可以對包含在Xl,X2中的信息起著濃縮作用之外,還具有不相關的性質,這就使得在研究復雜的問題時避免了信息重疊所帶來的虛假性。二維平面上的個點的方差大部分都歸結在F1軸上,而F2軸上的方差很小。 F1和F2稱為原始變量x1和x2的綜合變量。
2. 多維情況
X1 X2 ... Xp共計p個變量,現在將這p個變量線性組合組成新的變量F1 F2 ... Fk ,其中k<p。按照保留主要信息量的原則充分反映原指標的信息,并且相互獨立。
由討論多個指標降為少數幾個綜合指標的過程在數學上就叫做降維。主成分分析通常的做法是,尋求原指標的線性組合Fi。
4. 主成分的推導
第一主成分
第二主成分
5. 主成分性質
- 方差為所有特征根之和:
說明主成分分析把p個隨機變量的總方差分解成為p個不相關的隨機變量的方差之和。協方差矩陣ΣΣ的對角線上的元素之和等于特征根之和。
- 精度分析
1)貢獻率:第i個主成分的方差在全部方差中所占比重lambda(i)/sum(lambda(i)),稱為貢獻率,體現這個主成分的綜合能力的大小,即反映原來p個指標的信息的多少。
2)累積貢獻率:前k個主成分共有多大的綜合能力,用這個k個主成分的方差和在全部方差中所占比重
[lambda(1)+lambda(2)+...+lambda(k)]/sum(lambda(i))
來描述,稱為累積貢獻率。
我們進行主成分分析的目的之一是希望用盡可能少的主成分F1,F2,?,Fk(k≤p)F1,F2,?,Fk(k≤p)代替原來的p個指標。到底應該選擇多少個主成分,在實際工作中,所采用主成分個數的多少取決于能夠反映原來變量85%以上的信息量為依據,即當累積貢獻率≥85%時的主成分的個數就足夠了。最常見的情況是主成分為2到3個。
6. 計算實例
10個樣例,每個樣例有2個特征:降維
第一步:分別求 x 和 y 的平均值,然后對所有的樣例都減去對應的均值
這里求得 x 的均值為 1.81 , y 的均值為 1.91,減去均值后得到數據如下:
第二步:在對特征進行方差歸一化,目的是讓每個特征的權重都一樣,但是由于我們的數據的值都比較接近,所以歸一化這步可以忽略不做
第三步:計算協方差矩陣,計算協方差矩陣的特征值和特征向量
第四步:將特征值從大到小進行排序,選擇其中最大的 k 個,然后將其對應的 k 個特征向量分別作為列向量組成特征矩陣
這里的特征值只有兩個,我們選擇最大的那個,為: 1.28402771 ,其對應的特征向量為:
注意:matlab 的 eig 函數求解協方差矩陣的時候,返回的特征值是一個特征值分布在對角線的對角矩陣,第 i 個特征值對應于第 i 列的特征向量
第五步: 將樣本點投影到選取的特征向量上
假設樣本列數為 m ,特征數為 n ,減去均值后的樣本矩陣為 DataAdjust(mn),協方差矩陣為 nn ,選取 k 個特征向量組成后的矩陣為 EigenVectors(nk),則投影后的數據 FinalData 為:
FinalData (mk) = DataAdjust(mn) X EigenVectors(nk)
得到的結果是:
這樣,我們就將 n 維特征降成了 k 維,這 k 維就是原始特征在 k 維上的投影。