一、主成分分析法的基本介绍
主成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。 又称主分量分析。
是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数据维度,同时保留住较多的原数据点的特性。
PCA降维的目的,就是为了在尽量保证“信息量不丢失”的情况下,对原始特征进行降维,也就是尽可能将原始特征往具有最大投影信息量的维度上进行投影。将原特征投影到这些维度上,使降维后信息量损失最小。(from https://blog.csdn.net/lanyuelvyun/article/details/82384179)
二、Envi和Envi Classic中实现主成分分析的基本介绍
ENVI主成分分析(PCA)是通过使用Principal Components选项生成互不相关的输出波段,达到隔离噪声和减少数据集维数的方法。 由于多波段数据经常是高度相关的,主成分变换寻找一个原点在数据均值的新的坐标系统,通过坐标轴的旋转来使数据的方差达到最大,从而生成互不相关的输出波段。 主成分(PC)波段是原始波谱波段的线性合成,它们之间是互不相关的。可以计算输出主成分波段(与输入的波谱波段数相同)。
第一主成分包含最大的数据方差百分比,第二主成分包含第二大的方差百分比,以此类推,最后的主成分波段由于包含很小的方差(大多数由原始波谱的噪声引起),因此显示为噪声。由于数据的不相关,主成分波段可以生成更多种颜色的彩色合成图像。
ENVI 能完成正向和逆向的主成分(PC)旋转。
正向PC旋转用一个线性变换使数据方差达到最大。当使用正向PC旋转时,ENVI允许计算新的统计值,或根据已经存在的统计值进行旋转。输出值可以存为字节型、浮点型、整型、长整型或双精度型。也可以基于特征值来提取PC旋转的输出内容,生成只包含所需的PC波段的输出。
使用Inverse PC Rotation工具可以将主成分图像变换回原始数据空间。
三、Envi Classic 实现PCA
3.1 计算新的统计值和旋转 :使用Compute New Statistics and Rotate选项可以计算数据特征值、协方差或相关系数矩阵以及PC正向旋转。
选择Transforms > Principal Components > Forward PC Rotation > Compute New Statistics and Rotate。当出现Principal Components Input File对话框时,选择输入文件或用标准ENVI选择程序选取子集。将会出现Forward PC Rotation Parameters对话框。
注意:点击“Stats Subset”按钮可以基于一个空间子集或感兴趣区计算统计信息。该统计将被应用于整个文件或文件的空间子集。
若需要,键入一个输出统计文件名。使用箭头切换按钮,选择是根据“Covariance Matrix”(协方差矩阵)还是根据“Correlation Matrix”(相关系数矩阵)计算主成分波段。
注意:一般说来,计算主成分时,选择使用协方差矩阵。当波段之间数据范围差异较大时,选择相关系数矩阵,并且需要标准化。
选用输出到“File”或“Memory”。在“Output Data Type”菜单中,选择所需的输出文件数据类型。
选择输出的主成分波段数。可以通过键入所需的数字,或用“Number of Output PC Bands”标签旁的增减箭头按钮来确定输出的主成分波段数。默认的输出波段数等于输入波段数。也可以用特征值来选择输出的主成分波段数,按照如下步骤操作。
A. 点击“Select Subset from Eigenvalues”标签附近的按钮,选择“YES”。统计信息将被计算,并出现Select Output PC Bands对话框,列出每个波段和其相应的特征值。同时也列出每个主成分波段中包含的数据方差的累积百分比。
B. 在“Number of Output PC Bands”文本框中,键入一个数字或点击箭头按钮,确定要输出的波段数。特征值大的主成分波段包含最大的数据方差。较小的特征值包含较少的数据信息和较多的噪声。为了节省磁盘空间,最好仅输出具有较大特征值的波段。
C. 在Select Output PC Bands对话框中,点击“OK”。输出的PC旋转将只包含选择的波段数。例如:如果选择“4”作为输出的波段数,则只有前4个主成分波段会出现在输出文件里。
在Forward PC Rotation Parameters对话框中,点击“OK”。
ENVI处理完毕后,将出现PC EigenValues绘图窗口,主成分波段将被导入可用波段列表中,并用于显示。
根据已有统计进行PC 旋转
如果已经为数据统计出协方差和特征值,可以将它们输入到PC旋转中。可以在PC 旋转中使用包含如下数据的统计文件,包括:与输入数据具有相同波段数的协方差和特征值(也许已经用Basic Tools >Compute Statistics选项,或在以前的PC旋转中计算出了这些统计值)。
提示:当为PCA旋转计算统计信息时,如果要避免使用某些特定像元,首先建立一个包含这些“坏”像元的掩膜,然后使用Basic Tools >Statistics对掩膜图像计算协方差统计信息,也可以使用该统计文件进行主成分分析。
选择Transforms > Principal Components > Forward PC Rotation > PC Rotation from Existing Stats。当出现标准ENVI选择文件或子集对话框时,选择输入文件,并用标准ENVI文件选择程序建立所需的子集。将出现另一个文件选择对话框,在当前输入数据目录列表中,显示出了已经存在的统计文件(默认扩展名为 .sta )。
用标准ENVI文件选择程序选择统计文件。选择输出到“File”或“Memory”。在“Output Data Type”按钮菜单中,选择输出文件的数据类型。选择输出的主成分波段数。
可以通过键入所需的数字,或用“Number of Output PC Bands”标签旁的增减箭头按钮来确定输出的主成分波段数。默认的输出波段数等于输入波段数。也可以用特征值来选择输出的主成分波段数,按照如下步骤操作。
点击“Select Subset from Eigenvalues”标签附近的按钮,选择“YES”。统计信息将被计算,并出现Select Output PC Bands对话框,其中列出每个波段和其相应的特征值,同时也列出每个主成分波段中包含的数据方差的累积百分比。
在“Number of Output PC Bands”文本框中,键入一个数字或点击箭头按钮,确定要输出的波段数。
特征值大的主成分波段包含最大的数据方差。较小的特征值包含较少的数据信息和较多的噪声。为了节省磁盘空间,最好仅输出具有较大特征值的波段。
在Select Output PC Bands对话框中,点击“OK”。输出的PC旋转将只包含选择的波段数。例如:如果选择“4”作为输出的波段数,则只有前4个主成分波段会出现在输出文件里。
在Forward PC Rotation Parameters对话框中,点击“OK”。
ENVI处理完毕后,将出现PC EigenValues绘图窗口,主成分波段将被导入可用波段列表中,并用于显示。
反向PC旋转
使用Inverse PC Rotation工具可以将主成分图像变换回原始数据空间。
选择Transforms > Principal Components > Inverse PC Rotation。当出现标准ENVI选择文件或子集对话框时,选择输入文件,并用标准ENVI文件选择程序建立所需子集。将出现另一个文件选择对话框,在当前输入数据目录列表中,显示出了已经存在的统计文件(默认扩展名为 .sta )选择在正向PC旋转中存储的统计文件。
注意:在选择反向PC旋转之前,统计文件(后缀.sta)必须已经存在。
在“Calculate using”标签旁,使用箭头切换按钮选择“Covariance Matrix”或“Correlation Matrix”。
注意:如果想要将图像反变换回原始数据空间,使用与正向PC旋转中相同的计算方法。
选择输出到“File”或“Memory”。在“Output Data Type”按钮菜单中,选择输出文件的数据类型。点击“OK”运行反向变换。ENVI处理完毕后,主成分波段将被导入到可用波段列表中,并用于显示(用标准灰阶或RGB彩色合成方法)。
四、Envi实现
五、GEE实现
GEE中提供了关于主成分分析的代码。
//主成分分析函数
var getPrincipalComponents = function(centered, scale, region)
实现即可