主成分分析步骤_多元分析(1)--主成分分析

94052d5810b20eade7de691b9976655e.png

主成分分析

主成分分析(PCA)是数据降维的一种常见方法,其它常见的方法还有因子分析(FA),独立成分分析,在进行大数据处理时,因为数据有很多特征,维数过高,不容易进行处理且不能进行可视化,所以一般要对其进行降维,我们都知道在二维平面中的两个点能确定一条直线,在三维平面中,三个点一定能确定一个平面,二维中的直线通过旋转变换可以转化到一个坐标上(一位数据),三维中的平面可以通过旋转转化到一个坐标平面上(二维数据),所以可以说这些确定直线和平面的点直接存在一定的相关关系,且可以通过某种关系将紧密关系的数据转化为经可能少的新变量。主成分分析就是利用这一点。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征[1],那么如何才能找到这样一组有正交特征的k维数据呢,在主成分分析技术中的思路是在原始坐标轴上顺序的找相互正交的坐标轴,寻找原则是:第一个新坐标轴的方向是始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴。那么如何才能得到最大差异性的主成分方向呢,就是对n维数据求协方差矩阵,在求出协方差矩阵的特征值和特征向量,选择最大的k个特征值对应的k个特征向量组成转移矩阵,和原始数据相乘得到新的数据。因为求特征值和忒特征向量有两种方式,特征值分解和奇异值分解。所以可以分两种方式进行主成分分析。

特征值分解

介绍特征值分解之前必须先知道矩阵乘法的集合意义,向量与矩阵相乘就是将向量进行旋转和伸缩(对线性变换不太了解的可以观看3Blue1Brown的视频分析,里面很形象的讲解了线性变换的过程),如果矩阵对某些向量只发生伸缩变换,不产生旋转效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值[2]。特征分解的公式如下:

其中

的特征向量,
的特征值。特征值从大到小排列表示对应特征向量的重要性。方阵
可以进行特征分解:

其中

是特征向量组成的矩阵,
表示对角矩阵,对角线上的排列的是对应的特征值。因为特征值分解只能适用
是方阵的情况。所以要引入奇异值分解。

奇异值分解

奇异值分解可以分解

阶的矩阵,解决了特征值分解只能分解方阵的缺陷,其分解供公式如下:

其中

(
阶)和
(
阶)都是正交矩阵,分别称为
的左奇异向量矩阵和右奇异向量矩阵。
阶矩阵。具体求法是:

方阵的特征向量,
方阵的特征向量。
是前面两个方阵非零特征值组成的矩阵。具体求法可以看
实例

主成分分析执行步骤

1.首先需要对原始数据进行处理,将原始数据进行单位化,单位化是按特征进行的求出特征的样本方差,每个样本再除上对应的样本方差。样本方差求法如下:

其中
,这里之所以除上n-1而不是n是为了得到无偏估计。具体解释可以参考知乎问答:
样本估计为啥是除以n-1

2.去平均值(即去中心化),即每一位特征减去各自的平均值。

3.计算协方差矩阵

注意协方差的计算,协方差的计算是按照维度来计算的,即特征,如有矩阵329*9阶,一行表示一个样本供329个样本,每列表示一个特征,上式中,n=329,

表示特征,
表示每个特征的均值(329个数的平均值)。

具体解法可参考下面的matlab代码:

x=round(rand(10,3)*50);
function Z=pca_test(x)my_mean=mean(x,1);[m,n]=size(x);Z=zeros(n,n);for i=1:nfor j=1:nZ(i,j)=sum((x(:,i)-my_mean(i)).*(x(:,j)-my_mean(j)))/(m-1); endend
end
%输出的Z为协方差,这里是10*3阶矩阵,所以协方差为3*3阶

4.计算协方差矩阵的特征值和特征向量(特征值和特征向量)

5.选取择最大的k个特征值对应的k个特征向量组成转移矩阵P,和原始数据X相乘得到新的数据Y。 Y=P*X。

matlab实现主成分分析

在matlab中有自带的求解pca(主成分分析)的函数pca()[3],函数的主要输入是经过单位化的原始数据,去中心化和计算协方差矩阵等步骤都在函数中实现,pca函数还有几个输入参数,但都是可选的(有默认值),如选择计算主成分分析的方式(特征值分解或奇异值分解)等。输出的主要有6个量:

coeff : 主成分系数 应该就是协方差矩阵的特征向量矩阵(也就是映射矩阵).完整输出的情况下是一个p-by-p 的matrix.每一列都是一个特征向量.按对应的特征值 的大小,从大到小进行排列。

