在多元统计分析中,主成分分析Principal components analysisPCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。【wiki】

在遥感影像解译与分类中,PCA是经常用到的降维滤噪处理技术。现在实现这个处理流程,便于熟悉和掌握IDL矩阵乘除运算操作。

IDL 源码PRO PCA,DATA,EIGENVALUES = egValues,EIGENVECTORS = egvec,PERCENT = PERCENT,_EXTRA=EXTRA
GET_SZ,data,ns=ns,nl=nl,nb=nb,type = type IF ISA(DATA,/NUMBER) AND NB GT 1 AND SIZE(DATA,/N_DIMENSIONS) EQ 3 THEN BEGIN
DATA = TRANSPOSE(REFORM(DATA,NS*NL,NB))
corr = correlate(DATA,/covariance)
egValues = EIGENQL( corr, EIGENVECTORS=egvec,/DOUBLE ,/ABSOLUTE)
absEgValue = ABS(egValues)
PERCENT = absEgValue / TOTAL(absEgValue);
; EGVEC FORMAT
;EGVEC = [ EGVEC1
; EGVEC2
; EGVEC3
; ... DATA = TEMPORARY(REFORM(TRANSPOSE(egvec) ## TRANSPOSE(DATA),NS,NL,NB))
ENDIF
END
;---------------------------------------
pro GET_SZ,data,ns=ns,nl=nl,nb=nb,type = type sz = size(data) type = sz[0] ge 1 ? sz[-2] : 0
ns = sz[0] ge 1 ? sz[1] : 1
nl = sz[0] ge 2 ? sz[2] : 1
nb = sz[0] ge 3 ? sz[3] : 1 end

处理流程:

  1. 获得矩阵 行NL、列NS、波段数nb。ns ,number of samples;nl,number of lines;nb,number of bands。三种缩写借鉴自Envi。

  2. 矩阵变形,将3维变成2维,nb行,ns*nl列。也就是说将每一个波段的二维图像矩阵压缩成一维数组。因为求相关系数的函数correlate不支持3维矩阵。

  3. 对各波段之间的相关系数矩阵求特征值和对应的特征向量。

  4. 如果有需要,可以计算各主成分方差的比重。

  5. 特征向量左乘原三维矩阵得到主成分结果。转置、二维变三维都是中间过程,函数用法可以查帮助,在此是次要细节略过。

说明:

  • 如此,输入的三维矩阵变量data,运算完毕size不变,内容却成了各主成分。这就是IDL procedure的典型用法。若要一次处理多个变量a、b、c、d,只需定义一个pro,将abcd作为参数传入,运算完毕abcd值就都改变了。如果采用函数来return计算结果则需要定义4个function。

  • function多用在连续调用,如a=foo1(foo2(foo3(“”)));这种情形。

  • 本计算与Envi菜单的PCA分析结果略有差别。因为相关系数矩阵计算结果不一致,原因暂时我也不清楚,希望大牛可以告知。不过没有太大关系,本文主要是熟悉IDL的编程,PCA的运算过程。只要流程正确、结果有效,在遥感影像解译与分类中发挥作用即可。Envi可能有预处理(如归一化),没必要一定要向它看齐。

IDL 实现PCA算法的更多相关文章

  1. PCA算法是怎么跟协方差矩阵/特征值/特征向量勾搭起来的?

    PCA, Principle Component Analysis, 主成份分析, 是使用最广泛的降维算法. ...... (关于PCA的算法步骤和应用场景随便一搜就能找到了, 所以这里就不说了. ) ...

  2. 模式识别(1)——PCA算法

    作者:桂. 时间:2017-02-26  19:54:26 链接:http://www.cnblogs.com/xingshansi/articles/6445625.html 声明:转载请注明出处, ...

  3. 三种方法实现PCA算法(Python)

    主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...

  4. 降维之pca算法

    pca算法: 算法原理: pca利用的两个维度之间的关系和协方差成正比,协方差为0时,表示这两个维度无关,如果协方差越大这表明两个维度之间相关性越大,因而降维的时候, 都是找协方差最大的. 将XX中的 ...

  5. PCA算法学习(Matlab实现)

    PCA(主成分分析)算法,主要用于数据降维,保留了数据集中对方差贡献最大的若干个特征来达到简化数据集的目的. 实现数据降维的步骤: 1.将原始数据中的每一个样本用向量表示,把所有样本组合起来构成一个矩 ...

  6. OpenCV学习(35) OpenCV中的PCA算法

    PCA算法的基本原理可以参考:http://www.cnblogs.com/mikewolf2002/p/3429711.html     对一副宽p.高q的二维灰度图,要完整表示该图像,需要m = ...

  7. 我所认识的PCA算法的princomp函数与经历 (基于matlab)

    我接触princomp函数,主要是因为实验室的项目需要,所以我一接触的时候就希望快点学会怎么用. 项目中需要利用PCA算法对大量数据进行降维. 简介:主成分分析 ( Principal Compone ...

  8. PCA算法的最小平方误差解释

    PCA算法另外一种理解角度是:最小化点到投影后点的距离平方和. 假设我们有m个样本点,且都位于n维空间 中,而我们要把原n维空间中的样本点投影到k维子空间W中去(k<n),并使得这m个点到投影点 ...

  9. PCA算法理解及代码实现

    github:PCA代码实现.PCA应用 本文算法均使用python3实现 1. 数据降维   在实际生产生活中,我们所获得的数据集在特征上往往具有很高的维度,对高维度的数据进行处理时消耗的时间很大, ...

随机推荐

  1. 手动编译生成apk

    转载一篇介绍如何去手动编译生成apk的文章: http://jojol-zhou.iteye.com/blog/729254

  2. 关于MTK平台SIM-ME Lock的配置方案

    针对一些运营商的锁网需求,MTK平台已经对其有很好的支持.绝大多数的海外需求可以通过直接配置相关文件来完成.这里简单描述一下配置方法,不做原理分析. 相关数据结构分析: Modem中与SML锁网配置相 ...

  3. 2015 ACM/ICPC Asia Regional Changchun Online

    1001 Alisha’s Party 比赛的时候学长stl吃T.手写堆过. 赛后我贴了那两份代码都过.相差.2s. 于是用stl写水果. # include <iostream> # i ...

  4. drupal中安装CKEditor文本编辑器,并配置图片上传功能

    一.下载: 1.CKEditor模块 2.IMCE模块 二.安装       1.复制: 下载完上面两个模块之后,解压,将解压后整个文件夹,复制粘贴,放到 sites\all\modules下面,个人 ...

  5. 为什么yslow用不了

    因为yslow暂时不支持 Firefox 36以上版本.建议您可以使用它的书签版.访问这里 http://yslow.org/mobile/把页面最后的那个 Desktop Bookmarklet I ...

  6. Docker: Usage instruction

    Install docker from official site, in windows. or install docker from repo as official site told, in ...

  7. .NET技术+25台服务器怎样支撑世界第54大网站

    摘要:同时使用Linux和Windows平台产品,大量使用静态的方法和类,Stack Overflow是个重度性能控.同时,取代横向扩展,他们坚持着纵向扩展思路,因为“硬件永远比程序员便宜”. Sta ...

  8. select 1 from table

    1.select 1 from mytable;与select anycol(目的表集合中的任意一行) from mytable;与select * from mytable 作用上来说是没有差别的, ...

  9. YII2 请求(request)

    请求 一个应用的请求是用 yii\web\Request 对象来表示的,该对象提供了诸如 请求参数(译者注:通常是GET参数或者POST参数).HTTP头.cookies等信息. 默认情况下,对于一个 ...

  10. .Net 读取xml

    一.常规方法 1.知识介绍 //初始化一个xml对象 XmlDocument xml = new XmlDocument(); //加载xml文件 xml.Load("文件路径") ...