pca主成分分析用matlab实现,PCA (主成分分析)详解 (写给初学者) 结合matlab

一、简介

PCA(Principal Components Analysis)即主成分分析,是图像处理中经常用到的降维方法,大家知道,我们在处理有关数字图像处理方面的问题时,比如经常用的图像的查询问题,在一个几万或者几百万甚至更大的数据库中查询一幅相近的图像。这时,我们通常的方法是对图像库中的图片提取响应的特征,如颜色,纹理,sift,surf,vlad等等特征,然后将其保存,建立响应的数据索引,然后对要查询的图像提取相应的特征,与数据库中的图像特征对比,找出与之最近的图片。这里,如果我们为了提高查询的准确率,通常会提取一些较为复杂的特征,如sift,surf等,一幅图像有很多个这种特征点,每个特征点又有一个相应的描述该特征点的128维的向量,设想如果一幅图像有300个这种特征点,那么该幅图像就有300*vector(128维)个,如果我们数据库中有一百万张图片,这个存储量是相当大的,建立索引也很耗时,如果我们对每个向量进行PCA处理,将其降维为64维,是不是很节约存储空间啊?对于学习图像处理的人来说,都知道PCA是降维的,但是,很多人不知道具体的原理,为此,我写这篇文章,来详细阐述一下PCA及其具体计算过程:

二、PCA详解

1、原始数据:

为了方便,我们假定数据是二维的,借助网络上的一组数据,如下:

x=[2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2, 1, 1.5, 1.1]T

y=[2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9]T

2、计算协方差矩阵

什么是协方差矩阵?相信看这篇文章的人都学过数理统计,一些基本的常识都知道,但是,也许你很长时间不看了,都忘差不多了,为了方便大家更好的理解,这里先简单的回顾一下数理统计的相关知识,当然如果你知道协方差矩阵的求法你可以跳过这里。

(1)协方差矩阵:

首先我们给你一个含有n个样本的集合,依次给出数理统计中的一些相关概念:

均值:

42035625_1.jpg

标准差:

42035625_2.jpg

方差:

42035625_3.jpg

既然我们都有这么多描述数据之间关系的统计量,为什么我们还要用协方差呢?我们应该注意到,标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集,最简单的大家上学时免不了要统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解这几科成绩之间的关系,这时,我们就要用协方差,协方差就是一种用来度量两个随机变量关系的统计量,其定义为:

42035625_4.jpg

从协方差的定义上我们也可以看出一些显而易见的性质,如:

42035625_5.jpg(X的方差)

42035625_6.jpg

需要注意的是,协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计算

42035625_7.jpg个协方差,那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:

42035625_8.jpg

这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有

42035625_9.jpg三个维度,则协方差矩阵为

42035625_10.jpg

可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。

(2)协方差矩阵的求法:

协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。下面我们将在matlab中用一个例子进行详细说明:

首先,随机产生一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。

MySample = fix(rand(10,3)*50)

42035625_11.jpg

根据公式,计算协方差需要计算均值,那是按行计算均值还是按列呢,我一开始就老是困扰这个问题。前面我们也特别强调了,协方差矩阵是计算不同维度间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列为一个维度,所以我们要按列计算均值。为了描述方便,我们先将三个维度的数据分别赋值:

dim1 = MySample(:,1);

dim2 = MySample(:,2);

dim3 = MySample(:,3);

计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:

sum( (dim1-mean(dim1)) .* (dim2-mean(dim2)) ) / ( size(MySample,1)-1 ) % 得到  74.5333

