❶ python pca怎麼得到主成份
一般步驟來實現PCA演算法
(1)零均值化
假如原始數據集為矩陣dataMat,dataMat中每一行代表一個樣本,每一列代表同一個特徵。零均值化就是求每一列的平均值,然後該列上的所有數都減去這個均值。也就是說,這里零均值化是對每一個特徵而言的,零均值化都,每個特徵的均值變成0。實現代碼如下:
[python]view plain
defzeroMean(dataMat):
meanVal=np.mean(dataMat,axis=0)#按列求均值,即求各個特徵的均值
newData=dataMat-meanVal
returnnewData,meanVal
函數中用numpy中的mean方法來求均值,axis=0表示按列求均值。
該函數返回兩個變數,newData是零均值化後的數據,meanVal是每個特徵的均值,是給後面重構數據用的。
(2)求協方差矩陣
[python]view plain
newData,meanVal=zeroMean(dataMat)
covMat=np.cov(newData,rowvar=0)
numpy中的cov函數用於求協方差矩陣,參數rowvar很重要!若rowvar=0,說明傳入的數據一行代表一個樣本,若非0,說明傳入的數據一列代表一個樣本。因為newData每一行代表一個樣本,所以將rowvar設置為0。
covMat即所求的協方差矩陣。
(3)求特徵值、特徵矩陣
調用numpy中的線性代數模塊linalg中的eig函數,可以直接由covMat求得特徵值和特徵向量:
[python]view plain
eigVals,eigVects=np.linalg.eig(np.mat(covMat))
eigVals存放特徵值,行向量。
eigVects存放特徵向量,每一列帶別一個特徵向量。
特徵值和特徵向量是一一對應的
(4)保留主要的成分[即保留值比較大的前n個特徵]
第三步得到了特徵值向量eigVals,假設裡面有m個特徵值,我們可以對其排序,排在前面的n個特徵值所對應的特徵向量就是我們要保留的,它們組成了新的特徵空間的一組基n_eigVect。將零均值化後的數據乘以n_eigVect就可以得到降維後的數據。代碼如下:
[python]view plain
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#重構數據
returnlowDDataMat,reconMat
代碼中有幾點要說明一下,首先argsort對特徵值是從小到大排序的,那麼最大的n個特徵值就排在後面,所以eigValIndice[-1:-(n+1):-1]就取出這個n個特徵值對應的下標。【python裡面,list[a:b:c]代表從下標a開始到b,步長為c。】
❷ python怎麼數據進行pca
基本步驟:
對數據進行歸一化處理(代碼中並非這么做的,而是直接減去均值)
計算歸一化後的數據集的協方差矩陣
計算協方差矩陣的特徵值和特徵向量
保留最重要的k個特徵(通常k要小於n),也可以自己制定,也可以選擇一個閾值,然後通過前k個特徵值之和減去後面n-k個特徵值之和大於這個閾值,則選擇這個k
找出k個特徵值對應的特徵向量
將m * n的數據集乘以k個n維的特徵向量的特徵向量(n * k),得到最後降維的數據。
其實PCA的本質就是對角化協方差矩陣。有必要解釋下為什麼將特徵值按從大到小排序後再選。首先,要明白特徵值表示的是什麼?在線性代數裡面我們求過無數次了,那麼它具體有什麼意義呢?對一個n*n的對稱矩陣進行分解,我們可以求出它的特徵值和特徵向量,就會產生n個n維的正交基,每個正交基會對應一個特徵值。然後把矩陣投影到這N個基上,此時特徵值的模就表示矩陣在該基的投影長度。
特徵值越大,說明矩陣在對應的特徵向量上的方差越大,樣本點越離散,越容易區分,信息量也就越多。因此,特徵值最大的對應的特徵向量方向上所包含的信息量就越多,如果某幾個特徵值很小,那麼就說明在該方向的信息量非常少,我們就可以刪除小特徵值對應方向的數據,只保留大特徵值方向對應的數據,這樣做以後數據量減小,但有用的信息量都保留下來了。PCA就是這個原理。
❸ matlab主成份分析法(PCA)提取特徵向量代碼,請matlab大神幫忙,先謝謝幫忙的人
MATLAB 2009a以後有自帶的主成分函數,自己在help里搜 princomp
❹ 求利用PCA提取多光譜圖像的特徵圖像matlab程序,例如提取一個多光譜圖像的一個波段或前4個特徵圖像。
雖然不知道樓主說啥,但看起來很厲害的樣子
❺ 採用PCA方法進行鳶尾花數據集的特徵提取及分類任務國外研究現狀
摘要 PCA演算法的必要性
❻ 如何用python實現pca降維
首先2個包:
importnumpyasnp
fromsklearn.decompositionimportPCA
然後一個m x n 的矩陣,n為維度,這里設為x。
n_components = 12 是自己可以設的。
pca=PCA(n_components=12)
pca.fit(x)
PCA(=True,iterated_power='auto',n_components=12,random_state=None,
svd_solver='auto',tol=0.0,whiten=False)
float_formatter=lambdax:"%.2f"%x
np.set_printoptions(formatter={'float_kind':float_formatter})
print'explainedvarianceratio:'
printpca.explained_variance_ratio_
print'cumulativesum:'
printpca.explained_variance_ratio_.cumsum()
❼ 如何用pca做人臉識別 python實現.帶客戶端的
基於特徵臉(PCA)的人臉識別方法
特徵臉方法是基於KL變換的人臉識別方法,KL變換是圖像壓縮的一種最優正交變換。高維的圖像空間經過KL變換後得到一組新的正交基,保留其中重要的正交基,由這些基可以張成低維線性空間。如果假設人臉在這些低維線性空間的投影具有可分性,就可以將這些投影用作識別的特徵矢量,這就是特徵臉方法的基本思想。這些方法需要較多的訓練樣本,而且完全是基於圖像灰度的統計特性的。目前有一些改進型的特徵臉方法。
比如人臉灰度照片40x40=1600個像素點,用每個像素的灰度值組成的矩陣代表這個人的人臉。那麼這個人人臉就要1600 個特徵。拿一堆這樣的樣本過來做pca,抽取得到的只是在統計意義下能代表某個樣本的幾個特徵。
人臉識別可以採用神經網 絡深度學習的思路,國內的ColorReco在這邊有比較多的案例。
❽ python如何實現pca分析
[coef,SCORE,latent] = princomp(A);
latentsum = sum(latent);
for i = 1:col%A的總列數
if sum(latent(1:i))/latentsum > threshold%閾值 eg:0.95
tranM = coef(:,1:i);
break;
end
end
B = A* tranM;
❾ matlab中使用快速pca提取特徵
1、參數mA代表A的均值,也就是mean(A)。
其實這個參數完全沒必要,因為可以從參數A計算得到。
2、解釋一下你問的兩個語句的含義:
Z=(A-repmat(mA,m,1)); 作用是去除直流成分
T=Z*Z'; 計算協方差矩陣的轉置
3、關於函數的調用:
MATLAB統計工具箱中有函數princomp,也是進行主成分分析的(2012b之後有函數pca),基本調用格式:
[pc,score]=princomp(x)
其中,輸入參數x相當於你這個函數的A,輸出參數score相當於你這里的pcaA,而pc大致相當於你這里的V(符號相反)。具體說明請參考函數的文檔。
❿ python pca 特徵值怎麼求
主要是用來降低數據集的維度,然後挑選出主要的特徵。
原理簡單,實現也簡單。關於原理公式的推導,本文不會涉及,可以參考文獻,也可以去Wikipedia,這里主要關注實現,算是鍛煉一下自己。