pca是一種資料降維的方法。當我們在處理一些高維且冗餘資料時,可以使用pca對資料進行降維,去除冗餘資訊,提高執行速度。如上圖所示,左邊3d影象,存在大量冗餘資料,我們把這樣的資料轉移到2d可以更加清晰的觀察資料本身,同時降低計算複雜度。
1.pca原理詳解
如果我們要對上圖二維空間的特徵點做特徵降維,那怎樣的降維結果對我們來說是好的呢?其實,二維特徵降維就是找座標系投影,如圖可以看到紅色箭頭與黃色箭頭兩個座標軸。如果我們將特徵對映到黃色軸,二維特徵點將會大量重疊在黃色軸上,損失大量原始資訊是我們不想見到的。而對映到紅色軸上,相較於其他座標軸,這個特徵壓縮過程可以將資訊損失降低到最小。
總結來說,我們希望投影後的資料點盡可能地分散,這種分散程度在數學上可以用方差來表示。同時,為了減少特徵的冗餘資訊,我們希望降維後的特徵互不相關,而不相關性可以用協方差來衡量。因此,我們可以先求出原始資料的協方差矩陣,協方差矩陣對角線元素是資料的方差,其他元素是特徵之間的相關係數,我們希望降維後的方差盡量大,相關係數為0,那麼利用正交變換將此協方差矩陣變換成對角陣,並提取前k個特徵值對應的特徵向量,即可完成轉移矩陣。
2.pca具體步驟
以x為例,我們用pca將其降維到一維。
1)求協方差矩陣
2)求協方差矩陣的特徵值與特徵向量
求解後的特徵值為
對應的特徵向量為
3)選k個最大的特徵值對應的特徵向量形成轉移局正,獲得降維後的表示
結果如圖所示
3.python實現
##python實現pca
import numpy as np
defpca
(x,k)
:#k is the components you want
#mean of each feature
n_samples, n_features = x.shape
mean=np.array(
[np.mean(x[
:,i]
)for i in
range
(n_features)])
#normalization
norm_x=x-mean
#scatter matrix
scatter_matrix=np.dot(np.transpose(norm_x)
,norm_x)
#calculate the eigenvectors and eigenvalues
eig_val, eig_vec = np.linalg.eig(scatter_matrix)
eig_pairs =
[(np.
abs(eig_val[i]
), eig_vec[
:,i]
)for i in
range
(n_features)
]# sort eig_vec based on eig_val from highest to lowest
eig_pairs.sort(reverse=
true
)# select the top k eig_vec
feature=np.array(
[ele[1]
for ele in eig_pairs[
:k]]
)#get new data
data=np.dot(norm_x,np.transpose(feature)
)return data
x = np.array([[
-1,1
],[-
2,-1
],[-
3,-2
],[1
,1],
[2,1
],[3
,2]]
)print
(pca(x,1)
)
PCA主成分分析原理
一 步驟 1.去除平均值 對特徵中心化處理 2.計算協方差矩陣 3.計算協方差矩陣的特徵值和特徵向量 4.將特徵值排序 5.保留前n個最大的特徵值對應的特徵向量 6.將原始特徵轉換到上面得到的n個特徵向量構建的新空間中 最後兩步,實現了特徵壓縮 二 原理 1 pca的主要思想是將n維特徵對映到k維上...
pca主成分分析 PCA主成分分析(中)
矩陣 matrix,很容易讓人們想到那部著名的科幻電影 駭客帝國 事實上,我們又何嘗不是真的生活在matrix中。機器學習處理的大多數資料,都是以 矩陣 形式儲存的。矩陣是向量的組合,而乙個向量代表一組資料,資料又是多維度的。比如每個人的都具有身高 體重 長相 性情等多個維度的資訊資料,而這些多維度...
主成分分析PCA
主要參考這篇文章 個人總結 pca是一種對取樣資料提取主要成分,從而達到降維的目的。相比於上篇文章介紹到的svd降維不同,svd降維是指減少資料的儲存空間,資料的實際資訊沒有缺少。個人感覺pca更類似與svd的去噪的過程。pca求解過程中,涉及到了svd的使用。針對資料集d 假設di 的維度為 w ...