主成分分析(PCA)是多元统计分析中用来分析数据的一种方法,它是用一种较少数 量的特征对样本进行描述以达到降低特征空间维数的方法,它的本质实际上是K-L变换。PCA方法最著名的应用应该是在人脸识别中特征提取及数据维,我们知 道输入200*200大小的人脸图像,单单提取它的灰度值作为原始特征,则这个原始特征将达到40000维,这给后面分类器的处理将带来极大的难度。著名 的人脸识别Eigenface算法就是采用PCA算法,用一个低维子空间描述人脸图像,同时用保存了识别所需要的信息。下面先介绍下PCA算法的本质K- L变换。

1、K-L变换(卡洛南-洛伊(Karhunen-Loeve)变换):最优正交变换  

  • 一种常用的特征提取方法;
  • 最小均方误差意义下的最优正交变换;
  • 在消除模式特征之间的相关性、突出差异性方面有最优的效果。
离散K-L变换:对向量x(可以想象成 M维=width*height 的人脸图像原始特征)用确定的完备正交归一向量系uj展开:
 
 
 
这个公式由来我想应该是任一n维欧式空间V均存在正交基,利用施密特正交化过程即可构建这个正交基。
现在我们希望用d个有限项来估计向量x,公式如下:
 
计算该估计的均方误差如下:
 
要使用均方误差最小,我们采用Langrange乘子法进行求解:
 
                                                           
 
因此,当满足上式时,
取得最小值。
 
 
即相关矩阵R的d个特征向量(对应d个特征值从大到小排列)为基向量来展开向量x时,其均方误差最小,为:
 
因此,K-L变换定义:当取矩阵R的d个最大特征值对应的特征向量来展开x时,其截断均方误差最小。这d个特征向量组成的正交坐标系称作x所在的D维空间的d维K-L变换坐标系, x在K-L坐标系上的展开系数向量y称作x的K-L变换。
 

总结下,K-L变换的方法:对相关矩阵R的特征值由大到小进行排队,
均方误差最小x近似于:
                                                              
矩阵形式:
 
上式两边乘以U的转置,得
                                             

向量y就是变换(降维)后的系数向量,在人脸识别Eigenface算法中就是用系数向量y代替原始特征向量x进行识别。


 
下面,我们来看看相关矩阵R到底是什么样子。
 
因此,我们可以看出相关矩阵R是一个实对称矩阵(或者严谨的讲叫正规矩阵),正规矩阵有什么特点呢??学过《矩阵分析》的朋友应该知道:
若矩阵R是一个实对称矩阵,则必定存在正交矩阵U,使得R相似于对角形矩阵,即:
 
 因此,我们可以得出这样一个结论:
                                                    
 
 降维后的系数向量y的相关矩阵是对角矩阵,即通过K-L变换消除原有向量x的各分量间的相关性,从而有可能去掉那些带有较少信息的分量以达到降低特征维数的目的。
 
2、主成分分析(PCA)
 
主成分分析(PCA)的原理就是将一个高维向量x,通过一个特殊的特征向量矩阵U,投影到一个低维的向量空间中,表征为一个低维向量y,并且仅仅损失了一些次要信息。也就是说,通过低维表征的向量和特征向量矩阵,可以基本重构出所对应的原始高维向量。
在人脸识别中,特征向量矩阵U称为特征脸(eigenface)空间,因此其中的特征向量ui进行量化后可以看出人脸轮廓,在下面的实验中可以看出。
以人脸识别为例,说明下PCA的应用。
设有N个人脸训练样本,每个样本由其像素灰度值组成一个向量xi,则样本图像的像素点数即为xi的维数,M=width*height ,由向量构成的训练样本集为
该样本集的平均向量为:
平均向量又叫平均脸。
 
样本集的协方差矩阵为:
 
求出协方差矩阵的特征向量ui和对应的特征值,这些特征向量组成的矩阵U就是人脸空间的正交基底,用它们的线性组合可以重构出样本中任意的人脸图像,(如果有朋友不太理解这句话的意思,请看下面的总结2。)并且图像信息集中在特征值大的特征向量中,即使丢弃特征值小的向量也不会影响图像质量。
将协方差矩阵的特征值按大到小排序:。由大于对应的特征向量构成主成分,主成分构成的变换矩阵为:
                              
这样每一幅人脸图像都可以投影到构成的特征脸子空间中,U的维数为M×d。有了这样一个降维的子空间,任何一幅人脸图像都可以向其作投影,即并获得一组坐标系数,即低维向量y,维数d×1,为称为KL分解系数。这组系数表明了图像在子空间的位置,从而可以作为人脸识别的依据。

有朋友可能不太理解,第一部分讲K-L变换的时候,求的是相关矩阵的特征向量和特征值,这里怎么求的是协方差矩阵?
其实协方差矩阵也是:
,可以看出其实用代替x就成了相关矩阵R,相当于原始样本向量都减去个平均向量,实质上还是一样的,协方差矩阵也是实对称矩阵。

总结下:
1、在人脸识别过程中,对输入的一个测试样本x,求出它与平均脸的偏差,则在特征脸空间U投影,可以表示为系数向量y
                                    
