基于PCA的特征提取
图像处理方面的知识也学了一段时间了,总是光看理论的话,感觉联系不上实际,第一次把理论综合的实现出来,对这些理论的印象才感觉的更深刻,也能够为后续的学习打下良好的基础。
PCA是比较老的算法,但是可靠性挺好,对于我这种新手,练练手还是不错的。
下面开始对这些算法说一说我自己的理解,如果有不正确的地方还请各位牛人指点。
主成分分析(PCA)是多变量分析中一项很老的技术,源于通信理论中的K-L变换,它考虑的是对于d维空间中的n个向量X1,X2......Xn,如何在低维空间中进行表示,这需要对其空间进行变换。
变换具体的表示如下:
其中即为对样本的一种近似表示,是样本的均值,
就是在d'维空间中的主成份分量,也就是经过PCA提取后的一组特征。
是这d'维空间的一组基。
这样即为原样本在d'维空间的一种近似。
看到这,还不知道和
是如何计算得到的,具体的推理过程就不细说了,想知道的可以自行查阅相关资料,我只写一下他们的计算公式。
是散布矩阵S的前d‘个特征向量,
是散布矩阵S的前d‘个特征值,而散布矩阵S为
,其中Z为样本矩阵X中的每个样本减去样本均值后得到的矩阵。
S是d*d的矩阵,计算量很大,幸运的是有一种快速计算的方法,这里我们考虑,一般情况下样本数目n原小于样本维数d,所以R的尺寸远小于散布矩阵S。
设是R的特征向量为,则有
对上式两边同时左乘,得
说明为散布矩阵S的特征值,至此,可以计算小矩阵R的特征向量来得到散布矩阵S的特征向量。
当计算出散布矩阵S的特征向量和特征值时,就可以对样本进行表示了。
假设计算的是前20个特征值和特征向量,那么样本就可以用这20个特征值对其进行表示,这也就是样本的主成份。
快速PCA计算的matlab实现代码如下:
function [ pcaA   V] =fastPCA( A,k )
%输入:A------样本矩阵,每行为一个样本
%         k------降维至k维
%输出:pcaA----降维后K维样本特征向量组成的矩阵,每行一个样本,列数k为降维后的样本特征维数
%     V-------主成分分量
[r,c]=size(A);
%样本均值
meanVec = mean(A);
%计算协方差矩阵的转置 covMatT
Z=(A-repMat(meanVec,r,1));
covMatT =Z*Z';
%计算covMatT的前k个本征值和本征向量
[V D] = eigs(covMatT,k);
%得到协方差矩阵covMatT'的本征向量
V = Z'*V;
%本征向量归一化为单位本征向量
for i=1:k
    V(:,i)=V(:,i)/norm(V(:,i));
end
pcaA = Z*V;
end
基于PCA的特征提取的更多相关文章
- 基于PCA的人脸识别步骤
		
代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像.最容易的方式是直接利用欧式距离计算测 ...
 - opencv基于PCA降维算法的人脸识别
		
opencv基于PCA降维算法的人脸识别(att_faces) 一.数据提取与处理 # 导入所需模块 import matplotlib.pyplot as plt import numpy as n ...
 - 基于PCA和SVM的人脸识别
		
程序中采用的数据集是ORL人脸库,该人脸库共有400副人脸图像,40人,每人10幅,大小为112*92像素,同一个人的表情,姿势有少许变化. 程序的流程主要分为三部分,数据的预处理(PCA降维和规格化 ...
 - 基于PCA和SVM的人脸识别系统-error修改
		
------------------------------------------------- Undefined function or variable 'W'. Error in class ...
 - pca图像识别
		
代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像.最容易的方式是直接利用欧式距离计算测 ...
 - Atitti 图像处理 特征提取的科技树 attilax总结
		
Atitti 图像处理 特征提取的科技树 attilax总结 理论 数学,信号处理,图像,计算机视觉 图像处理 滤波 图像处理 颜色转换 图像处理 压缩编码 图像处理 增强 图像处理 去模糊 图像处理 ...
 - A tutorial on Principal Components Analysis | 主成分分析(PCA)教程
		
A tutorial on Principal Components Analysis 原著:Lindsay I Smith, A tutorial on Principal Components A ...
 - 基于3D卷积神经网络的人体行为理解(论文笔记)(转)
		
基于3D卷积神经网络的人体行为理解(论文笔记) zouxy09@qq.com http://blog.csdn.net/zouxy09 最近看Deep Learning的论文,看到这篇论文:3D Co ...
 - 人脸和性别识别(基于OpenCV)
		
描写叙述 人脸识别包含四个步骤 人脸检測:定位人脸区域,仅仅关心是不是脸: 人脸预处理:对人脸检測出来的图片进行调整优化. 收集和学习人脸:收集要识别的人的预处理过的人脸,然后通过一些算法去学习怎样识 ...
 
随机推荐
- Android中BroadCast与Activity之间的通信
			
在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...
 - linux安装mysql5.1.56
			
1.编译安装 > groupadd mysql #创建mysql组 > useradd -g mysql mysql #创建用户mysql并添加到mysql组中,这个用户主要是作为mysq ...
 - arcpagelistarclist列表分页
			
arcpagelistarclist列表分页 (DedeCMS 5.6) 名称:arcpagelist 功能:通过制定arclist的pagesize及tagid属性,配合arcpagelist标签进 ...
 - Java基础知识强化66:基本类型包装类之JDK5新特性自动装箱和拆箱
			
1. JDK1.5以后,简化了定义方式. (1)Integer x = new Integer(4):可以直接写成如下: Integer x = 4 ://自动装箱,通过valu ...
 - DateBox( 日期输入框) 组件
			
本节课重点了解 EasyUI 中 DateBox(日期输入框)组件的使用方法,这个组件依赖于 Combo(自定义下拉框)和 Calendar(日历). 一. 加载方式//class 加载方式<i ...
 - java开发的web下载大数据时的异常处理
			
同事用java开发了一个系统,其中有一个功能是下载大约10万笔数据到Excel中.当上线后,很多用户反映下载数据量大的时候就不能成功,但有时可以,所以结论就是系统不稳定,这个问题拖了很久没有解决. 在 ...
 - (转).NET平台开源JSON库LitJSON的使用方法
			
一个简单示例: String str = "{’name’:’cyf’,’id’:10,’items’:[{’itemid’:1001,’itemname’:’hello’},{’itemi ...
 - ORACLE管理存储结构之物理机构+逻辑结构【weber出品】
			
一.数据库的存储结构有物理结构和逻辑结构组成的 物理结构:物理上,oracle是由一些操作系统文件组成的 SQL> select name from v$datafile; NAME ----- ...
 - Mongodb基本操作之.net
			
1.下载官方for C#驱动 2.导入2个dll文件 3.连接字符串 <add key="MongoConn" value="mongodb://127.0.0.1 ...
 - c++中vector等容器的实现机制
			
stl容器区别: vector list deque set map-底层实现 stl容器区别: vector list deque set map (转) 在STL中基本容器有: vector.li ...