pca图解读_干货!手把手一步一步解读PCA分析,逃学博士尽力了!
01 引言
之前發了幾篇文章關于矩陣中 特征向量和PCA主元分析的文章,大家反響不錯。當時并沒有涉及到數學運算,只是大概講了講原理。
這篇文章我們一起來一步一步解讀
- PCA的計算過程
- 如何用Python實現PCA分析
準備就緒
02 第一步:數據獲取
第一步,大量的數據收集是必須的。手邊此時并沒有數據,就通過python自己制造點數據吧。
構造數據框架
我們的項目計劃是 看看 白種人和黃種人的基因差別。
gene = ['gene' + str(i) for i in range(1, 101)] #創造100個基因
白種人取5人(Wh1 到 Wh5)和黃種人取5人(Ye1 到 Ye5)。
white = ['Wh' + str(i) for i in range(1, 6)]
yellow = ['Ye' + str(i) for i in range(1, 6)]
data = pd.DataFrame(columns = [*white, *yellow], index = gene)
將所有的數據通過pandas包放入一個數據矩陣中。如下所示:
數據矩陣
現在,我們給這個矩陣賦值,完全隨機的,不要去管數據嚴謹性,畢竟全是假設的數據。
數據代碼
數據
搞定數據了,一般數據都是現成的。下一步,咱們開始PCA分析。
03 數據中心化
什么叫數據中心化呢?太高大上了!其實就是求平均值,將所有的數據和平均值聯系起來。
我們還是用二維數據解釋比較順溜,假設數據如下:
杜撰數據
二維數據
假設我們有6組數據,x軸代表 影響因子1, y軸代表 影響因子2。藍色小球代表數據,紫色小球代表數據平均值。
數據中心化,就是所有數據 減去 平均值,而圖像的變化就是將平均值的點(紫色)移動到原點,其他數據點跟著移動。
數據中心化
數據中心化
簡單吧!數據中心化后還有一步,是將數據縮放一下。
你看哦!
數據中心化的過程中,數據的方差是沒有變化的。為了數據比較的方便,對數據還需要縮放一下,過程很簡單。
數據縮放
所有數據 除以 方差,這樣最后的數據的方差都變成 1 了。
上面的python代碼我們創建了100個基因,10個人的數據包。總共數據是100 * 10。
我們給中間中心化和縮放一下。
scaled_data = preprocessing.scale(data.T) # 搞定!
數據縮放
04 PCA分析
PCA分析
線性規劃大家還記得吧。
線性規劃
如上圖所示,我們需要劃出一條線使得所有的數據點到達這條線的距離的平方和(紅色線段)最小。
線性規劃
為了詳細說明線性規劃,我們拿一個點來說明。
當B是無數數據點中的一個,AC(綠線)是一條最匹配的直線。那么我們需要保證:
- B到AC的距離,BC的長度的平方和最小;
- 或者C到A的距離平方和最大(勾股定理可證),兩者是等效的。
所有數據點在主元坐標軸上的投射點到原點的距離(如上圖中AC)的平方和叫做 Sum of Squared Distances (SSD)。
主元1 上的投射點的 Sum of Squared Distances 就是 主元1的特征值(Eigenvalue),可以參見我之前的文章。
主元2上的投射點的Sum of Squared Distances 就是 主元2的特征值(Eigenvalue)。
Sum of Squared Distances
我們注意到上圖中最后一列是Variation。這是通過:
SSD / (數據個數 - 1)求得的。
Variation有什么用的?
主元1的Variation是2.20,主元2的Variation是0.20。那么一共是2.2 + 0.2 = 2.4。
那么,主元1占有:2.2 / 2.4 = 91.5%
主元2占有:0.2 / 2.4 = 8.5%
也就是說,PCA分析后,主元1保留了91.5%的原始數據信息,占比比主元2大的多。那么,主元1就是第一主元。
分析完畢,大功告成!
PCA
對于上述數據做PCA分析后,我們看出主元1占比高達95%。自然是第一主元。
05 總結
如果大家喜歡我的文章,請關注“逃學博士”。
感謝StatQuest。
“逃學博士”:理工科直男一枚,在冰天雪地的加拿大攻讀工程博士。閑暇之余分享點科學知識和學習干貨。
總結
以上是生活随笔為你收集整理的pca图解读_干货!手把手一步一步解读PCA分析,逃学博士尽力了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 21天学通C语言-学习笔记(7)
- 下一篇: java中不带package和带pack