当前位置:网站首页>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变个号。
边栏推荐
- [SOC FPGA] peripheral PIO button lights up
- C面试24. (指针)定义一个含有20个元素的double型数组a
- go-microservice-simple(2) go-Probuffer
- 3428. Put apples
- MFC BMP sets the resolution of bitmap, DPI is 600 points, and gdiplus generates labels
- Three updates to build applications for different types of devices | 2022 i/o key review
- 软件测试的几个关键步骤,你需要知道
- 一段程序让你明白什么静态内部类,局部内部类,匿名内部类
- ETCD数据库源码分析——从raftNode的start函数说起
- Jstat of JVM command: View JVM statistics
猜你喜欢
Rk3399 platform development series explanation (WiFi) 5.52. Introduction to WiFi framework composition
Markdown displays pictures side by side
rt-thread 中对 hardfault 的处理
从“跑分神器”到数据平台,鲁大师开启演进之路
win系统下安装redis以及windows扩展方法
The solution of a simple algebraic problem
软件测试的几个关键步骤,你需要知道
When we talk about immutable infrastructure, what are we talking about
C. colonne Swapping [tri + Simulation]
Rk3399 platform development series explanation (WiFi) 5.53, hostapd (WiFi AP mode) configuration file description
随机推荐
JVM监控及诊断工具-命令行篇
rt-thread 中对 hardfault 的处理
If you don't know these four caching modes, dare you say you understand caching?
Storage of dental stem cells (to be continued)
苹果cms V10模板/MXone Pro自适应影视电影网站模板
谷歌 Chrome 浏览器发布 103.0.5060.114 补丁修复 0-day 漏洞
Markdown displays pictures side by side
Implementation of VGA protocol based on FPGA
Rk3399 platform development series explanation (WiFi) 5.53, hostapd (WiFi AP mode) configuration file description
直击2022ECDC萤石云开发者大会:携手千百行业加速智能升级
Jstack of JVM command: print thread snapshots in JVM
K8s running Oracle
QT console output in GUI applications- Console output in a Qt GUI app?
[SOC FPGA] peripheral PIO button lights up
Jmeter自带函数不够用?不如自己动手开发一个
软件测试知识储备:关于「登录安全」的基础知识,你了解多少?
JVM monitoring and diagnostic tools - command line
VMware安装后打开就蓝屏
Bypass open_ basedir
SubGHz, LoRaWAN, NB-IoT, 物联网