特征抽取与SVM在人脸识别的应用Word文件下载.docx
《特征抽取与SVM在人脸识别的应用Word文件下载.docx》由会员分享,可在线阅读,更多相关《特征抽取与SVM在人脸识别的应用Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
即核函数的基本思想。
假设中心化后的样本集合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:
%%预处理数据
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,因为假如前面都不是,那就是最后一类
size(svmStructs,1)%每一个分类器分类
svm_struct=svmStructs{i};
Group=svmclassify(svm_struct,testX);
predictMatrix(:
i)=Group;
clearGroupisvm_struct;
%%获取到第一个1出现的位置,就是分类的类别
postion=zeros(size(testY));
fori=1:
size(predictMatrix,1)
temp=predictMatrix(i,:
one=find(temp==1);
postion(i,1)=one
(1);
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)。