score: 进行旋转(也就是利用映射矩阵coeff进行)后的结果i.e. score = X * coeff. n-by-p matrix这里有个坑 如果你使用pca时使用的是默认的中心化(i.e 不对'Centered'设置'false'),拿X *coeff 和score对比的时候, 记得把X中心化后再乘以coeff,之后再和score对比....;同样如果pca使用的是默认值, 恢复的X = score * coeff' (注意转置)是中心化后的数据。

latent: 主成分方差 也就是各特征向量对应的特征值,从大到小进行排列。

tsquared :()。

explained : 每一个主成分所贡献的比例,可以更直观的选择所需要降维的维数了,不用再用特征值去求了。

mu: X 按列的均值,当前仅当 'Centered'置于'true'(默认值)时才会返回此变量。

matlab代码

这里以matlab自带的数据进行仿真说明[4]

load cities
%得到三个数据集
%ratings 329*9每一行表示一个样本,每一列表示一个特征。
%单位化样本数据
std_ratings=std(ratings);%std()函数是对ratings求样本方差,默认是按列求,求出的结果为1*9数组
one_ratings=ratings./(std_ratings);
%使用pca函数降维
[coeff,score,latent,tsquare,explained,mu]= pca(one_ratings);
%计算选取前k个特征值进行降维后和原数据的准确率
rate=cumsum(latent)./sum(latent);%cumsum是累加和函数
%计算后选取前面7个特征值可获得90%以上的准确率,将329*9的数据降维到329*7
%选取coeff特征向量的前7列。
cho=coeff(:,1:7)
new_ratings=ratings*cho;原数据乘上特征向量得到降维后的数据

cities:它使用了衡量美国329个城市生活质量的9个指标:气候、住房、健康、犯罪率、交通、教育、艺术、娱乐和经济。对于各指标,越高表示越好,如高的犯罪指标表示低的犯罪率。它由三个数据集组成,categories是9个特征的字符说明,names是每个样本城市的字符名称,ratings才是我们需要关注的数组。

std():std函数总共有三个输入参数,其中有两个可选参数[5],flag--标注求样本方差时是除以n还是n-1,flag=0是除以n-1,flag=1是除以n,dim--表示是按列求还是按行求,dim=1是按照列分dim=2是按照行分 若是三维的矩阵,dim=3就按照第三维来分数据。默认情况下,flag=0,dim=1。

Microstrong:主成分分析(PCA)原理详解​zhuanlan.zhihu.com
CodingLabs - PCA的数学原理​blog.codinglabs.org
abbb1907eff4e3bbc719843efb2faf23.png
https://blog.csdn.net/ckzhb/article/details/75281727​blog.csdn.nethttps://blog.csdn.net/qq_25800311/article/details/83385029​blog.csdn.net

参考

  1. ^https://zhuanlan.zhihu.com/p/37777074
  2. ^特征值分解、奇异值分解、PCA概念整理 https://blog.csdn.net/jinshengtao/article/details/18448355
  3. ^https://blog.csdn.net/qq_25800311/article/details/83385029
  4. ^https://blog.csdn.net/ckzhb/article/details/75281727
  5. ^https://blog.csdn.net/qinze5857/article/details/79156555

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

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

相关文章

ArcGIS实验教程——实验十九:网络分析(最短路径实现)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络…

设计模式之策略模式和状态模式

1 策略模式 我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法, 我们可以简单理解为更加不同的策略对象,执行不同策略方法。 2 类图 3 代码实现 1)接口:Strat…

AspNetCore7.0源码解读之UseMiddleware

前言本文编写时源码参考github仓库主分支。aspnetcore提供了Use方法供开发者自定义中间件,该方法接收一个委托对象,该委托接收一个RequestDelegate对象,并返回一个RequestDelegate对象,方法定义如下:IApplicationBuild…

《零基础看得懂的C语言入门教程 》——(五)C语言的变量、常量及运算

一、学习目标 了解C语言变量的其它创建方式了解C语言常量了解C语言的运算符 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误区 第二篇:(二&#xff…

实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI

系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求 实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目 实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构 实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI 实战使用Axu…

英文词频统计预备,组合数据类型练习

实例: 下载一首英文的歌词或文章,将所有,.?!等替换为空格,将所有大写转换为小写,统计某几个单词出现的次数,分隔出一个一个的单词。2.列表实例:由字符串创建一个作业评分列表,做增删…

《零基础看得懂的C语言入门教程 》——(六)轻轻松松了解C语言的逻辑运算

一、学习目标 了解逻辑判断的概念了解if语句的使用方法了解switch语句的使用方法了解逻辑运算符的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误区 第二篇&#…

TCP之滑动窗口

一、滑动窗口的基本知识 TCP滑动窗口包含了发送窗口和接收窗口 1)、TCP滑动窗口的最大值 TCP数据包头部里面有个窗口值,默认窗口是一个16bit位字段,表示窗口的字节容量,所以TCP滑动窗口的最大值是2^16-1=65535个字节,TCP里面也有窗口扩大因子可把原来16bit的窗口,扩大为…

