① 人臉識別PCA演算法,子空間和投影到子空間怎麼理解
PCA人臉識別是把所有圖像看做是一個樣本,每張圖像看成一行向量,有N張圖像就有N行,所以這個樣本就可以看成是一個N行的矩陣。先求出這個矩陣的協方差矩陣,再求出這個協方差矩陣的特徵值,選擇特徵值中前m個最大的特徵值,這前m個最大的特徵值,每個都對應一個特徵向量(特徵向量也叫做特徵臉),這m個特徵向量組成一個m行的特徵矩陣,這個特徵矩陣就是「子空間」,也叫做特徵臉空間。所謂投影到子空間,就是把樣本中的一張圖像看成一行向量,這個向量乘以特徵矩陣得到一個m維的向量,就是投影的結果,也是這張圖像的特徵值。
② 主成分分析PCA演算法:為什麼要對數據矩陣進行均值化
個人覺得
去均值化是為了方面後面的協方差,去均值化後各維度均值為零,
協方差中的均值也就是零了,方便求解。
具體,假設矩陣A去中心化後得到B,那麼B的協方差就是B*B的轉置
③ 關於PCA covariance matrix eigenvector的問題
在一維空間,數據點是有序列的。a>b就代表a在b的右邊。
但在高維空間里,對數據的描述或者說比較就沒有一個統一的標准。如果我們要把一個數據點從高維降下來,就需要舍棄一些信息,但同時為了表明我們的舍棄是有道理的,我們就要說,盡管我們降了,但是什麼什麼還被保留的最好。比如pca是保留了convariance,MDS保留了距離信息等等。
pca的原理是做SVD轉換,X = UEV' (X是原數據,也就是高維空間里的那些點)
U*U'=I, 也就是U轉置=U逆,E是diagonal,V是the conjugate transpose of V,這個概念如果有興趣自己再去看,PCA裡面不需要這個性質。
那麼,如果E是從大到小排列的(注意E只有對角線,也就是eigenvalue)保留W最先的幾個元素就代表了我們保證了
W*E*E'*W'損失最小(W,E,E』,W』都只有最大的幾個)
那麼這個式子代表什麼呢?就是X*X',也就是convariance matrix
④ 用於圖像壓縮的PCA演算法是基於協方差矩陣的還是基於相關系數矩陣 這兩種方法有什麼區別嗎
協方差矩陣呀 根據定義就可以知道兩者的不同呀 協方差本質是統計學里的最小方差吧
⑤ 什麼「PCA演算法」。
有關圖像融合的一種線性演算法,在MATLAB中是一種演算法融合程序。
⑥ matlab人臉識別系統pca 演算法
%一個修改後的PCA進行人臉識別的Matlab代碼
% calc xmean,sigma and its eigen decomposition
allsamples=[];%所有訓練圖像
for i=1:40
for j=1:5
a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm'));
% imshow(a);
b=a(1:112*92); % b是行矢量 1×N,其中N=10304,提取順序是先列後行,即從上到下,從左到右
b=double(b);
allsamples=[allsamples; b]; % allsamples 是一個M * N 矩陣,allsamples 中每一行數據代表一張圖片,其中M=200
end
end
samplemean=mean(allsamples); % 平均圖片,1 × N
for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean是一個M × N矩陣,xmean每一行保存的數據是「每個圖片數據-平均圖片」
end;
sigma=xmean*xmean'; % M * M 階矩陣
[v d]=eig(sigma);
d1=diag(d);
[d2 index]=sort(d1); %以升序排序
cols=size(v,2);% 特徵向量矩陣的列數
for i=1:cols
vsort(:,i) = v(:, index(cols-i+1) ); % vsort 是一個M*col(注:col一般等於M)階矩陣,保存的是按降序排列的特徵向量,每一列構成一個特徵向量
dsort(i) = d1( index(cols-i+1) ); % dsort 保存的是按降序排列的特徵值,是一維行向量
end %完成降序排列
%以下選擇90%的能量
dsum = sum(dsort);
dsum_extract = 0;
p = 0;
while( dsum_extract/dsum < 0.9)
p = p + 1;
dsum_extract = sum(dsort(1:p));
end
i=1;
% (訓練階段)計算特徵臉形成的坐標系
while (i<=p && dsort(i)>0)
base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base是N×p階矩陣,除以dsort(i)^(1/2)是對人臉圖像的標准化,詳見《基於PCA的人臉識別演算法研究》p31
i = i + 1;
end
% add by wolfsky 就是下面兩行代碼,將訓練樣本對坐標繫上進行投影,得到一個 M*p 階矩陣allcoor
allcoor = allsamples * base;
accu = 0;
% 測試過程
for i=1:40
for j=6:10 %讀入40 x 5 副測試圖像
a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm'));
b=a(1:10304);
b=double(b);
tcoor= b * base; %計算坐標,是1×p階矩陣
for k=1:200
mdist(k)=norm(tcoor-allcoor(k,:));
end;
%三階近鄰
[dist,index2]=sort(mdist);
class1=floor( index2(1)/5 )+1;
class2=floor(index2(2)/5)+1;
class3=floor(index2(3)/5)+1;
if class1~=class2 && class2~=class3
class=class1;
elseif class1==class2
class=class1;
elseif class2==class3
class=class2;
end;
if class==i
accu=accu+1;
end;
end;
end;
accuracy=accu/200 %輸出識別率
函數調用是定義函數,然後用函數名進行調用就可以了
我的QQ382101365
⑦ 產品中的主要成分分析哪裡能測
首先介紹一下主成分分析的主要思想:將n維特徵映射到k維上,映射後的k維特徵也即主成分。
PCA降維的主要過程是:(1)從原始空間中順序地找出一組相互正交的坐標軸。其中,第一個新坐標軸選擇是原始數據中方差最大的方向,第二個新坐標軸選取是與第一個坐標軸正交的平面中使得方差最大的,第三個軸是與第1,2個軸正交的平面中方差最大的。依次類推,可以得到n個這樣的坐標軸。(2) 只保留前面k個含有絕大部分方差的坐標軸。事實上,在獲取新的坐標軸的過程中,我們會發現:大部分方差包含在前面k個坐標軸中,後面的坐標軸所含的方差幾乎為0。因此,PCA相當於只保留包含絕大部分方差的維度特徵,而忽略包含方差幾乎為0的特徵維度,實現對數據特徵的降維處理。
可以通過計算數據矩陣的協方差矩陣,然後得到協方差矩陣的特徵值特徵向量,選擇特徵值最大(即方差最大)的k個特徵所對應的特徵向量組成的矩陣。這樣就可以將數據矩陣轉換到新的空間當中,實現數據特徵的降維。
得到協方差矩陣的特徵值和特徵向量有特徵值分解協方差矩陣和奇異值分解協方差矩陣這兩種方法。在這里僅介紹基於特徵值分解協方差矩陣實現PCA演算法的過程, 並舉例講解主成分分析法的使用過程。
基於特徵值分解協方差矩陣實現PCA演算法的過程如下: 前提:輸入數據集 ,目標:降到k維。
(1)將數據去中心化,即每一位特徵減去各自的平均值。
(2) 計算協方差矩陣 。
(3)用特徵值分解方法求協方差矩陣 的特徵值與特徵向量。
(4) 對特徵值從大到小排序,選擇其中最大的k個。然後將其對應的k個特徵向量分別作為行向量組成特徵向量矩陣P。
(5)將數據轉換到k個特徵向量構建的新空間中,即Y=PX。
⑧ unscrambler中的光譜矩陣是什麼意思
二維光譜技術
指用一個低頻率的擾動作用在樣品上,通過測定比振動弛豫慢許多,但與分子尺寸運動緊密相關的不同弛豫過程的紅外振動光譜,將數學相關分析技術用於紅外光譜中得到二維紅外相關光譜圖。這些慢的弛豫過程可以用現有的普通紅外光譜儀,通過簡單的時間分辨技術加以研究。
二維光譜技術的基本概念最早起源於30年前的核磁共振(NMR)領域。二維核磁譜是通過多脈沖技術激發核自旋,採集時間域上原子核自旋弛豫過程的衰減信號,經雙傅里葉變換得到的。其顯著的特點是:將光譜信號擴展到第二維上以提高光譜解析度,簡化含有許多重疊峰的復雜光譜;通過選擇相關的光譜信號鑒別和研究分子內和分子間的相互作用。各種二維核磁共振技術(2DNMR)在核磁共振光譜學家的努力下已建立起來並得到了廣泛的應用。但是使人感到奇怪的是,盡管二維光譜在核磁領域蓬勃發展,但二維相關技術卻一直沒能深入其他的光譜分支,如紅外、拉曼、紫外、熒光等。
阻礙二維技術發展的一個重要原因是普通光譜的時間標尺(timescale)要比核磁的時間標尺短得多。舉例來說,紅外吸收光譜觀察的分子振動時間標尺在皮秒數量級,而核磁中時間標尺數量級一般在毫秒到微秒間。因此基於多重射頻脈沖勵磁技術的二維核磁技術可以成功地在精密而昂貴的核磁儀器上實現,卻不能在普通的紅外、拉曼和紫外等儀器上實現。
1986年,Noda就二維NMR技術的理論提出了一個概念性的突破,他把磁實驗中的多重射頻勵磁看作是一種對體系的外部擾動。以這種全新的視角簡化看待二維核磁技術,就可以輕易地設計出完全不同的二維光譜實驗技術。
為此,1989年Noda提出一項新的實驗方案,用一個低頻率的擾動作用在樣品上,通過測定比振動弛豫慢許多,但與分子尺寸運動緊密相關的不同弛豫過程的紅外振動光譜,將數學相關分析技術用於紅外光譜中得到二維紅外相關光譜圖。這些慢的弛豫過程可以用現有的普通紅外光譜儀,通過簡單的時間分辨技術加以研究。於是,最初的二維紅外相關光譜技術的理論就此誕生。
然而最初的二維紅外相關光譜技術的理論中,外擾的波形僅局限於正弦波形。這就極大地限制了二維相關技術在普通光譜上的進一步發展。1993年,Noda再次對已有理論進行修正,破除了外擾波形的局限,並且用Hilbert轉換替代了原先二維相關分析中的Fourier轉換,由此縮短了二維處理的時間,並把新的理論正式命名為「廣義二維光譜技術技術」。至此,應用的外擾的波形可以多種多樣,從簡單的正弦波、一串脈沖,到隨機的噪音或靜態的物理變化,均可應用於外擾。如電場、熱、磁、化學、機械甚至聲波等變化。每種外擾對體系的影響是獨特而有選擇性的,由特定的宏觀刺激和微觀或分子級別的相互作用機理決定。此後,這種二維相關分析技術開始逐漸適用於拉曼、熒光、X射線衍射、GPC等其它譜學技術中。
二維光譜技術的相關方程編輯
二維光譜技術的基本想法實際非常簡單。就是考慮由外擾引起的外擾變數t在Tmin和Tmax間變化時光譜強度y(ν,t)的變化。體系對外擾的反應經常表現為有特徵的光譜變化,稱作動態光譜(dynamicspectrum)。因此,二維相關實際上測的就是動態光譜的變化。外擾變數t經常被當作時間,但它也可以是任意其它合理的物理變數,如溫度、壓強、濃度、電壓等。光學變數ν可以是任何合適的光譜量化系數,如拉曼位移、紅外或近紅外波數、紫外波長,甚至是X光散射角。體系受外擾引起的動態光譜y(ν,t)可以正式定義為:
y(ν,t)=y(ν,t)-y(ν)Tmin≤t≤Tmax0otherwise(1)
y(ν)是體系的參比光譜。參比光譜的選擇並不一定要嚴格一致,在大多數情況下,我們使用光譜的平均值,定義為:
y(ν)=1Tmax-Tmin∫TmaxTminy(ν,t)dt(2)
在某些應用中,我們可以通過選擇在某個參考點(t=Tref)觀察到的光譜作為參考光譜。參考點可以選擇實驗的初始狀態,即在施以外擾前的足夠長的時間(Tref※-∞),或是在實驗開始時(Tref=Tmin),或是在實驗結束時(Tref=Tmax),甚至是在體系完全不受外擾影響的時候(Tref※+∞)。當然參比光譜也可以簡單地設為零,這樣動態光譜就和我們觀察到的光譜強度完全一致了。二維相關強度X(ν1,ν2)代表在一定外部變化t的區間內,對不同光學變數ν1和ν2的光學強度變化y(ν1,t)的函數進行比較。由於相關函數是計算兩個互不依賴的光學變數ν1和ν2光學強度的變化,因此我們可以將X(ν1,ν2)轉變為復數形式:X(ν1,ν2)=Υ(ν1,ν2)+iΧ(ν1,ν2)(3)
組成復數的相互垂直的實部和虛部分別被稱作同步和非同步二維相關強度。同步二維相關強度Υ(ν1,ν2)表示隨著t值的變化,兩個在不同光學變數下測量的互不依賴的光學強度的相似性變化。恰恰相反,非同步二維相關強度Χ(ν1,ν2)表示光學強度的相異性變化。廣義二維相關函數及其定義的同步和非同步相關強度如下:X(ν1,ν2)=1π(Tmax-Tmin)∫∞0Y1(ω)·Y*2(ω)dω(4)
Y1(ω)=∫∞-∞y(ν1,t)e-iωtdt(5)
Y*2(ω)=∫∞-∞y(ν2,t)e+iωtdt(6)
Y(ω)是光強y(ν,t)經傅立葉變換得到,傅立葉頻率ω代表y(ν,t)隨外擾t變化的個體頻率。由於二維相關光強的計算過程必須描繪二維光譜中的每一點,即使使用快速傅立葉演算法的計算步驟來按照公式(4)計算廣義二維光譜技術,數據也會多得難以想像,所以我們在計算過程中應用了適當的估算。我們在外擾t變化區間Tmin和Tmax內等間隔地選取m個動態光譜,Δt=(Tmax-Tmin)(m-1),同步二維相關強度可以簡單地表示為:Υ(ν1,ν2)=1m-1∑mj=1yj(ν1)·yj(ν2)(7)
yj(νi)是外擾tj點的光學強度。
yj(νi)=y(νi,tj)i=1,2(8)
如果光譜系列並不是在外擾t上等間隔選取的,那麼我們就必須進行一定調整。比如我們可以通過內插等方法使本來不均勻的光譜系列變得均勻。同步光譜就按照這個新的系列由公式(7)給出。非同步二維相關光強的計算就更加困難。有許多估算方法可以對非同步光譜進行合理的估算,然而最簡單有效的估算方法由下式給出:Χ(ν1,ν2)=1m-1∑mj=1yj(νi)·∑mk=1Njk·yk(ν2)(9)其中Njk代表Hilbert-Noda轉變矩陣的第j行第k列的元素,表示為:Njk=0j=k1π(k-j)otherwise(10)
二維光譜技術譜圖最常見的表示形式就是二維contourmap。
當協方差為0時,表示兩個欄位線性不相關。
總結一下,PCA的優化目標是:
將一組N維向量降為K維(K大於0,小於N),其目標是選擇K個單位正交基,使得原始數據變換到這組基上後,各欄位兩兩間協方差為0,而欄位的方差則盡可能大。
⑨ 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。】
⑩ PCA的演算法是什麼
PCA是主成分分析法,目的就是對高維數據進行降維,提取主要成分。我也是最近才開始看這個的,我也不是很明白。網上應該有這方面的代碼。可以去程序員聯合開發網看看,http://www.pudn.com/downloads188/sourcecode/windows/detail882107.html
http://www.pudn.com/downloads102/sourcecode/graph/texture_mapping/detail415764.html