sum( (dim1-mean(dim1)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到  -10.0889

sum( (dim2-mean(dim2)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到  -10***000

搞清楚了这个后面就容易多了,协方差矩阵的对角线就是各个维度上的方差,下面我们依次计算:

std(dim1)^2 % 得到   108.3222

std(dim2)^2 % 得到   260.6222

std(dim3)^2 % 得到  94.1778

这样,我们就得到了计算协方差矩阵所需要的所有数据,调用Matlab自带的cov函数进行验证:

cov(MySample)

42035625_12.jpg

可以看到跟我们计算的结果是一样的,说明我们的计算是正确的。但是通常我们不用这种方法,而是用下面简化的方法进行计算:

先让样本矩阵中心化,即每一维度减去该维度的均值,然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1)即可。其实这种方法也是由前面的公式通道而来,只不过理解起来不是很直观而已。大家可以自己写个小的矩阵看一下就明白了。其Matlab代码实现如下:

X = MySample – repmat(mean(MySample),10,1);    % 中心化样本矩阵

C = (X’*X)./(size(X,1)-1)

(为方便对matlab不太明白的人,小小说明一下各个函数,同样,对matlab有一定基础的人直接跳过:

B = repmat(A,m,n ) %%将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成。B 的维数是 [size(A,1)*m, (size(A,2)*n]B = mean(A)的说明:

如果你有这样一个矩阵:A = [1 2 3; 3 3 6; 4 6 8; 4 7 7];

用mean(A)(默认dim=1)就会求每一列的均值

ans =

3.0000    4.5000    6.0000

用mean(A,2)就会求每一行的均值

ans =

2.0000

4.0000

6.0000

6.0000

size(A,n)%%如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数)

上面我们简单说了一下协方差矩阵及其求法,言归正传,我们用上面简化求法,求出样本的协方差矩阵为:

42035625_13.jpg

3、计算协方差矩阵的特征向量和特征值

因为协方差矩阵为方阵,我们可以计算它的特征向量和特征值,如下:

[eigenvectors,eigenvalues] = eig(cov)

42035625_14.jpg

我们可以看到这些矢量都是单位矢量,也就是它们的长度为1,这对PCA来说是很重要的。

4、选择成分组成模式矢量

求出协方差矩阵的特征值及特征向量之后,按照特征值由大到小进行排列,这将给出成分的重要性级别。现在,如果你喜欢,可以忽略那些重要性很小的成分,当然这会丢失一些信息,但是如果对应的特征值很小,你不会丢失很多信息。如果你已经忽略了一些成分,那么最后的数据集将有更少的维数,精确地说,如果你的原始数据是n维的,你选择了前p个主要成分,那么你现在的数据将仅有p维。现在我们要做的是组成一个模式矢量,这只是几个矢量组成的矩阵的一个有意思的名字而已,它由你保持的所有特征矢量构成,每一个特征矢量是这个矩阵的一列。

对于我们的数据集,因为有两个特征矢量,因此我们有两个选择。我们可以用两个特征矢量组成模式矢量:

42035625_15.jpg

我们也可以忽略其中较小特征值的一个特征矢量,从而得到如下模式矢量:

42035625_16.jpg

5、得到降维后的数据

42035625_17.jpg

其中rowFeatureVector是由模式矢量作为列组成的矩阵的转置,因此它的行就是原来的模式矢量,而且对应最大特征值的特征矢量在该矩阵的最上一行。rowdataAdjust是每一维数据减去均值后,所组成矩阵的转置,即数据项目在每一列中,每一行是一维,对我们的样本来说即是,第一行为x维上数据,第二行为y维上的数据。FinalData是最后得到的数据,数据项目在它的列中,维数沿着行。

这将给我们什么结果呢?这将仅仅给出我们选择的数据。我们的原始数据有两个轴(x和y),所以我们的原始数据按这两个轴分布。我们可以按任何两个我们喜欢的轴表示我们的数据。如果这些轴是正交的,这种表达将是最有效的,这就是特征矢量总是正交的重要性。我们已经将我们的数据从原来的xy轴表达变换为现在的单个特征矢量表达。

(说明:如果要恢复原始数据,只需逆过程计算即可,即:

42035625_18.jpg

42035625_19.jpg

)

到此为止,相信你已经掌握了PCA及其原理了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务最佳实践:MSE 微服务引擎

简介: 微服务引擎 MSE(Microservice Engine)是一个面向业界主流开源微服务框架 Spring Cloud 和 Dubbo 的一站式微服务平台。其由四个主要部分组成:微服务治理中心、微服务注册中心、微服务配置中心、微服务网关。 MSE 是什么 微…

异地多活之企业架构案例

简介: 异地多活之企业架构案例 1. 前言 多活容灾 MSHA(Multi-Site High Availability),是在阿⾥巴巴电商业务环境演进出来的多活容灾架构解决⽅案,可以将业务恢复和故障恢复解耦,有基于灵活的规则调度、跨…

WAIC|高精准、低成本,九章云极DataCanvas突破AutoML难题

2021 年世界人工智能大会(WAIC)于 7 月 8 日 在上海世博中心拉开帷幕。九章云极DataCanvas董事长方磊受邀参加由世界人工智能大会组委会主办、机器之心承办的“2021 WAICAI开发者论坛”,并发表“Hypernets:自动化机器学习的基础框…

matlab样条插值如何用,三次样条插值matlab实现

%三次样条差值-matlab通用程序 - zhangxiaolu2015的专栏 - CSDN博客 https://blog.csdn.net/zha%【图文】三次样条插值算法详解_百度文库 https://wenku.baidu.com/view/14423f2e1711cc7931b716clcclearxinput(请按照格式[x1,x2,x3...]格式输入yf(x)函数已知点的横坐标xi); %三…

在阿里淘系6个月能有哪些收获成长?

本文作者:刘博文(Berwin),花名“玖五”,畅销书《深入浅出Vue.js》作者、知名技术博主、讲师、阿里巴巴淘系技术部前端技术专家,现负责淘系618、双11等超大型营销活动主会场的终端渲染架构。 回想起年初刚来…

matlab 向前欧拉公式,向前欧拉公式在Matlab解微分方程初值解的问题

向前欧拉公式在Matlab解微分方程初值解的问题0fuqilin1202013.07.04浏览527次分享举报用向前欧拉公式(10.8)求解初值问题,dy/dx-3x8x-7,y(0)1,分别取n10,n100,并将计算结果与精确解作比较,写出在每个子区间[xk,xk1]上的局部截断误差公式&…

我在阿里巴巴做 Serverless 云研发平台

简介: Serverless 云研发平台经过这半年多的蜕变,已经从简单的解决工程链路的平台演进成一个面向研发、上线、运维的全生命周期研发平台,后续要解决的命题会集中在用户低门槛上。 作者 | 林昱(苏河) 技术的成熟度源自大规模的实践&#xff0…

从Gartner报告,看中国数据库崛起

简介: 阿里云,在Gartner公布2020年度全球数据库魔力象限评估结果,作为中国科技公司代表,首次挺进全球数据库第一阵营——领导者(LEADERS)象限,这也是中国数据库40年来首次进入全球顶级数据库行列…

一套存储承载全场景,XSKY星辰天合发布企业级SDS V5系列

编辑 | 宋慧 出品 | CSDN云计算 头图 | XSKY星辰天合V5发布会现场 2021年7月15日,国内数据基础设施技术平台提供商XSKY星辰天合正式发布了企业级软件定义存储V5(以下简称“XSKY SDS V5”)系列产品,通过DATA OS数据操作系统底座升…

首次揭秘云原生Hologres存储引擎

简介: 本文将会首次对外公开介绍Hologres的存储引擎,深度剖析其实现原理和核心技术优势。 概要:刚刚结束的2020天猫双11中,MaxCompute交互式分析(Hologres)实时计算Flink搭建的云原生实时数仓首次在核心数…

什么是 “原型模式” ?

作者:东风玖哥,小灰来源:程序员小灰————— 第二天 —————————————————假如有一天,小灰被外星人抓走了,外星人要拿小灰做实验,想了解小灰在吃得好、睡得好、玩得开心的场景下&#xf…

制造业全链数字化业务转型实践

近日,阿里云Lindorm与Intel、OSIsoft推出了面向工业物联网信息经济(Infonomics)的IT & OT超融合工业数据云解决方案。方案通过云端打通阿里云、Intel的IT技术积累和OSIsoft的OT经验能力,实现对传统技术供需关系的超越&#xf…

从搜索引擎到核心交易数据库,详解阿里云神龙如何支撑双11

简介: 订单峰值58.3万笔/秒,销售额4982亿,阿里云神龙再次成功扛住了全球流量洪峰 2020年的双11,天猫又创造了新的纪录:订单峰值达到创纪录的58.3万笔/秒,销售额达到历史新高4982亿,阿里云神龙再…

云网一体,“湘遇湘融 | 移动云TeaTalk·长沙站 启动倒计时

在企业数字化转型、云服务和国家政策等多重因素驱动下,越来越多的企业、行业和政府机关将业务迁移到云上,单一化的网络连接模式已经不能满足企业“多系统、多场景、多业务”的上云需求,而是要求云和多样化网能力高度协同。中国移动作为运营商…

matlab save txt 乱码,matlab代码或中文复制到word就变成乱码怎么办?

在matlab的edit中编辑的脚本程序复制到word时,注释里面的汉字变为乱码怎么办。下面教你两种解决办法。软件名称:Matlab 7.0.1 R14 SP1 (3CD带序列号)免费版软件大小:1.17GB更新时间:2012-11-03立即下载1、这是我在matlab的edit下面…

EMAS 移动 DevOps 解决方案 —— Mobile DevOps

简介: DevOps这一优秀的软件交付理念在服务端已经有很多相关的实践,那么是否也可以应用到移动端进行交付呢?基于移动端和服务端场景的差异,移动DevOps跟服务端DevOps又有哪些不同和挑战?本文分享阿里云云原生应用研发平…

MongoDB 5.0 来了,原生时序、版本化 API 新特性悉数登场

作者 | 伍杏玲出品 | CSDN云计算(ID:CSDNcloud)据 DB-Engines 数据库最新 7 月流行度排行榜显示,前五名十分稳定:Oracle、MySQL、Microsoft SQL Server、PostgreSQL、MongoDB,其中 MongoDB 是唯一的文档型数…

阿里云Lindorm与Intel、OSIsoft共建IT OT超融合工业数据云

近日,阿里云Lindorm与Intel、OSIsoft推出了面向工业物联网信息经济(Infonomics)的IT & OT超融合工业数据云解决方案。方案通过云端打通阿里云、Intel的IT技术积累和OSIsoft的OT经验能力,实现对传统技术供需关系的超越&#xf…

wamp php5.6 mysql5.6,WampServer 3.0.6 多语言版 集成apache2.4.23 mysql5.7.14 php5.6.25-7.0.10 穿墙书店...

WampServer是一款由法国人开发的Apache Web服务器、PHP解释器以及MySQL数据库的整合软件包,就是Windows Apache Mysql PHP集成安装环境,即在window下的apache、php和mysql的服务器软件。免去了开发人员将时间花费在繁琐的配置环境过程,从而腾出更多精力去…

阿里云数据中台助力零售耐消品新客获取与转化

天猫消电家装联合安永战略咨询基于阿里巴巴品牌数据银行AIPL的资产积累与流转情况,设计了数字化新客运营指标体系NEW。 这一体系以消费者资产作为品牌方经营的运营基石,基于消费者人群的评估、监测、驱动来带动品牌当下及未来商业的增长。关于NEW这一指…