U的维数为M×d的维数为M×1y的维数d×1。若M为200*200=40000维,取200个主成分,即200个特征向量,则最后投影的系数向量y维数降维200维。
2、根据1中的式子,可以得出:
                               
这里的x就是根据投影系数向量y重构出的人脸图像,丢失了部分图像信息,但不会影响图像质量。
 
算法:见其他随笔
 
http://www.cnblogs.com/liu-jun/archive/2013/03/20/2970132.html

主成分分析(PCA)算法,K-L变换 角度的更多相关文章

  1. 机器学习--主成分分析(PCA)算法的原理及优缺点

    一.PCA算法的原理 PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,是一种用于探索高维数据结构的技术,主要用于对数据的降维,通过降维可 ...

  2. Python的主成分分析PCA算法

    这篇文章很不错:https://blog.csdn.net/u013082989/article/details/53792010 为什么数据处理之前要进行归一化???(这个一直不明白) 这个也很不错 ...

  3. 主成分分析 PCA算法原理

    对同一个体进行多项观察时,必定涉及多个随机变量X1,X2,…,Xp,它们都是的相关性, 一时难以综合.这时就需要借助主成分分析 (principal component analysis)来概括诸多信 ...

  4. 一步步教你轻松学主成分分析PCA降维算法

    一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...

  5. K-L变换和 主成分分析PCA

    一.K-L变换 说PCA的话,必须先介绍一下K-L变换了. K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换.它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hot ...

  6. 机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA

    本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...

  7. 模式识别(1)——PCA算法

    作者:桂. 时间:2017-02-26  19:54:26 链接:http://www.cnblogs.com/xingshansi/articles/6445625.html 声明:转载请注明出处, ...

  8. 05-03 主成分分析(PCA)

    目录 主成分分析(PCA) 一.维数灾难和降维 二.主成分分析学习目标 三.主成分分析详解 3.1 主成分分析两个条件 3.2 基于最近重构性推导PCA 3.2.1 主成分分析目标函数 3.2.2 主 ...

  9. 机器学习降维方法概括, LASSO参数缩减、主成分分析PCA、小波分析、线性判别LDA、拉普拉斯映射、深度学习SparseAutoEncoder、矩阵奇异值分解SVD、LLE局部线性嵌入、Isomap等距映射

    机器学习降维方法概括   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014772862/article/details/52335970 最近 ...

随机推荐

  1. django进阶-查询(适合GET4以上人群阅读)

    前言: 下篇博客写关于bootstrap... 一.如何在脚本测试django from django.db import models class Blog(models.Model): name ...

  2. java框架---->commonmark的使用(一)

    commonmark-java是一个Markdown 解析器,一个基于CommonMark规范解析和渲染Markdown文本的Java库.偶尔要回头看看,否则永远都在追寻,而不知道自己失去了什么. c ...

  3. C++中的异常安全性【转】

    原文写的非常好,来自这里 一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源:2.不允许破坏数据. 我们先通过两个反面的例子开始. 第一个是造成资源泄漏的例子.一个类Type ...

  4. css笔记 - 张鑫旭css课程笔记之 z-index 篇

    一.z-index语法.支持的属性值等 z-index: 在支持z-index的元素上, z-index规定了元素(包括子元素)的垂直z方向的层级顺序, z-index可以决定哪个元素覆盖在哪个元素上 ...

  5. MAC升级node及npm

    清除node.js的cache: sudo npm cache clean -f 安装 n 工具,这个工具是专门用来管理node.js版本的,别怀疑这个工具的名字,是他是他就是他,他的名字就是 &qu ...

  6. JUnit(>4.0)@BeforeClass、@Before、@Test、@After、@AfterClass、@Ignore

    JUnit 4 开始使用 Java 5 中的注解(annotation),常用的几个 annotation 介绍: @BeforeClass:针对所有测试,只执行一次,且必须为static void ...

  7. mysql语句性能分析案例

    写法不一样而功能完全相同的两条 SQL 的在性能方面的差异.示例一需求:取出某个 group(假设 id 为 100)下的用户编号(id),用户昵称(nick_name).用户性别( sexualit ...

  8. redmine创建新闻,自动发邮件给项目组所有成员

    redmine创建新闻,自动发邮件给项目组所有成员: 1.添加用户至公共项目内 2.配置系统邮件推送配置 3.检查用户接受推送配置 3.使用管理员账户发布新闻(不能自己发送自己) 4.查看邮件接受邮件

  9. 【咸鱼教程】TextureMerger1.6.6 三:Bitmap Font的制作和使用

    BitmapFont主要用于特殊字体在游戏中的使用   目录 一 方法1:添加字符      适合一张一张的零碎图片来制作位图字体 二 方法2:系统字体      适合使用已安装的系统字体来制作位图字 ...

  10. 【CF827F】Dirty Arkady's Kitchen DP

    [CF827F]Dirty Arkady's Kitchen 题意:给你一张n个点,m条边的有向图,每条边长度为1,第i条边在[li,ri)的时间内可以进入,求1到n的最短路. $n,m\le 5\t ...