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

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

目录

LDA降维

思想

matlab代码

fisherface

思想

matlab代码

人脸识别

思想

matlab代码


LDA降维

思想

首先,代码通过使用dir函数获取指定路径下所有以".bmp"结尾的文件,并存储在变量pictures中。

然后,定义了一些参数:people表示人数,personPictureNumber表示每个人的图像数量,Dimension表示图像的维度大小,pictureNumber表示总图像数量。

接下来,创建一个空矩阵sample,用于存储所有图像的向量表示。然后利用循环遍历每个图片,并将其读取、转换为双精度类型,并将其转换为列向量picture。最后将该列向量添加到sample矩阵中。

接下来是LDA部分的代码。首先定义了两个空的矩阵SbSw,分别表示类间散度矩阵和类内散度矩阵。然后,通过循环遍历每个人的图像,计算出每个人图像的均值向量,并计算出类间散度矩阵Sb。同时,将每个人图像的均值向量存储在meanPerson中。接下来,计算类内散度矩阵Sw,循环遍历每个图像,计算出每个图像与其对应人的均值向量之差,并计算出类内散度矩阵Sw

然后根据不同模型进行不同处理构建协方差矩阵,然后提取特征向量。

matlab代码

pictures=dir('C:\Users\Yezi\Desktop\机器学习\face10080\*.bmp');
people=15;
personPictureNumber=11;
Dimension=100*80;
pictureNumber=people*personPictureNumber;
sample=[];
for i=1:pictureNumber
    picture=imread("C:\Users\Yezi\Desktop\机器学习\face10080\"+pictures(i).name);
    picture=double(picture);
    picture=picture(:);
    sample=[sample,picture];
end

% LDA
meanPerson=[];
meanTotal=mean(sample,2);
Sb=zeros(Dimension,Dimension);
for i=0:people-1
    temp=sample(:,i*personPictureNumber+1:(i+1)*personPictureNumber);
    one=mean(temp,2)-meanTotal;
    Sb=Sb+one*one';
    meanPerson=[meanPerson,mean(temp,2)]; 
end
Sb=Sb/people;
Sw=zeros(Dimension,Dimension);
for i=1:pictureNumber
    one=sample(:,i)-meanPerson(floor((i-1)/personPictureNumber)+1);
    Sw=Sw+one*one';
end
Sw=Sw/pictureNumber;

% 经典
covMatrix=pinv(Sw)*Sb;
% 正则
% Sb=Sb+eye(Dimension)*10^-6;
% covMatrix=pinv(Sw)*Sb;
% 减法
% covMatrix=Sb-Sw;

[egienvectors,diagonalMatrix]=eig(covMatrix);
egienvalues=diag(diagonalMatrix);
[egienvalues,order]=sort(egienvalues,'descend');
egienvectors=egienvectors(:,order);

fisherface

思想

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

首先,将样本矩阵sample中的第一列取出,表示选择了一个人脸图像作为重建的源图像,存储在变量oneFace中。

然后,通过循环遍历特征维度,从1到8逐渐增加。在每个循环中,选取特征向量矩阵egienvectors中的前dimension列,表示选择了部分特征向量用于重建。这些特征向量被存储在变量egienvector中。

接下来,通过将特征向量矩阵egienvector与其转置的乘积与源图像oneFace相乘,得到重建的人脸图像rebuildFace。然后,通过reshape函数将rebuildFace重新变换回100x80的图像矩阵。

然后,使用subplot函数将多个子图排列在一个2x4的网格上,其中每个子图显示一个特征维度下的重建人脸图像。imshow函数显示重建的人脸图像,并使用mat2gray函数将图像数据转换为灰度范围[0,1]内的值。xlabel函数设置子图的标题,显示当前特征维度。

通过以上的循环和绘图操作,代码可以展示在不同的特征维度下,对原始人脸图像的重建效果。随着特征维度的增加,重建图像将逐渐接近源图像,并展示出更多的细节和结构信息。

matlab代码

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

人脸识别

思想

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

首先,定义训练样本数trainNumber和测试样本数testNumber,并创建了空的训练数据矩阵trainData和测试数据矩阵testData

然后,通过两个循环将样本矩阵sample中的数据按照一定规则划分为训练数据和测试数据。第一个循环根据不同的人数进行迭代,并将每个人的前trainNumber个图像添加到trainData中。第二个循环同样根据不同的人数进行迭代,并将每个人的后面的testNumber个图像添加到testData中。

接下来,定义了空的结果矩阵result,用于存储不同特征维度下的分类准确率。

然后,通过两个嵌套循环遍历K近邻算法的参数:knnKdimension。在每个循环中,选择特征向量矩阵egienvectors中的前dimension列,表示选择了部分特征向量进行降维。这些特征向量被存储在变量egienvector中。

接下来,通过矩阵乘法运算将训练数据和测试数据投影到特征向量所构成的子空间中,得到降维后的训练数据trainDataTemp和测试数据testDataTemp

然后,定义了变量error用于记录分类错误的样本数量。通过计算测试数据的数量和训练数据的数量,进行两个嵌套循环遍历测试数据。在每个测试样本中,计算与所有训练样本之间的欧式距离,并对距离进行排序。然后,根据K近邻算法的思想,选择距离最近的knnK个训练样本作为邻居。

接下来,根据邻居的类别信息,判断测试样本的类别。如果邻居中只有一个类别出现次数最多,则将该类别作为测试样本的预测类别;否则,使用出现次数最多的类别作为预测类别。

最后,统计错误分类的样本数量,并计算分类准确率。将准确率存储在结果矩阵result中。

最后,通过调用plot函数,将特征维度dimension作为横轴,分类准确率result作为纵轴进行绘图,展示不同特征维度下的分类准确率曲线。文章来源地址https://www.toymoban.com/news/detail-508945.html

matlab代码

trainNumber=4;
testNumber=3;
trainData=[];
testData=[];
for i=0:people-1
    trainData=[trainData,sample(:,i*personPictureNumber+1:i*personPictureNumber+trainNumber)];
end
for i=0:people-1
    testData=[testData,sample(:,i*personPictureNumber+trainNumber+1:i*personPictureNumber+personPictureNumber)];
end
result=[];
for knnK=1:1
    for dimension=1:1:10
        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=1:1:10;
plot(X,result);

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

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

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

相关文章

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

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

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

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

    2023年04月19日
    浏览(37)
  • 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)
  • 计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型

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

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

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

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

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

    2024年02月08日
    浏览(49)
  • 智能快递机器人—— 人脸识别算法设计

    ** 计算机系统的介绍   智能快递机器人是一种以自动导航轮式小车为载体,搭载人脸识别检测模块以及储存箱体的智能运输机器人。其可以实现GPS自动导航,箱门自动开合,识别取件人面部等功能,主要运用于写字楼,小区,高校宿舍楼等物流运输的终端场所,研究目的在

    2024年02月07日
    浏览(54)
  • 机器学习实战-SVM模型实现人脸识别

    首先进行导包 我们加载sklearn已经帮我们收集好的人脸数据 查看结果: 我们取出其中的数据进行查看: 运行结果: 我们随机选取一个人的图片并通过索引获取名字: 结果展示: 由于原来的数据很大,而且数据量多,我们首先对原始数据进行PCA降维 结果展示: 然后对降维后

    2024年02月04日
    浏览(43)
  • 讯飞AIUI智能机器人6-----人脸识别技术

    🍖🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖🍖🍖🍖 🍖🍖🍖🍖🍖 🍖🍖

    2024年02月04日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包