① 人脸识别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