下面是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...