开始介绍高光谱降维之前,我们首先回忆PCA的原理。
推荐B站UP:交通数据小旭学长 《用最直观的方式告诉你:什么是主成分分析PCA》
一、PCA原理
1.1 引入
假设手上有一组二维数据D,它们排列成了一条直线实则一维数据,此时我们如果能找到新的一维坐标系,这些点即可存储成一维数据。本文接下来所讲述的主成分分析方法(Principal Component Analysis, PCA)就是满足这种需求的降维方法。
![](https://img-blog.csdnimg.cn/img_convert/26afe11716347573534bbfa0dd0b9d62.png)
所以,PCA最重要的就是找一个好的坐标系,使手上的数据最大程度地保留信息。
![](https://img-blog.csdnimg.cn/img_convert/3d6762dc662f064621ace19f092b2897.png)
那什么样的坐标系算好的呢?答:数据在该坐标系上的投影越分散越好,也就是方差越大越好。
![](https://img-blog.csdnimg.cn/img_convert/e7b727b9ba9ccc6a9b376d0ce728d013.png)
1.2 PCA步骤详解
第一步,去中心化 把坐标原点放在数据中心
第二步,找坐标系 找到方差最大的方向(核心问题)
第三步,求新的坐标点
第二步是最核心的步骤,怎么找到新坐标轴的方向呢?在这之前,先复习一下数据线性表换。
拉伸矩阵S 数据D SD表示对数据D进行拉伸
旋转矩阵R RD表示对数据D进行旋转
(左乘矩阵相当于对数据进行线性变换)
白数据是我们希望得到的各坐标轴不相关的,没有冗余的数据
我们手上的数据可以通过降维得到类似白数据的形式。
![](https://img-blog.csdnimg.cn/img_convert/602b23d667704df7b176bfc7d7517260.png)
白数据D可以通过拉伸和旋转得到我们手上的数据D'=RSD
![](https://img-blog.csdnimg.cn/img_convert/61ef1e39ed7f9f20ce0951b0b9945e7c.png)
手上的数据也可以通过逆变换得到白数据
![](https://img-blog.csdnimg.cn/img_convert/62a4a2c290d5971ef09ea2169319a15a.png)
旋转矩阵R怎么求呢?答:协方差矩阵的特征向量
![](https://img-blog.csdnimg.cn/img_convert/58d1dc8a875b0f3ed51d3679632a7ebe.png)
总结:
![](https://img-blog.csdnimg.cn/img_convert/b3d6bd9e127fc9f8d4c59401a12f7705.png)
PCA缺点:离群点的影响大
二、高光谱图像降维
数据来源:
http://www.ehu.eus/ccwintco/index.php?title=Hyperspectral_Remote_Sensing_Scenes#Salinas_scene
Indian Pines: 该场景由AVIRIS (Airborne VisibleInfrared Imaging Spectrometer,机载可见光/红外成像光谱仪) 传感器在印第安纳州西北部的印第安松树试验场采集,由145×145像素和224个光谱反射带组成,波长范围为0.4–2.5μm。空间分辨率20m,谱分辨率10nm。该数据文件下包括Indian_pines_corrected.mat和Indian_pines_gt.mat文件。其中文件名中含有corrected的.mat文件为原始三维的遥感数据。剩下的一个.mat文件是遥感数据的lable标签,它是二维数据。
%% 数据读取
filename = ['Indian_pines\Indian_pines_corrected'];
X=load(filename);
A=X.indian_pines_corrected; %高光谱数据X是结构体,需要X.来进行调用;
%% 数据降维 reshape
[m,n,p]=size(A); %m行数 n列数 p波段数
t=m*n;
M=reshape(A,t,p);% M[样本数 波段数]
%% 主成分分析
[pc,score,latent,tsquare]=pca(M);%pc为主成分系数,score为主成分的结果,latent为方差
k=3;
feature_after_PCA=score(:,1:k);
RES=reshape(feature_after_PCA,m,n,k);