博客
关于我
【人脸识别】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与mem_细说 MySQL 之 MEM_ROOT
    查看>>
    MySQL与Oracle的数据迁移注意事项,另附转换工具链接
    查看>>
    mysql丢失更新问题
    查看>>
    MySQL两千万数据优化&迁移
    查看>>
    MySql中 delimiter 详解
    查看>>
    MYSQL中 find_in_set() 函数用法详解
    查看>>
    MySQL中auto_increment有什么作用?(IT枫斗者)
    查看>>
    MySQL中B+Tree索引原理
    查看>>
    mysql中cast() 和convert()的用法讲解
    查看>>
    mysql中datetime与timestamp类型有什么区别
    查看>>
    MySQL中DQL语言的执行顺序
    查看>>
    mysql中floor函数的作用是什么?
    查看>>
    MySQL中group by 与 order by 一起使用排序问题
    查看>>
    mysql中having的用法
    查看>>
    MySQL中interactive_timeout和wait_timeout的区别
    查看>>
    mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>