特征抽取与SVM在人脸识别的应用.docx
- 文档编号:6243949
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:11
- 大小:94.96KB
特征抽取与SVM在人脸识别的应用.docx
《特征抽取与SVM在人脸识别的应用.docx》由会员分享,可在线阅读,更多相关《特征抽取与SVM在人脸识别的应用.docx(11页珍藏版)》请在冰豆网上搜索。
特征抽取与SVM在人脸识别的应用
特征抽取与SVM在人脸识别的应用
1实验目的:
1.通过特征抽取与SVM对人脸数据集进行识别
2.对比不同特征提取方法的效果
3.对比不同SVM分类精度效果
2实验原理:
2.1PCA
PCA是主成分分析,主要用于数据降维,对于一系列sample(样本)的feature(特征)组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的sample中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。
所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使feature留下的都是“精品”,而且计算量也变小了。
对于一个k维的feature来说,相当于它的每一维feature与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个feature在某些维上方差大,而在某些维上方差很小。
例如,一个45度倾斜的椭圆,在第一坐标系,如果按照x,y坐标来投影,这些点的x和y的属性很难用于区分他们,因为他们在x,y轴上坐标变化的方差都差不多,我们无法根据这个点的某个x属性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴为x轴,则椭圆在长轴上的分布比较长,方差大,而在短轴上的分布短,方差小,所以可以考虑只保留这些点的长轴属性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好!
所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将feature从高维降到低维。
投影矩阵也可以叫做变换矩阵。
新的低维特征必须每个维都正交,特征向量都是正交的。
通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。
特征向量的选择取决于协方差矩阵的特征值的大小。
2.2KPCA
KPCA的公式推导和PCA十分相似,只是存在两点创新:
1.为了更好地处理非线性数据,引入非线性映射函数,将原空间中的数据映射到高维空间,注意,这个映射函数是隐性的,我们不知道,也不需要知道它的具体形式是啥。
2.引入了一个定理:
空间中的任一向量(哪怕是基向量),都可以由该空间中的所有样本线性表示,这点对KPCA很重要。
即核函数的基本思想。
假设中心化后的样本集合X(d*N,N个样本,维数d维,样本“按列排列”),现将X映射到高维空间,得到,假设在这个高维空间中,本来在原空间中线性不可分的样本现在线性可分了,然后通过PCA降维。
2.3LDA
线性判别式分析(LinearDiscriminantAnalysis,LDA),也叫做Fisher线性判别(FisherLinearDiscriminant,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的。
性鉴别分析的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间中有最佳的可分离性。
因此,它是一种有效的特征抽取方法。
使用这种方法能够使投影后模式样本的类间散布矩阵最大,并且同时类内散布矩阵最小。
就是说,它能够保证投影后模式样本在新的空间中有最小的类内距离和最大的类间距离,即模式在该空间中有最佳的可分离性。
2.4SVM
Vapnik等人在多年研究统计学习理论基础上对线性分类器提出了另一种设计最佳准则。
其原理也从线性可分说起,然后扩展到线性不可分的情况。
甚至扩展到使用非线性函数中去,这种分类器被称为支持向量机(SupportVectorMachine,简称SVM)。
支持向量机的提出有很深的理论背景。
支持向量机方法是在后来提出的一种新方法。
SVM的主要思想可以概括为两点:
⑴它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能.
2.5PSVM
标准的近似支持向量机((PSVM)用求解正则化最小二乘问题代替了求解二次规划问题,它可以得到一个解析解,从而减少训练时间。
2.6SVM多分类
SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。
目前,构造SVM多类分类器的方法主要有两类:
一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。
这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。
Ⅰ:
一对多法(one-versus-rest,简称1-v-rSVMs)。
训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。
分类时将未知样本分类为具有最大分类函数值的那类。
Ⅱ:
一对一法(one-versus-one,简称1-v-1SVMs)。
其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。
当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。
Libsvm中的多类分类就是根据这个方法实现的。
Ⅲ:
层次支持向量机(H-SVMs)。
层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。
3.实验环境:
电脑型号:
ThinkPadT450
CPU:
IntelCorei5-5200U@2.20GHz双核
内存:
12GB
系统版本:
Windows7Enterprise64bitSP1(DirectX11)
Matlab版本:
MATLABR2012b
数据集:
Yale人脸库(美国):
由耶鲁大学计算视觉与控制中心创建,包含15位志愿者每人11张照片的165张图片,包含光照表情和姿态的变化。
在实验中我们拆分了这165个数据集,将每个人的最后一张照片作为测试集,其他照片作为训练集。
4.实验
4.1降维预处理
首先对数据集进行PCA或者KPCA的降维,然后再对降维后的数据进行LDA二次降维。
拆分数据集得到训练集和测试集。
4.2构建多分类器
通过one-vs-rest方法,构建多分类器。
15类数据构建14个分类器。
4.3分类预测
对降维后的数据进行预测,对比,计算出精确度。
4.4维度,精度,信息保留量,时间等效果比较
通过参数,不同的方法画出对比图。
4.5部分代码
preprocess.m:
%先通过PCA提取再通过LDA降维,防止Sw奇异
%正确率100%
clear
clc
load('Yale_32x32.mat');
%选取测试集,每一类的最后一个
testNum=[11,22,33,44,55,66,77,88,99,110,121,132,143,154,165];
%注释掉绘画人脸部分
%{
%画出待测试的人脸
testPeople=fea(testNum,:
);
fori=1:
size(testNum,2)
people=reshape(testPeople(i,:
),32,32);
subplot(3,5,i);
imshow(people/256);
holdon;
end
%}
trainY=gnd;
trainX=fea;
%PCA先提取
%options.PCARatio=0.95;%71维
options.ReducedDim=90;
[eigvector,eigvalue,messageScala,elapse]=PCA(trainX,options);
messageScala
elapse
trainX=trainX*eigvector;
cleareigvectoreigvalueoptions;
%LDA获取降维后的数据
[w]=LDA(trainX,trainY,13);
trainX=trainX*w;
clearw;
%拆分训练集和测试集
testX=trainX(testNum,:
);
testY=trainY(testNum,:
);
trainX(testNum,:
)=[];
trainY(testNum,:
)=[];
clearfea;
cleargnd;
predict_traditonal_svm.m:
%%预处理数据
clear
clc
tic;%计时器开始
preprocess;
%%得到每个分类器对每个样本的预测
[svmStructs]=multi_traditional_svm(trainX,trainY);%多分类调用得到svmStruct的数组
predicted=zeros(size(testY));%先定义空的预测
types=unique(testY);%获取类型
predictMatrix=zeros(size(testY,1),size(types,1));%定义预测矩阵
predictMatrix(:
end)=1;%最后一列为1,因为假如前面都不是,那就是最后一类
fori=1:
size(svmStructs,1)%每一个分类器分类
svm_struct=svmStructs{i};
Group=svmclassify(svm_struct,testX);
predictMatrix(:
i)=Group;
end
clearGroupisvm_struct;
%%获取到第一个1出现的位置,就是分类的类别
postion=zeros(size(testY));
fori=1:
size(predictMatrix,1)
temp=predictMatrix(i,:
);
one=find(temp==1);
postion(i,1)=one
(1);
end
clearitempone;
%%将位置转化为类别
predicted=types(postion);
clearitemppostion;
%%
err=sum(predicted~=testY);
Accuracy=1-err/size(testY,1);
Rightrating=strcat(num2str(Accuracy*100),'%');
toc;
fprintf('正确率为%s\n',Rightrating);
5.实验结果比较
5.1传统PCA与KPCA的维度信息量保留对比
图1:
传统PCA与KPCA的维度信息量保留对比图
对于PCA方法而言,信息保留量指协方差阵的保留的特征值之和与总特征值之和的比值。
信息保留量越大,则代表信息原数据降维后的损失信息越小。
如图所示,信息保留量随着维数的增大而增大。
传统PCA与多项式核的PCA信息保留量最大,能够达到95%以上,且传统PCA相比较多项式核PCA在相同维数时在人脸数据集上能够保留多一些的信息量。
而高斯核的KPCA则效果很差。
5.2传统SVM维度与精度对比
图2:
传统SVM维度与精度对比图
如图所示,在传统SVM中,PCA的预测精度一直领先于多项式核PCA与高斯核PCA。
5.3PSVM维度与精度对比
图3:
PSVM维度与精度对比图
如图所示,在PSVM中,传统PCA的预测精度也一直领先于多项式核PCA与高斯核PCA。
结合图2中传统SVM维度与精度对比图,实验表明不论是基于何种的SVM分类,都是传统PCA的性能优越于多项式核PCA与高斯核PCA。
5.4不同SVM在各降维方法中精度对比
图4:
传统PCA降维不同SVM正确率对比图
图5:
KPCA(多项式核)降维不同SVM正确率对比图
图6:
KPCA(高斯核)降维不同SVM正确率对比图
在图4,图5,图6中,数据表明不论是传统PCA,多项式核PCA,还是高斯核PCA,传统的SVM都比PSVM分类精度更高。
经过实验对比,发现:
基于第五项的不同方向的实验数据比较,数据表明在对于人脸数据集中,传统PCA与传统SVM对人脸分类又最好的分类效果。
6.时间复杂度分析
在运行KPCA时,处理相同的数据集,耗费的时间约为0.02秒。
而PCA的耗费时间约为0.07秒。
从算法时间复杂度分析上解释,对于由n×m的原始数据(n为样本个数,m为样本维数),PCA中计算协方差矩阵需要O(nm),而对于m×m的协方差矩阵进行特征分析需要O(m3),所以PCA总共需要的时间复杂度为O(nm+m3),KPCA对n×n的矩阵进行特征分析需要O(n3),计算核需要O(mn2),所以KPCA的时间复杂度时O(mn2+n3)。
对逼两个时间复杂度,在实际的木材缺陷识别中,样本图片拉成一维后维数极高,比样本数高出太对,所以PCA的速度相对KPCA数度慢了许多。
对于LDA算法,计算协方差矩阵需要O(nm),对m×m的协方差阵再次进行特征是分解时间复杂度为O(m3),所以LDA的总计时间复杂度为O(nm+m3)。
相比较于KPCA的O(mn2+n3),大大超出。
在SVM预测中,处理相同的测试集,PSVM需要约0.01秒,而传统SVM需要约0.07秒。
从时间复杂度上解释,PSVM使得SVM的时间复杂度由O(m2n)降到了O(np2/m)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 特征 抽取 SVM 识别 应用