pca可以把係數保留 30分鐘學會PCA主成分分析

2021-10-17 23:19:56 字數 4167 閱讀 8937

pca主成分分析演算法(principal components analysis)是一種最常用的降維演算法。能夠以較低的資訊損失(以樣本間分布方差衡量)減少特徵數量。

pca演算法可以幫助分析樣本中分布差異最大的成分(主成分),有助於資料視覺化(降低到2維或3維後可以用散點圖視覺化),有時候還可以起到降低樣本中的雜訊的作用(丟失的資訊有部分是雜訊)。

從直覺上看,pca主成分分析類似於依次尋找一群樣本點的各個位置差異最大的方向長軸。

假定把乙個人身上的所有細胞看成乙個乙個的樣本點。這些樣本點可以用3個座標來表示,從左到右為x方向,從前到後為y方向,從下到上為z方向。

那麼它們的第乙個主成分是什麼呢?第乙個主成分對應的長軸是沿著人的腳到頭的方向,也就是通常的上下方向,即z方向。這個方向是最主要的長軸。這些樣本點的位置差異基本上70%以上來自於這個方向上的差異。

它們的第二個主成分是什麼呢?第二個主成分對應的方向是沿著人的左臂到右臂的方向,也就通常的左右方向,即y方向。這個方向和第乙個主成分長軸垂直,這些樣本點的位置差異大概有20%左右來自這個方向上的差異。

它們的第三個主成分是什麼呢?第三個主成分方向是沿著人的前胸到後背的方向,也就是通常的前後方向,即x方向。這個方向和前兩個主成分長軸垂直,樣本點的位置差異有一般只有不到10%來自這個方向的差異,當然,有些身材比較圓潤的同學除外。

現在,如果要將這些樣本點的座標減少到用2個來表示,並盡可能多的保留樣本點之間位置差異的資訊,那麼,顯然,應該保留第乙個主成分座標和第二個主成分座標。

現在,假定這個人躺在乙個斜的躺椅上,那麼現在這些樣本點的第一主成分顯然不再是從下到上的z方向。我們應該將我們的座標係作乙個旋轉,讓z軸和斜著的躺椅方向一致,這個新的z方向是這些樣本點的第一主成分方向。類似地,也需要旋轉x軸和y軸得到新的第二主成分方向和第三主成分方向。

這個旋轉舊座標係以找到主成分方向的過程就是pca主成分分析。

pca主成分分析(principal components analysis)是一種通過正交線性組合方式最大化保留樣本間方差的降維方法。

用幾何觀點來看,pca主成分分析方法可以看成通過正交變換,對座標系進行旋轉和平移,並保留樣本點投影座標方差最大的前幾個新的座標。

下面的範例我們呼叫sklearn中的pca降維演算法介面,對波士頓房價資料集進行降維(13維降到7維)。

# 不同特徵取值範圍相差較大,我們首先進行標準正態歸一化

# 歸一化的結果作為 pca降維的輸入

from sklearn.preprocessing import standardscaler

scaler = standardscaler()

scaler.fit(dfdata.values)

x_input = scaler.transform(dfdata.values)

# 我們的輸入有506個樣本,13維特徵

print(x_input.shape)

輸出如下:

(506, 13)

# 應用pca進行降維

from sklearn.decomposition import pca

pca = pca(n_components=7)

pca.fit(x_input)

x_output = pca.transform(x_input)

# 降維後,只有7維特徵

print(x_output.shape)

輸出如下:

(506, 7)

# 檢視各個主成分對應的方差大小和佔全部方差的比例

# 可以看到前7個主成分已經解釋了樣本分佈的90%的差異了。

print("explained_variance:")

print(pca.explained_variance_)

print("explained_variance_ratio:")

print(pca.explained_variance_ratio_)

print("total explained variance ratio of first 7 principal components:")

print(sum(pca.explained_variance_ratio_))

輸出如下:

#視覺化各個主成分貢獻的方差

# 檢視降維對應的正交變換矩陣,即各個投影向量

w = pca.components_

# 驗證正交關係

# 對降維後的資料的前兩維進行散點圖視覺化

前方高數提醒。

下面進行pca演算法的數學原理推演,證明第k個主成分投影向量恰好是樣本的協方差矩陣的第k大特徵值對應的特徵向量。

下面的推演會用到高等數學中的一些線性代數知識和微積分知識。

沒有相關數學基礎的同學可以跳過,在實踐中只要掌握pca演算法的直覺概念和調包使用方法,基本就夠用了。

30分鐘學會使用

vi 是unix世界裡極為普遍的全螢幕文字 編輯器,vim是它的改進版本vi improved的簡稱。幾乎可以說任何一台 unix 機器都會提供這套軟體。linux當然也有,它的 vi 其實是 elvis 版權問題 不過它們都差不多。熟悉 dos 下的文書處理後,也許會感到 vi 並不好用 unix...

5分鐘學會這些內容,你可以把3dsamx玩得很6

1 三維空間能力的鍛鍊,熟練掌握檢視 座標與物體的位置關係。做到放眼過去就可以判斷物體的空間位置關係,可以隨心所欲地控制物體的位置。這是最基本要掌握的內容,如果掌握不好,下面的所有內容都會受到影響。有了設計基礎和空間能力的朋友,掌握簡單 沒有基礎的朋友,科學的學習和鍛鍊方法,也可以很快地掌握。2 基...

30分鐘學會Git 在碼雲實踐

不耍流氓,直接上操作!cd ifast git init比如碼雲,獲得專案位址 git remote add gitee先拉取一次 git pull gitee master這時會報錯,意思是2個倉庫沒有關聯,帶上引數 allow unrelated histories再來一次 git pull g...