遥感机器学习入门实战教程|Sklearn案例⑩:降维与分解(decomposition 模块)
在高光谱、时序遥感数据里,特征维度往往非常高。如何压缩维度、提取主要信息,是建模前的重要一步。sklearn.decomposition 模块为我们提供了一系列常见的降维与分解方法,本篇就带大家快速入门。
另外,往期内容和数据链接如下:
遥感&机器学习入门实战教程 数据集分享
🧩 decomposition 模块常见方法
-
PCA(主成分分析):最经典,线性正交投影,保留最大方差方向。
-
IncrementalPCA:适合大数据分批训练。
-
KernelPCA:非线性降维,用核函数映射到高维再PCA。
-
ICA(独立成分分析):把信号分解为统计独立分量,常用于混合源分离。
-
NMF(非负矩阵分解):分解为非负基和系数,适合光谱分解与端元分析。
-
DictionaryLearning / SparseCoding:用稀疏字典表示数据。
💻 示例代码:多方法降维对比
这里我们用 KSC 数据集,取有标签像素,演示 PCA / ICA / NMF 三种方法,把数据降到 2 维并可视化对比。
# -*- coding: utf-8 -*-
"""
Sklearn案例⑩:decomposition 降维方法对比
演示 PCA / ICA / NMF 在高光谱数据上的效果
"""import os, numpy as np, scipy.io as sio, matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.decomposition import PCA, FastICA, NMF# ===== 参数 =====
DATA_DIR = "your_path" # ←修改为你的数据路径
SEED = 42# ===== 1. 数据加载 =====
X = sio.loadmat(os.path.join(DATA_DIR,"KSC.mat"))["KSC"].astype(np.float32)
Y = sio.loadmat(os.path.join(DATA_DIR,"KSC_gt.mat"))["KSC_gt"].astype(int)
coords = np.argwhere(Y!=0)
X_all = X[coords[:,0], coords[:,1]]
y_all = Y[coords[:,0], coords[:,1]]-1# 为保证非负分解可用,先缩放到 [0,1]
scaler = MinMaxScaler().fit(X_all)
X_all = scaler.transform(X_all)# ===== 2. 定义三种分解方法 =====
models = {"PCA": PCA(n_components=2, random_state=SEED),"ICA": FastICA(n_components=2, random_state=SEED, max_iter=1000),"NMF": NMF(n_components=2, init="nndsvda", random_state=SEED, max_iter=1000)
}# ===== 3. 拟合与变换 =====
results = {}
for name, model in models.items():X_trans = model.fit_transform(X_all)results[name] = X_trans# ===== 4. 可视化对比 =====
plt.figure(figsize=(12,4))
for i,(name,Xt) in enumerate(results.items(),1):plt.subplot(1,3,i)plt.scatter(Xt[:,0], Xt[:,1], c=y_all, s=6, cmap="tab20")plt.title(name)plt.axis("off")
plt.suptitle("Sklearn.decomposition 多方法降维对比", fontsize=14)
plt.tight_layout(rect=[0,0,1,0.95])
plt.show()
🔍 结果解读
-
PCA:分布最紧凑,能看到明显的“类团块”,常用作基线。
-
ICA:强调统计独立性,分布更分散,可能更利于区分类别。
-
NMF:保持非负,常用于“端元-丰度”分析,更贴合光谱混合模型。
✅ 小结
-
sklearn.decomposition
提供了多种降维/分解方法,不仅仅是 PCA。 -
在遥感场景里:
-
PCA 是首选基线;
-
ICA 常用于源分离(如大气/地物成分);
-
NMF 常见于光谱解混。
-
-
方法没有绝对优劣,需要结合任务特点选择。