《零基础看得懂的C语言入门教程 》——(七)C语言的循环分分钟上手

一、学习目标 了解循环的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误区 第二篇:(二)C语言没那么难简单开发带你了解流程 第…

ArcGIS中数据存放相对路径和绝对路径的区别

配套蓝光视频教程:【ArcGIS风暴】数据相对路径VS绝对路径 问题举例: 菜鸟们在使用ArcGIS时经常会碰到将地图文档(.mxd)拷贝到别的电脑上或改变一个路径时,出现数据丢失的现象,具体表现为图层前面出现一个红色的感叹号,如下图所示。 出现以上问题的根本原因是数据GSS.ti…

TIOBE 5 月编程语言排行榜:C# 最受开发者欢迎,C++ 将冲击 Top 3

技术迭代的速度越来越快,这一点在每月更新一次的编程语言排行榜榜单中体现得尤为明显。今天,最新的 TIOBE 5 月编程语言榜单出炉,不妨一起来看一下又有哪些新的趋势。C# 的使用量增幅最高,C 或将冲击 Top 3和 4 月相比&#xff0c…

SQL Server2016导出数据表数据

SQL Server2016导出数据表数据我们前面已经介绍了很多关于SQL Server的相关文章,今天我们主要介绍的是,如何导出数据库下表中数据。我们所有的操作都是通过SSMS进行操作的。我们右击需要导出数据的数据库----任务----导出数据根据向导提示,下…

Jfinal 显示欢迎页 index.jsp

为什么80%的码农都做不了架构师?>>> IndexController.index()方法,为什么是index()方法?其实这是一个约定 那么它是如何打开index.jsp文件的呢?我们来查看index()方法的代码: public class IndexControlle…

【经典珍藏版】手把手全程教你制作漂亮的720全景地图(附PtGui软件下载地址)

如今,在网络异常发达的信息与智能测绘时代,我们可以在手机、笔记本电脑等多种设备上随时随地看到很漂亮的全景照片,仰以观于天文,俯以察于地理,可以全景图片视频拍摄,可以任意放大缩小、漫游、重力感应、VR眼睛虚拟体验等等,其乐无穷。作为一个GISer,采集地理信息,探索…

一篇文带你从0到1了解建站及完成CMS系统编写

学习目标 了解搭建一般网站的简便方式了解最原始一般站点搭建了解内容管理站点搭建了解权限设计及完成了解使用设计模式减少代码冗余了解前端拖拽页面生成及生成了解自定义数据的创建了解动态生成的前端页如何绑定自定义数据 开发环境 Windows7 *64 SP1php5.6apache/nginxth…

判断输入的整数是否为素数_C语言 | 判断是否素数

“要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一”——包租婆这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是…

『技术群里聊些啥』Task 不是你想 Cancel,想 Cancel 就能 Cancel

前言在群里看到有人问如何取消这个 Task 的执行:实际上这并不会取消S1eepMode1方法的执行:这是为什么呢?原因首先,让我们看看s_cts.Cancel()都做了啥:public void Cancel() > Cancel(false);public void Cancel(boo…

《零基础看得懂的C语言入门教程 》——(八)了解基本数组还不是那么简单

一、学习目标 了解数组的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误区 第二篇:(二)C语言没那么难简单开发带你了解流程 第…

推导坐标旋转公式(转)

在《Flash actionScript 3.0 动画教程》一书中有一个旋转公式: x1cos(angle)*x-sin(angle)*y; y1cos(angle)*ysin(angle)*x; 其中x,y表示物体相对于旋转点旋转angle的角度之前的坐标,x1,y1表示物体旋转angle后相对于旋转点的坐标 …

任务管理平台_jytask一个任务调度统一管理平台

task介绍和使用https://gitee.com/yuejing/task 下的文档:[doc/task介绍和使用.docx]task是什么?task是一个任务调度统一管理平台。 目前主要是通过http来进行任务的调度,http支持签名算法。一张图能更加懂它是做什么的(一个集中管理任务的平…