博客
关于我
【人脸识别】PCA+LDA人脸识别【Matlab 186期】
阅读量:723 次
发布时间:2019-03-21

本文共 1454 字,大约阅读时间需要 4 分钟。

一、PCA简介与原理

主成分分析(PCA)是常用的降维技术,其核心目标是通过选择特征向量,将数据投影到一个低维空间中,同时最大化数据在新空间中的方差。降维的核心原理是寻找能够最优表示数据的线性变换,使得数据在新空间中能保留最多的变异性。

PCA的核心步骤包括:

  • 数据中心化:首先将所有样本数据偏离中心的均值部分提取出来,形成去中心化矩阵X。具体操作是对每个样本减去样本均值向量u,得到去中心化矩阵X = {Z1 - u, Z2 - u, ..., Zm - u}。

  • 寻找主成分:主成分的寻找依赖于目标函数的最大化,即投影到各个潜在方向上的方差最大化。通过构建拉格朗日算子并求解最优条件,可以得出主成分对应的特征值和特征向量。

  • 矩阵变换:选择若干主成分进行降维,将高维数据映射到低维特征空间。具体实现中,经常采用奇异值分解(SVD)来替代直接计算协方差矩阵,特别是在处理大规模数据时,能够显著减少内存占用。

  • 实际应用:PCA在人脸识别中的应用具有重要意义。通过收集和预处理人脸样本,计算协方差矩阵的特征值和特征向量,建立训练人脸库。然后,对待测样本的数据进行投影,计算其在特征向量方向上的投影,进而进行身份识别。

  • 二、LDA应用与数学表示

    线性判别分析(LDA)是一种面临高维数据分类时的理想降维技术。其核心思想是构建一个最佳投影矩阵,将高维数据投影到一个低维的特征空间中,使得投影后数据在同类间具有最大距离,在不同类间具有最小距离,从而实现最优的分类效果。

    LDA的数学表示涉及以下关键步骤:

  • 计算协方差矩阵:根据类别信息,计算各类样本的协方差矩阵。假设输入数据为N维向量,类别数为C,则协方差矩阵S为 size=N×C, kaleSize= size×N。

  • 计算特征向量:通过求解协方差矩阵S的特征值与特征向量,找到最优的投影方向。具体来说,对每个特征值求出对应的特征向量,这些特征向量构成了降维的方向。

  • 构建投影矩阵:利用特征向量构建投影矩阵W,使得投影后数据在最优子空间中呈现最好的分类性能。投影矩阵的大小为C×N,使得数据向量在投影后尺寸缩减为C维。

  • 降维与分类:基于LDA提取的特征向量,进行数据降维。对于待测样本,通过投影矩阵进行降维后,计算其在投影空间中的特征向量,进而进行分类。

  • 三、代码实现

    代码实现部分主要包含以下几个关键函数:

  • pca函数:用于执行主成分分析,参数包括输入数据矩阵及降维的可控参数。函数返回处理后数据矩阵及其对应的主成分信息。

  • readsample函数:负责读取样本数据。函数接收样本地址、类别数以及每类样本数目,返回所有样本矩阵。

  • computswb函数:计算均值方差矩阵Sw和交乘积矩阵Gb。这两个矩阵是LDA的前提条件,用于判断各个维度的贡献率。

  • computaccu函数:评估分类准确率。函数接收降维后的测试样本数据和训练样本数据,计算准确率。

  • 代码运行流程如下:

  • 初始化设置:设置数据加载地址及参数如训练样本数及类别数目。

  • 数据加载:读取训练数据和测试数据,并进行降维处理。

  • 寻找最佳投影维度:通过遍历不同投影维度,评估识别准确率,确定最优投影维度。

  • 输出结果:显示每类样本数、最佳投影维度及识别准确率。

  • 四、运行结果与备注

    实验结果表明,采用PCA结合LDA的方法在人脸识别任务中表现优异,准确率高达97.5%。代码实现准确反映了理论推导过程,能够帮助用户快速完成降维与分类任务。

    完整代码和技术支持可通过QQ912100926获取,供有需要的人参考和优化。

    转载地址:http://ztnrz.baihongyu.com/

    你可能感兴趣的文章
    Mysql学习总结(67)——MYSQL慢查询日志
    查看>>
    Mysql学习总结(68)——MYSQL统计每天、每周、每月、每年数据 SQL 总结
    查看>>
    Mysql学习总结(69)——Mysql EXPLAIN 命令使用总结
    查看>>
    Mysql学习总结(6)——MySql之ALTER命令用法详细解读
    查看>>
    Mysql学习总结(70)——MySQL 优化实施方案
    查看>>
    Mysql学习总结(71)——MySQL 重复记录查询与删除总结
    查看>>
    Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
    查看>>
    Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
    查看>>
    Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
    查看>>
    Mysql学习总结(77)——温故Mysql数据库开发核心原则与规范
    查看>>
    Mysql学习总结(78)——MySQL各版本差异整理
    查看>>
    Mysql学习总结(79)——MySQL常用函数总结
    查看>>
    Mysql学习总结(7)——MySql索引原理与使用大全
    查看>>
    Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
    查看>>
    Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
    查看>>
    Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
    查看>>
    Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
    查看>>
    Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
    查看>>
    Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
    查看>>
    Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
    查看>>