当前位置:网站首页>matlab / ENVI 主成分分析实现及结果分析
matlab / ENVI 主成分分析实现及结果分析
2022-07-07 01:41:00 【PeanutbutterBoh】
前情提要:最近在做主成分分析筛选变量,目的是计算每个环境数据在不同主成分上的载荷大小,但是算出来感觉和别的论文结果不对,所以参考一些文献试图理解一下。
1 主成分载荷
百度百科说:主成分载荷( oad of principal component)主成分分析中原始变量与主成分之间的相关系数。
再往深了理解:参考这个文档写的特别详细链接: 主成分分析法

那么很容易理解,主成分载荷就是原始数据之前的系数,用主成分载荷与原始数据相乘即可得到主成分。
2 matlab主成分分析实验
按照上述思路,我分别用ENVI和matlab做了实验。
我这里使用的是26个环境变量,分辨率都是一样的。我想用主成分分析计算不同变量的载荷,来确定哪些变量比较重要然后保留下来去跑模型。直接上matlab的代码
clear all; clc
[tifname,tifpath] = uigetfile('.tif','选择环境tif数据','MultiSelect','on');
for i = 1:numel(tifname)
[A,~] = geotiffread([tifpath,tifname{
i}]);
Environ_Var(:,:,i) = double(A); % 把那些环境变量合成一个矩阵
end
E = reshape(Environ_Var,size(Environ_Var,1)*size(Environ_Var,2),...
size(Environ_Var,3)); % 把三维数据换成二维,列是变量
E(E == -9999) = nan;
E = E(~isnan(E(:,1)),:); % 去除变量中的nan值
E_Norm = normalize(E); % 标准化变量
[coeff,score,latent,~,explained,~] = pca(E_Norm,'Centered',false);
注意:1、我这些变量他们的单位量纲大不相同,所以要给他们做标准化,然后调用pca函数时就不需要再中心化处理了。
2、我的环境变量中无数据值是-9999,所以我标准化之前把它们去除了。
由计算结果可分析知:
coeff即为主成分载荷,每一列对应一个主成分(matlab帮助文档里把它叫主成分系数)
为什么这样说呢,从matlab帮助文档(链接: 原始数据的主成分分析)可知:score*coeff ’ 可恢复为原始数据。(至于为什么是coeff的转置,score是主成分分数,行对应于观测值,列对应于成分;coeff 的每列都包含一个主成分的系数。所以用score的一行去乘coeff的一行才是一个观测值)
然后我也试了一下,发现确实如此,恢复的数据与我标准化的数据是一样的。
从开头说的AT X = PC变换一下就可以知道,载荷就是主成分系数A。
但是这里还有一个问题就是 matlab算的这个coeff需要乘-1(也就是符号相反)才是真正的变量载荷 ,至于为什么往下看ENVI的实验
3 ENVI主成分分析实验
具体操作可以看之前的博客ENVI5.3.1使用Landsat 8影像进行主成分分析实例操作
但这个博客只有纯步骤,没有分析结果,而且注意一点:选择相关性矩阵还是协方差矩阵:数据之间量纲较大就用相关性矩阵,量纲相差不大或者你已经给数据做了标准化那就用协方差。而且ENVI做主成分时不能有nan值,如果有需要进行掩膜处理
注意这一点也差不多了然后直接看ENVI结果。(具体结果没有截图我存在了excel里)
可以看到ENVI会给你特征值、特征向量这样的东西,特征向量是每行代表一个成分,列代表变量。
现在拿出第一个主成分的载荷(ENVI特征向量、matlab的coeff)来看一下结果:
很神奇二者数值几乎一样只是符号相反。那怎么确定哪个是正确的符号呢?那就要看载荷的意义。那SST year mean举例(举例也可以看这个https://wenku.baidu.com/view/5dc0b7c1514de518964bcf84b9d528ea81c72f6f.html讲的很详细),我现在已经知道如果SST升高对我生物生存是不利的,那么SST的载荷就应该是负号。
那么在matlab里画一下图吧,离原点越近的变量,需要将其剔除
4 总结
若要计算变量在主成分上的载荷,ENVI是特征向量eigenvector,matlab是主成分系数coeff再乘-1变个号。
边栏推荐
- MFC BMP sets the resolution of bitmap, DPI is 600 points, and gdiplus generates labels
- Change the original style of UI components
- 测试开发基础,教你做一个完整功能的Web平台之环境准备
- 深度聚类:将深度表示学习和聚类联合优化
- Detailed explanation of platform device driver architecture in driver development
- Cf:c. column swapping [sort + simulate]
- How to set up in touch designer 2022 to solve the problem that leap motion is not recognized?
- [FPGA] EEPROM based on I2C
- 360织语发布7.0新品 为党政军、央国企打造专属“统一数字工作空间”
- The solution of a simple algebraic problem
猜你喜欢

Jstack of JVM command: print thread snapshots in JVM

直击2022ECDC萤石云开发者大会:携手千百行业加速智能升级

LM小型可编程控制器软件(基于CoDeSys)笔记二十三:伺服电机运行(步进电机)相对坐标转换为绝对坐标

可极大提升编程思想与能力的书有哪些?

jmeter 函数助手 — — 随机值、随机字符串、 固定值随机提取

Apple CMS V10 template /mxone Pro adaptive film and television website template

绕过open_basedir
![[SOC FPGA] custom IP PWM breathing lamp](/img/4b/5053137cf95e851ca89057e9b9c15c.jpg)
[SOC FPGA] custom IP PWM breathing lamp

Implementation of VGA protocol based on FPGA

jvm命令之 jcmd:多功能命令行
随机推荐
Storage of dental stem cells (to be continued)
Detailed explanation of platform device driver architecture in driver development
那些自损八百的甲方要求
基本Dos命令
jvm命令之 jcmd:多功能命令行
Peripheral driver library development notes 43: GPIO simulation SPI driver
JMeter's own functions are not enough? Why don't you develop one yourself
rt-thread 中对 hardfault 的处理
Understand the deserialization principle of fastjson for generics
Markdown 并排显示图片
Qt多线程的多种方法之一 QThread
10W word segmentation searches per second, the product manager raised another demand!!! (Collection)
postgresql 数据库 timescaledb 函数time_bucket_gapfill()报错解决及更换 license
职场经历反馈给初入职场的程序员
Introduction to the extension implementation of SAP Spartacus checkout process
3531. 哈夫曼树
测试开发基础,教你做一个完整功能的Web平台之环境准备
Value range of various datetimes in SQL Server 2008
你不知道的互联网公司招聘黑话大全
Say sqlyog deceived me!