遥感&机器学习入门实战教程|Sklearn案例⑩:降维与分解(decomposition 模块)

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在高光谱、时序遥感数据里,特征维度往往非常高。如何压缩维度、提取主要信息,是建模前的重要一步。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 常见于光谱解混。

  • 方法没有绝对优劣,需要结合任务特点选择。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遥感AI实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值