PCA降维+SVM 算法进行人脸识别
SVM基本原理:
给定训练样本集,在特征空间上找到一个分离超平面,将样本点分到不同的类。 其中当且存在 唯一 的分类超平面, 使得样本点距离分类超平面的距离最大。其中距离超平面最近的点为该超平面的支持向量。
找到超平面后,对于待测点,通过计算该点相对于超平面的位置进行分类。当点距离超平面的距离越大,表示分类预测的确信程度越高。
惩罚参数表示对误分类点的惩罚权重。 惩罚参数的设置相当与在训练集的误差和间隔平面的距离上做一个折衷选择。当惩罚参数过大,容易出现过拟合的情况, 预测时,易导致误分情况。减小惩罚参数,开始容忍样本点落入间隔平面之内,惩罚参数过小会导致训练集的样本点对结果影响变小,分类功能丧失。因此,选择合适惩罚参数,会大大提高分类器的性能,非常关键。 实际运用过程中,采用交叉验证的方法可以选择合适的参数 C。
实际的训练集通常是线性不可分,这就需要运用到核技巧将原空间中点映 射到线性可分的高维空间。 常用的核 函数有:线性核函数、多项式核函数,高斯核函数( RBF 核函数 ), sigmoid 核函数 。
人脸库:
本文所用的人脸库来自埃塞克斯大学的faces人脸库,从中选取了13张人脸,每张人脸有10张图片,选取前5张作为训练集,后5张作为测试集,来检验识别的准确性。最终的人脸识别测试则另选10张图片以外的图片。
在13个人的5个测试图片检验下,SVM算法可以得到100%的准确性。
如图所示,是利用SVM算法进行人脸识别的效果
matlab代码如下(列出了PCA降维以及识别部分的函数):
%%
clc,clear
npersons=13;%选取13个人的脸
global imgrow;
global imgcol;
imgrow=200;
imgcol=