基于LDA的Olivetti人脸降维与身份识别

1.作者介绍

朱航锐,男,西安工程大学电子信息学院,2025级研究生

研究方向:智能视觉检测与工业自动化技术

电子邮件:chenaniah947@163.com

郭政,男,西安工程大学电子信息学院,2025级研究生,张宏伟人工智能课题组

研究方向:机器视觉与人工智能

电子邮件:1225301905@qq.com

2.算法介绍

2.1 主成分分析 (PCA)

PCA是一种常用的降维算法。

核心思想:在尽可能保留数据主要信息的前提下,将高维数据映射到低维空间,用少量新特征表示原始数据,去除噪声并缓解计算压力。当特征维度远大于样本数量时,先通过PCA降维以保证LDA算法计算的可行性。

算法原理:计算协方差矩阵的特征值与特征向量,以此确定方差最大的投影方向。

2.2 线性判别分析 (LDA)

核心思想:利用样本类别标签信息,寻找最优投影方向,使同类样本尽可能紧凑、异类样本尽可能分离

优化目标:寻找投影方向W,使类间散度最大化且类内散度最小化,从而最大化类别间的可分性。

与PCA对比:PCA是无监督降维,最大化数据方差;LDA是有监督学习,更关注类别差异。

2.3 K近邻 (KNN)

核心逻辑:基于"近朱者赤,近墨者黑"的思想,通过距离度量确定未知样本的K个最近邻,以投票方式决定样本类别。

在本实验中,K=3,使用 LDA 降维后的特征进行距离匹配,实现快速人脸身份识别。

3.关于实验过程的介绍

3.1数据集介绍

本次实验使用的是经典的 Olivetti Faces Dataset,由 AT&T 剑桥实验室创建,是计算机视觉领域,特别是人脸识别任务中常用的基准数据集。

  1. 来源:

https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html

  1. 类别:40位不同主体,每个主题 10 张人脸图像
  2. 形式:64x64像素灰度图,展平后为 4096 维特征
  3. 数据集展示图

3.2实验环境准备

Python 3.8

NumPy:数值计算与特征拼接

Matplotlib:实验结果可视化

Scikit-learn:PCA 降维、LDA 判别分析、KNN 分类与模型评价

安装命令:

pip install numpy matplotlib scikit-learn

3.3代码实现

(1)数据加载与划分

加载 Olivetti 人脸数据,将 64×64 图像展平为 4096 维向量,并按 7:3 比例划分为训练集与测试集,保持类别均衡。

(2)PCA 预降维

由于原始人脸维度(4096 维)过高,直接使用 LDA 易出现矩阵奇异问题,因此先使用 PCA 降维至 100 维

(3)LDA 判别降维

Olivetti 数据集共 40 类别,LDA 最大可降至 39 维。

LDA 利用身份标签学习最优投影方向,使同类人脸更聚集、异类更分离。

(4)KNN 身份识别

在 LDA 低维判别空间中使用 KNN 完成人脸匹配与身份识别。

3.4测试结果

(1)维度变化

训练集原始维度:(280, 4096)

PCA 降维后:(280, 100)

LDA 降维后:(280, 39)

(2)识别准确率

PCA+LDA+KNN 人脸身份识别准确率:98.75%

(3)可视化结果

1、LDA 二维投影图

同一身份样本高度聚集,不同身份明显分离,说明 LDA 能有效提取判别性特征。

2、Olivetti 人脸样本展示

展示 40 人中前 10 人的人脸图像,可观察光照、表情、姿态的轻微变化。

(4)结果分析

PCA 负责降维去噪,解决高维人脸矩阵奇异问题。

LDA 利用标签信息学习身份判别方向,大幅提升可分性。

KNN 在低维判别空间中实现快速、高精度识别。

4. 实验结论

PCA+LDA组合能高效完成高维人脸降维与特征提取。

LDA作为有监督判别降维方法,在人脸识别任务中显著优于无监督的PCA。

KNN在LDA特征空间中可实现快速、稳定、高精度身份识别。

本实验在Olivetti数据集上达到98.75%识别率,验证了方法的有效性与实用性。

相关推荐
动物园猫1 天前
猪危险行为目标检测数据集:3类别、5,000+张图像 | 目标检测
人工智能·目标检测·计算机视觉
罗西的思考1 天前
【Agent OS / AIOS】AOHP 深度解读:当 OS 开始为 Agent 而设计
人工智能·算法·机器学习
民乐团扒谱机1 天前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
嘶哈哈哈1 天前
使用 Labelme 标注遥感目标检测数据集:从类别表、矩形框到 group_id 完整流程
人工智能·目标检测·目标跟踪
SomeB1oody1 天前
【RustyML入门】4.2. 标准化与归一化
开发语言·后端·机器学习·rust·教程
workflower1 天前
智能无人机成低空经济核心赛道
运维·人工智能·机器学习·机器人·云计算·无人机
JAI科研2 天前
Deepseek Agent Harness教程(二) | DeepSeek Harness 设计思路
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·vllm
探物 AI2 天前
yolo目标检测中的激活函数对比
人工智能·yolo·目标检测
还不秃顶的计科生2 天前
具身智能论文学习10:π0: A Vision-Language-Action Flow Model for General Robot Control
人工智能·深度学习·算法·机器学习·语言模型·vla·vlm
W_326002 天前
Python-OpenCV:库、环境搭建、图片与摄像头解析
开发语言·图像处理·python·opencv·机器学习