基于L2正则化项的正交人脸识别算法matlab仿真

目录

1.L2正则化项

2.PCA(主成分分析)

3.Fisher准则

4.正交人脸识别算法

5.MATLAB程序

6.仿真结果


       人脸识别是一种生物识别技术,通过分析和比较人脸的视觉特征来识别人或验证人的身份。人脸识别技术通常包括以下几个步骤:1.人脸检测:从图像或视频流中检测并定位人脸。2.特征提取:从检测到的人脸中提取关键特征,如眼睛、鼻子、嘴巴等区域的形状和位置。3.特征匹配:将提取到的特征与数据库中的已知人脸特征进行比较,以确认身份或进行分类。4.决策:根据匹配结果做出最终决策,如身份确认、访问控制等。

1.L2正则化项

       L2正则化是在模型训练过程中引入的一个惩罚项,它通过对权重向量的欧几里得范数进行平方并乘以一个小的正数λ(称为正则化系数),来防止过拟合。这种正则化的形式可以写作:

       其中ED​(w) 是数据拟合项,即模型在训练集上的误差损失;λ/2​∥w∥2则是正则化项,用于控制模型复杂度,防止过拟合。

2.PCA(主成分分析)

       PCA是一种降维技术,通过找到数据集方差最大的方向来进行降维处理。给定一组高维数据 X,PCA的目标是找到一组新的基,使得在这个新基下的投影能够最大化保留原始数据的方差。PCA可以表示为求解协方差矩阵 C 的特征值和特征向量的问题:

3.Fisher准则

       Fisher准则是一种用于分类器设计的方法,它通过最大化类间散度与类内散度之比来实现特征选择或特征提取。具体来说,假设我们有两个类别的数据,分别用SW​ 和SB​ 表示类内散度矩阵和类间散度矩阵,则Fisher准则可以定义为:

4.正交人脸识别算法

       正交人脸识别算法结合了PCA和Fisher准则的优点,通过PCA进行降维处理,再利用Fisher准则进行特征选择,从而实现高效的人脸识别。在这个过程中,我们还可以加入L2正则化来进一步提升模型的泛化能力。假设我们已经得到了PCA后的特征向量U,那么我们可以通过以下步骤来构建最终的分类器:

  1. 计算每个类别的均值向量μi​ 在PCA空间中的表示;
  2. 使用Fisher准则优化目标函数J(w) 来找到最优的特征向量w;
  3. 在测试阶段,将新的样本x 投影到PCA空间,并使用w 进行分类决策。 

5.MATLAB程序

 
% 定义正则化系数 lmda
% 正则化
lmda=1;

% 读取数据集并划分训练集和测试集(各占50%)
% func_read_images 是一个假设存在的函数,用于读取图像数据
[Ptrain,Ttrain,Ptest,Ttest]=func_read_images('Yale/');
%测试样本中加入干扰
Ptest = Ptest+200*randn(size(Ptest));

% 计算 Mat_face 矩阵,用于后续的预测
Mat_face=inv(Ptrain'*Ptrain+lmda*eye(size(Ptrain,2)))*Ptrain'*Ptest;    


% 对每个测试样本执行识别过程
for i=1:size(Ptest,2)
    % 获取当前测试样本
    Labs          = Ptest(:,i);    
    % 估计当前样本在训练集中的表示
    Lab_est       = Mat_face(:,i);
    % 使用 func_face_reg 函数来估计最相似的人脸类别
    [Yest,Vsames] = func_face_reg(Ptrain,Lab_est,Labs,Ttrain);    
    % 存储预测结果
    Predict(i,1)  = Yest;
    % 存储相似度得分
    S(i,:)        = Vsames;
    Rate(i)       = mean(Predict(1:i)==Ttest(1:i));
    % 输出当前识别率
    fprintf('%g 识别率 : %f \n' ,i, Rate(i))
end

figure;
plot(Rate)
xlabel('NO.');
ylabel('识别率');

%ROC曲线
% label 是类别标签
label=1:size(S,2);
for i=1:size(S,2)
    % 构建指示向量 I,I 中的 1 表示当前类别,0 表示其他类别
    Test_labs          = Ttest==i;
    % 提取当前类别的得分
    Test_score(:,1)    = S(:,i);
    
    % 提取其他类别的最小得分
    Test_score(:,2)    = min(S(:,(label~=i))')';
    
    % 构建目标向量 tt,其中 1 表示当前类别,0 表示其他类别
    Lab_reg            = zeros(size(S,1),2);
    Lab_reg(Test_labs) = 1;    
        
    % 计算 ROC 曲线
    [tpr,fpr,~] = roc(Lab_reg',-Test_score');
    
    % 存储 TPR 和 FPR
    TPR(i,:)=tpr{1};
    FPR(i,:)=fpr{1};
end
    
% 绘制多类别 ROC 曲线
figure
plot(mean(FPR,1),mean(TPR,1),'linewidth',2)

title('Roc曲线');
xlabel('FP');
ylabel('TP');

%混淆矩阵
TT1=zeros(size(S));
TT2=zeros(size(S));

% 根据实际类别和预测类别构建混淆矩阵
for i=1:size(S,1)
    TT1(i,Ttest(i))=1;
    TT2(i,Predict(i))=1;
end

% 计算混淆矩阵
[c,cm,ind,per] = confusion(TT1',TT2');
% 显示混淆矩阵
figure;
imagesc(cm);
title('混淆矩阵');
xlabel('真实分类');
ylabel('预测');
up4183

6.仿真结果

       该方法通过结合PCA和Fisher准则,并利用L2正则化来提高模型的鲁棒性和泛化能力,在人脸识别任务中取得了良好的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值