主成分分析 PCA 演算法原理介紹

2021-08-09 01:48:29 字數 1926 閱讀 2689

下面是pca演算法的python實現,摘自部落格:

具體程式如下:

未選擇主成分個數:

#零均值化

defzeromean

(datamat):

meanval=np.mean(datamat,axis=0) #按列求均值,即求各個特徵的均值

newdata=datamat-meanval

return newdata,meanval

defpca

(datamat,n):

newdata,meanval=zeromean(datamat)

covmat=np.cov(newdata,rowvar=0) #求協方差矩陣,return ndarray;若rowvar非0,一列代表乙個樣本,為0,一行代表乙個樣本

eigvals,eigvects=np.linalg.eig(np.mat(covmat))#求特徵值和特徵向量,特徵向量是按列放的,即一列代表乙個特徵向量

eigvalindice=np.argsort(eigvals) #對特徵值從小到大排序

n_eigvalindice=eigvalindice[-1:-(n+1):-1] #最大的n個特徵值的下標

n_eigvect=eigvects[:,n_eigvalindice] #最大的n個特徵值對應的特徵向量

lowddatamat=newdata*n_eigvect #低維特徵空間的資料

reconmat=(lowddatamat*n_eigvect.t)+meanval #重構資料

return lowddatamat,reconmat

選擇主成分個數:

def

percentage2n

(eigvals,percentage):

sortarray=np.sort(eigvals) #公升序

sortarray=sortarray[-1::-1] #逆轉,即降序

arraysum=sum(sortarray)

tmpsum=0

num=0

for i in sortarray:

tmpsum+=i

num+=1

if tmpsum>=arraysum*percentage:

return num

defpca

(datamat,percentage=0.99):

newdata,meanval=zeromean(datamat)

covmat=np.cov(newdata,rowvar=0) #求協方差矩陣,return ndarray;若rowvar非0,一列代表乙個樣本,為0,一行代表乙個樣本

eigvals,eigvects=np.linalg.eig(np.mat(covmat))#求特徵值和特徵向量,特徵向量是按列放的,即一列代表乙個特徵向量

n=percentage2n(eigvals,percentage) #要達到percent的方差百分比,需要前n個特徵向量

eigvalindice=np.argsort(eigvals) #對特徵值從小到大排序

n_eigvalindice=eigvalindice[-1:-(n+1):-1] #最大的n個特徵值的下標

n_eigvect=eigvects[:,n_eigvalindice] #最大的n個特徵值對應的特徵向量

lowddatamat=newdata*n_eigvect #低維特徵空間的資料

reconmat=(lowddatamat*n_eigvect.t)+meanval #重構資料

return lowddatamat,reconmat

PCA主成分分析原理

一 步驟 1.去除平均值 對特徵中心化處理 2.計算協方差矩陣 3.計算協方差矩陣的特徵值和特徵向量 4.將特徵值排序 5.保留前n個最大的特徵值對應的特徵向量 6.將原始特徵轉換到上面得到的n個特徵向量構建的新空間中 最後兩步,實現了特徵壓縮 二 原理 1 pca的主要思想是將n維特徵對映到k維上...

pca主成分分析 PCA主成分分析(中)

矩陣 matrix,很容易讓人們想到那部著名的科幻電影 駭客帝國 事實上,我們又何嘗不是真的生活在matrix中。機器學習處理的大多數資料,都是以 矩陣 形式儲存的。矩陣是向量的組合,而乙個向量代表一組資料,資料又是多維度的。比如每個人的都具有身高 體重 長相 性情等多個維度的資訊資料,而這些多維度...

PCA演算法(主成分分析)

principle component analysis 顧名思義,是通過分析向量空間的主成分,將主成分提取出來,不重要的成分略去,從而達到降維壓縮資訊的目的。那什麼才是主成分呢?大家應該知道,乙個空間會有自己的一組基向量,空間中的任何乙個向量都可以通過基向量的組合來表示。舉個栗子,假如我們有一組2...