主成分分析步骤_多元分析(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…

期待已久的Java 9 今日发布

人们期待已久的Java SE 9.0将在2017年9月21日发布,它会带来一些重要的变化。\\JDK 9的核心变化就是引入了一种新的Java编程组件,也就是模块,按照Oracle的说法,它是一个可命名的、自描述的代码和数据集合。模块技术的核心目标是减少…

AspNetCore7.0源码解读之UseMiddleware

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

边工作边刷题:70天一遍leetcode: day 11-3

Single Number I/II II的python解是网上抄的,其实可以AC,但是python不会像c/java那样自动overflow,而是转化成long。所以如果有负数的情况会得到一个巨大的正数解,比如 Input:[-2,-2,1,1,-3,1,-3,-3,-4,-2] Output:4294967292 Exp…

《零基础看得懂的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…

ArcGIS实验教程——实验二十:ArcGIS数字高程模型DEM建立

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 本实验讲述DEM的创建方法和过程。DEM的采集方法有四种:地面测量、摄影测量、空间站、地形图数字化。 二、实验内容 1、插值法DEM建立 2、创建TIN 3、TIN转栅格 4、生成等高线 …

思科asa5515端口映射_Cisco ASA端口映射

SQL基础--同义词同义词的概念: 同义词是Oracle对象的别名,使用同义词访问相同的对象 可以为表.视图.存储过程.函数或另一同义词等对象创建同义词 方便访问其它用户的对象,隐藏了对象的身份 缩短对象名字的长度 同义 ...访问本地json文件因跨域导致的问题我使用jquery的getJSON的…

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

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

ArcGIS实验教程——实验二十一:DEM分析

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 表面分析主要通过生成新数据集,如等值线、坡度、坡向、山体阴影等派生数据,获取更多的反应原始数据集中所暗含的空间特征、空间格局等信息。 二、实验内容 1、地形因子计算 2、填…

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

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

.NET 6 在 Win7 系统证书链错误导致 HttpWebRequest 内存泄露

本文记录我将应用迁移到 dotnet 6 之后,在 Win7 系统上,因为使用 HttpWebRequest 访问一个本地服务,此本地服务开启 https 且证书链在此 Win7 系统上错误,导致应用内存泄露问题。本文记录此问题的原因以及调查过程核心原因核心原因…

个人成就故事

曾经参加过文艺演出,并且照片上过学校的文化墙。 中专时画的园林景观获过奖。 在麦当劳打工时参加过大型活动,并且担任小队副队长。 在学校坚持锻炼练出了一些腹肌转载于:https://www.cnblogs.com/mokutanuki/p/5486567.html

Linux下java -version版本不对

在服务器上更新了新的 jdk,也在 /etc/profile 中设置了新的 JAVA_HOME,并且 source /etc/profile 然后使用java -version 和 javac -version 发现版本还是老版本,死活没有使用我新指定的。 中间各种排查,这里就不废话了&#xff0…

JAVA-JSP内置对象

相关资料:《21天学通Java Web开发》 request 请求对象 类型javax.servlet.ServletRequest 作用域Requestresponse 响应对象 类型javax.servlet.SrvletResponse 作用域PagepageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域Pagesession 会话对象…

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…