Python处理高光谱数据#3 降维

本文介绍了如何使用Python进行高光谱数据的主成分分析(PCA)和线性判别分析(LDA),通过scikit-spectral库实现降维操作,适合对遥感数据处理感兴趣的读者。通过实例展示了如何加载数据、执行降维并可视化结果。
摘要由CSDN通过智能技术生成

基于Python的高光谱降维操作

  • 高光谱数据:点击此处可下载
  • 用到的库:matplotlib、scipy、spectral
  • 主要内容:主成分分析(PCA)与线性判别(LDA)

欢迎有兴趣的朋友交流指点。最后,废话不多说直接上代码😄

import matplotlib.pyplot as plt
from scipy.io import loadmat
import spectral as spy


# PCA主成分分析
def pca_dr(src):
    pc = spy.principal_components(src)
    pc_98 = pc.reduce(fraction=0.98)  # 保留98%的特征值
    print(len(pc_98.eigenvalues))  # 剩下的特征值数量
    spy.imshow(data=pc.cov, title="pc_cov")
    img_pc = pc_98.transform(input_image)  # 把数据转换到主成分空间
    spy.imshow(img_pc[:, :, :3], stretch_all=True)  # 前三个主成分显示
    return img_pc


# LDA线性判别
def lda_dr(src, gt):
    classes = spy.create_training_classes(src, gt)
    fld = spy.linear_discriminant(classes)
    print(len(fld.eigenvalues))
    img_fld = fld.transform(src)
    spy.imshow(img_fld[:, :, :3])
    return img_fld


input_image = loadmat('D:/Hyper/Indian_pines_corrected.mat')['indian_pines_corrected']
gt = loadmat("D:/Hyper/Indian_pines_gt.mat")['indian_pines_gt']

pca_dr(input_image)
lda_dr(input_image, gt)

plt.pause(60)

spy.principal_components计算数据的主成分,并返回一个主成分的平均值、协方差、特征值和特征向量。该对象还包含一个将数据旋转到主成分空间的变换方法,以及一个将特征向量数量减小的方法。

PCA:

在这里插入图片描述

在这里插入图片描述

LDA:

在这里插入图片描述

在这里插入图片描述

高光谱PCA降维分类代码包括两部分,一部分是PCA降维代码,另一部分是分类代码。 PCA降维代码: PCA(Principal Component Analysis,主成分分析)是一种常用的降维方法,可以将高维数据映射到低维空间。通过选择保留的主成分数目,可以实现数据降维。下面是高光谱PCA降维代码的实现: ```python import numpy as np from sklearn.decomposition import PCA # 读入高光谱数据 data = np.loadtxt('spectrometer_data.txt', delimiter=',') # 实例化PCA类对象 pca = PCA(n_components=3) # 对数据进行降维 data_pca = pca.fit_transform(data) # 输出降维后的数据 print(data_pca) ``` 这段代码中,我们使用sklearn库中的PCA类进行降维操作。通过n_components参数指定保留的主成分数目,将高光谱数据进行降维,并输出降维后的数据。 分类代码: 分类是对数据进行标签预测的操作,常用的分类算法包括支持向量机、K近邻等。本文以支持向量机为例,给出高光谱数据分类代码的实现: ```python from sklearn.svm import SVC from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split # 读入高光谱数据和标签 data = np.loadtxt('spectrometer_data.txt', delimiter=',') labels = np.loadtxt('spectrometer_labels.txt', delimiter=',') # 划分训练集和测试集 x_train, x_test, y_train, y_test = train_test_split(data, labels, random_state=0, test_size=0.3) # 实例化SVM分类器类对象 model = SVC(kernel='rbf', C=1) # 在训练集上训练模型 model.fit(x_train, y_train) # 在测试集上进行预测 y_pred = model.predict(x_test) # 输出分类准确率 acc = accuracy_score(y_test, y_pred) print("Accuracy:", acc) ``` 这段代码中,我们使用sklearn库中的SVC类实现支持向量机分类器,kernel参数指定核函数类型,C参数指定错误项的惩罚参数。通过train_test_split函数将高光谱数据划分为训练集和测试集,调用fit函数在训练集上训练模型,predict函数在测试集上进行预测,最后利用accuracy_score函数计算分类的准确率。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值