机器学习之基于PCA的人脸识别

这篇具有很好参考价值的文章主要介绍了机器学习之基于PCA的人脸识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

PCA人脸数据降维

matlab代码实现 

思路分析 

PCA人脸重构

matlab代码实现 

思路分析 

PCA人脸可视化

matlab代码实现 

思路分析: 

PCA人脸识别

matlab代码实现 

思路分析 


PCA人脸数据降维

matlab代码实现 

pictures=dir('C:\Users\Yezi\Desktop\机器学习\实验1:PCA算法\face10080\*.bmp');
sample=[];% 样本矩阵
for i=1:length(pictures)
    picture=imread("C:\Users\Yezi\Desktop\机器学习\实验1:PCA算法\face10080\"+pictures(i).name);
    picture=double(picture);
    picture=picture(:);% 单张图片拉成列向量
    sample=[sample,picture];
end
% PCA 主流程
meanFace=mean(sample); % 求样本均值
meanFace=ones(size(sample,1),1)*meanFace;% 矩阵化样本均值
sample=sample-meanFace; % 样本中心化:减去样本均值
covMatrix=sample*sample';% 求样本的协方差矩阵
[egienvectors,diagonalMatrix]=eig(covMatrix);% 协方差矩阵的特征值分解
egienvalues=diag(diagonalMatrix);% 取特征值
[egienvalues,order]=sort(egienvalues,'descend');% 特征值降序排序
egienvectors=egienvectors(:,order);% 将特征向量按特征值降序排序

思路分析 

这段代码是一个简单的PCA(主成分分析)算法实现,用于对图像数据进行降维处理。下面是对代码进行逐行分析:

  1. pictures=dir('C:\Users\Yezi\Desktop\机器学习\实验1:PCA算法\face10080\*.bmp'); 这行代码使用dir函数获取指定文件夹中的所有.bmp格式的文件名,并将结果存储在pictures变量中。

  2. sample=[];% 样本矩阵 sample变量用于存储图像样本数据,初始化为空矩阵。

  3. for i=1:length(pictures) for循环遍历pictures中的每个文件名。

  4. picture=imread("C:\Users\Yezi\Desktop\机器学习\实验1:PCA算法\face10080\"+pictures(i).name); 该行代码使用imread函数读取指定路径下的图像文件,并将图像数据存储在picture变量中。

  5. picture=double(picture);picture转换为double类型,以便后续计算。

  6. picture=picture(:);% 单张图片拉成列向量picture变量转换为列向量的形式。

  7. sample=[sample,picture]; 将当前处理的图像样本添加到sample矩阵中。

  8. end for循环结束。

  9. meanFace=mean(sample); % 求样本均值 计算sample矩阵中每个特征的均值,结果存储在meanFace变量中。

  10. meanFace=ones(size(sample,1),1)*meanFace;% 矩阵化样本均值 将样本均值重复扩展为与sample矩阵相同大小的矩阵。

  11. sample=sample-meanFace; % 样本中心化:减去样本均值sample矩阵进行样本中心化处理,即将每个样本减去对应特征的均值。

  12. covMatrix=sample*sample';% 求样本的协方差矩阵 计算样本的协方差矩阵,即将样本矩阵乘以其转置。

  13. [egienvectors,diagonalMatrix]=eig(covMatrix);% 协方差矩阵的特征值分解 对协方差矩阵进行特征值分解,将特征向量存储在egienvectors中,特征值存储在diagonalMatrix的对角线上。

  14. egienvalues=diag(diagonalMatrix);% 取特征值 将特征值从diagonalMatrix的对角线提取出来,并存储在egienvalues中。

  15. [egienvalues,order]=sort(egienvalues,'descend');% 特征值降序排序 将特征值按降序进行排序,并同时记录排序后的索引,排序结果存储在egienvalues中。

  16. egienvectors=egienvectors(:,order);% 将特征向量按特征值降序排序 将特征向量按照特征值的降序排序,排序结果存储在egienvectors中。

以上就是给出的代码的分析,该代码主要实现了对图像数据进行PCA算法处理,得到图像数据的主成分特征向量。

PCA人脸重构

 机器学习之基于PCA的人脸识别

matlab代码实现 

oneFace=sample(:,1);
for dimension=20:20:160
    egienvector=egienvectors(:,1:dimension);
    rebuildFace=egienvector*(egienvector'*oneFace);
    rebuildFace=reshape(rebuildFace,100,80);
    index=dimension/20;
    subplot(2,4,index);
    imshow(mat2gray(rebuildFace));
    xlabel(sprintf("dimension=%d",dimension));
end

思路分析 

这段代码是用于对人脸进行重构并显示的部分,下面是对代码进行逐行分析:

  1. oneFace=sample(:,1); 从样本中选取第一张人脸作为重构对象,将其存储在oneFace变量中。

  2. for dimension=20:20:160 for循环迭代每个不同的维度值,从20开始,每次增加20,直到达到160。

  3. egienvector=egienvectors(:,1:dimension); 根据给定的维度值,选择相应数量的特征向量,将它们存储在egienvector变量中。

  4. rebuildFace=egienvector*(egienvector'*oneFace); 利用选定的特征向量重构人脸,将结果存储在rebuildFace变量中。这里的计算过程是通过将特征向量与其转置相乘来实现。

  5. rebuildFace=reshape(rebuildFace,100,80); 将重构后的人脸变形为原始图像的大小,即100x80像素。

  6. index=dimension/20; 计算当前维度值对应的索引,用于确定子图的位置。

  7. subplot(2,4,index); 创建一个2x4的子图网格,并选择第index个子图作为当前维度值的显示位置。

  8. imshow(mat2gray(rebuildFace)); 将重构的人脸图像显示在当前子图中。mat2gray函数用于将图像数据转换为灰度范围0-1之间的值,以便正确显示。

  9. xlabel(sprintf("dimension=%d",dimension)); 在当前子图的x轴标签位置显示当前维度值。

通过以上代码,可以实现基于不同维度的特征向量重构人脸,并将结果显示在一个子图网格中。每个子图对应一个特定的维度值,同时还在每个子图上方显示该维度的标签。这样可以观察不同维度下重构人脸的效果,并比较不同维度对重建结果的影响。

PCA人脸可视化

二维

机器学习之基于PCA的人脸识别

三维

 机器学习之基于PCA的人脸识别

matlab代码实现 

visualizeDataTemp=[];
%5个人
for i=0:4
    visualizeDataTemp=[visualizeDataTemp,sample(:,i*10+1:i*10+10)];
end

for dimension=2:3
    egienvector=egienvectors(:,1:dimension);
    visualizeData=egienvector'*visualizeDataTemp;
    colors=[];
    for i=1:50
        color=floor((i-1)/10+1)*20;
        colors=[colors,color];
    end
    if dimension==2
        scatter(visualizeData(1,:),visualizeData(2,:),[],colors);
    else
        scatter3(visualizeData(1,:),visualizeData(2,:),visualizeData(3,:),[],colors);
    end
end

思路分析: 

这段代码是用于对经过PCA降维的人脸样本进行可视化的部分,下面是对代码进行逐行分析:

  1. visualizeDataTemp=[]; 创建一个空矩阵visualizeDataTemp,用于存储可视化数据。

  2. for i=0:4 for循环迭代5次,从0到4。

  3. visualizeDataTemp=[visualizeDataTemp,sample(:,i*10+1:i*10+10)]; 将每个人的10个人脸样本按列连接起来,并添加到visualizeDataTemp中。这样,visualizeDataTemp将包含50个人脸样本。

  4. for dimension=2:3 for循环遍历每个指定的维度值,从2到3。

  5. egienvector=egienvectors(:,1:dimension); 根据给定的维度值,选择相应数量的特征向量,将它们存储在egienvector变量中。

  6. visualizeData=egienvector'*visualizeDataTemp; 将选择的特征向量与样本数据进行相乘,得到降维后的可视化数据,存储在visualizeData变量中。

  7. colors=[]; 创建一个空矩阵colors,用于存储数据点的颜色信息。

  8. for i=1:50 for循环遍历50次,对于每个数据点。

  9. color=floor((i-1)/10+1)*20; 根据数据点的索引,计算对应的颜色值。这里使用(i-1)/10+1来确定颜色分组,然后乘以20得到颜色值。

  10. colors=[colors,color]; 将计算得到的颜色值添加到colors矩阵中。

  11. if dimension==2 判断当前维度是否为2。

  12. scatter(visualizeData(1,:),visualizeData(2,:),[],colors); 使用散点图将二维可视化数据绘制出来,各个数据点的坐标由visualizeData给出,颜色由colors指定。

  13. else 如果当前维度不是2。

  14. scatter3(visualizeData(1,:),visualizeData(2,:),visualizeData(3,:),[],colors); 使用3D散点图将三维可视化数据绘制出来,各个数据点的坐标由visualizeData给出,颜色由colors指定。

通过以上代码,可以将经过PCA降维处理的人脸样本进行可视化展示。具体而言,对于每个维度值,将选择相应数量的特征向量,并将样本数据投影到这些特征向量上,得到降维后的可视化数据。然后使用散点图或3D散点图将数据点绘制出来,并根据数据点的分组信息为其指定不同的颜色。这样可以观察不同维度下人脸样本在降维空间中的分布情况。

PCA人脸识别

不同维度的识别率

机器学习之基于PCA的人脸识别

不同knnk值的识别率

机器学习之基于PCA的人脸识别

matlab代码实现 

trainNumber=5;
testNumber=6;
trainData=[];
testData=[];
for i=0:14
    trainData=[trainData,sample(:,i*11+1:i*11+trainNumber)];
end
for i=0:14
    testData=[testData,sample(:,i*11+trainNumber+1:i*11+11)];
end
result=[];
for knnK=1:8
    for dimension=10:10:160
        egienvector=egienvectors(:,1:dimension);
        trainDataTemp=egienvector'*trainData;
        testDataTemp=egienvector'*testData;
        error=0;
        testDataNumber=size(testDataTemp,2);
        trainDataNumber=size(trainDataTemp,2);
        for i=1:testDataNumber
            distances=[];
            for j=1:trainDataNumber
               distance=0;
               for k=1:dimension
                  distance=distance+(testDataTemp(k,i)-trainDataTemp(k,j))^2; 
               end
               distances=[distances,distance];
            end
            [distances,index]=sort(distances);
            rightIndex=floor((i-1)/testNumber)+1;
            testIndex=0;
            knn=[];
            for k=1:knnK
               knn=[knn,floor((index(k)-1)/trainNumber)+1];
            end
            [modeIndex,times]=mode(knn);
            if times==1
                testIndex=knn(1);
            else
                testIndex=modeIndex;
            end
            if testIndex~=rightIndex
                error=error+1;
            end
        end
        rate=(testDataNumber-error)/testDataNumber;
        result=[result,rate];
    end
end
X=10:10:160;
Y=1:8;
result=reshape(result,16,8);
result=result';
waterfall(X,Y,result);%不同k值不同维度的识别率
%plot(X,mean(result));%不同维度的平均识别率

思路分析 

  1. 设置训练样本数trainNumber为5,测试样本数testNumber为6。

  2. 创建空矩阵trainDatatestData,用于存储训练数据和测试数据。

  3. 使用两个循环,将样本数据按列连接,并存储到trainDatatestData中。每个循环迭代15次,每次连接11个样本。

  4. 创建空矩阵result,用于存储不同k值和维度下的识别率。

  5. 使用两个嵌套循环,分别遍历k值和维度范围。在每次循环中,选择相应数量的特征向量,将训练数据和测试数据投影到这些特征向量上,得到降维后的数据。

  6. 初始化误差error为0,并计算训练数据和测试数据的数量。

  7. 使用两个嵌套循环,分别遍历测试数据和训练数据。在每次循环中,计算测试数据点与每个训练数据点之间的欧氏距离。

  8. 对距离进行排序,并记录距离最近的k个训练数据点的索引。

  9. 根据距离最近的k个训练数据点的类别,确定测试数据点的类别。如果存在多个最近邻居属于同一类别,则使用出现次数最多的类别作为测试数据点的类别。

  10. 如果测试数据点的类别与正确类别不一致,则增加误差计数。

  11. 计算识别率,并将结果存储到result中。

  12. 将一维结果矩阵result转换为二维矩阵,以便后续绘制图形。

  13. 使用waterfall函数绘制不同k值和维度下的识别率瀑布图,横轴为维度范围,纵轴为k值,瀑布图的高度表示识别率。

  14. 使用plot函数绘制不同维度下的平均识别率曲线。文章来源地址https://www.toymoban.com/news/detail-500685.html

到了这里,关于机器学习之基于PCA的人脸识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习之基于Tensorflow人脸面部表情识别系统

    欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。   基于Tensorflow的人脸面部表情识别系统是一种基于深度学习技术的图像处理应用,该系统主要通过人脸图像数据进行面部表情识别,并且识别准确度较高,其设计过程如下: 数据获取和处理

    2024年02月05日
    浏览(79)
  • python学习之基于Python的人脸识别技术学习

    摘要: 面部识别技术的应用越来越广泛,它广泛应用于安全系统、人机交互、社交媒体、医疗保健等领域。本文介绍了基于Python的人脸识别技术,包括人脸检测、人脸特征提取和人脸识别三个部分。我们使用OpenCV和Dlib库来实现这些功能,并使用Python语言进行编程。实验结果

    2023年04月19日
    浏览(36)
  • Python | 机器学习之PCA降维

    ​ 🌈个人主页: Sarapines Programmer 🔥 系列专栏: 《人工智能奇遇记》 🔖墨香寄清辞:诗馀墨痕深,梦漫星辰寂。 曲径通幽意犹在,剑指苍穹气势立。 目录结构 1. 机器学习之PCA降维概念 1.1 机器学习 1.2 PCA降维 2. PCA降维 2.1 实验目的 2.2 实验准备 2.3 实验原理 2.4 实验内容

    2024年02月05日
    浏览(86)
  • 机器学习实战教程(⑤):使用PCA实战人脸降维

    在互联网大数据场景下,我们经常需要面对高维数据,在对这些数据做分析和可视化的时候,我们通常会面对「高维」这个障碍。在数据挖掘和建模的过程中,高维数据也同样带来大的计算量,占据更多的资源,而且许多变量之间可能存在相关性,从而增加了分析与建模的复

    2024年02月01日
    浏览(47)
  • 机器学习:基于支持向量机(SVM)进行人脸识别预测

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 专栏案例:

    2024年01月23日
    浏览(49)
  • 计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型,本文将介绍如何使用主成分分析(PCA)实现简易的人脸识别模型。首先,我们将简要介绍PCA的原理及其在人脸识别中的应用。接着,我们将通过实例演示如何使用Python实现

    2024年02月03日
    浏览(41)
  • 基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)

    近几年应用opencv机器学习方法识别人脸的技术成为了热潮,本人根据当今的识别技术与方法,历时四个多月开发出一套基于dlib机器学习库的识别项目。希望大家能一起交流学习。 1、项目功能介绍 Tkinter 人脸录入界面, 支持录入时设置 (中文) 姓名; 调用摄像头进行人脸识别

    2024年02月08日
    浏览(49)
  • 【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)

    🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长! 主成分分析(PCA,Principal Component Analysis)是一项在高维数据中,寻找最重要特征的降维技术,大大减少数据的维度,而不显著损失信息量。 本文

    2024年04月28日
    浏览(50)
  • 基于Qt、PYTHON智能校园防御系统应用程序,实现了摄像头数据采集、人脸识别、口罩识别、 数据统计等功能

    完整项目地址:https://download.csdn.net/download/lijunhcn/88453470 项目结构 环境选型 语言:Python 操作系统:Windows 数据库:MySQL 窗口界面:PyQT API接口:百度AI接口,用以实现人脸登陆与注册 远程MySQL表结构 远程表结构sql脚本 项目背景 智能校园防御软件是实现了一款基于摄像头数据

    2024年02月03日
    浏览(53)
  • 毕业设计——基于Pytorch的人脸识别及人像卡通化算法设计与实现(源码+数据+模型)

    如需完整项目,请私信博主 基于Pytorch的人脸识别及人像卡通化算法设计与实现综述 一、引言 随着深度学习技术的飞速发展,人脸识别与人像卡通化作为计算机视觉领域的两大重要应用,近年来受到了广泛关注。基于Pytorch的人脸识别技术通过构建深度学习模型,实现对人脸

    2024年04月17日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包