基于随机森林与支持向量机的高光谱图像分类(含python代码)

目录

一、背景

二、代码实现

三、项目代码


一、背景

基于深度学习的教程(卷积神经网络)详见:基于卷积神经网络的高光谱图像分类详细教程(含python代码)-CSDN博客

在高光谱图像分类领域,随机森林(Random Forest,RF)和支持向量机(Support Vector Machine, SVM)是两种广泛应用的机器学习算法。随机森林以其强大的集成学习能力,通过构建多个决策树并汇总它们的预测结果,能够有效地处理高维数据,捕捉到数据中的复杂模式。在高光谱图像中,每个像素点都包含了大量的光谱信息,随机森林能够利用这些信息构建出鲁棒的分类模型,尤其在处理非线性关系和噪声数据时表现出色。

相比之下,支持向量机通过寻找能够最大化不同类别之间间隔的超平面来进行分类,它在处理高维数据时同样表现出色,尤其是在数据线性可分或通过核技巧转换为线性可分的情况下。SVM的核函数能够将数据映射到更高维的空间,从而解决非线性分类问题。在高光谱图像分类中,SVM能够通过选择合适的核函数和参数,有效地识别出不同地物的光谱特征,实现高精度的分类。

两种算法各有优势,随机森林在处理大规模数据集和复杂特征交互时更为高效,而支持向量机在模型解释性和泛化能力方面表现突出。在高光谱图像分类任务中,选择哪种算法往往取决于数据的特性、分类目标以及计算资源的限制。实际应用中,研究人员常常会结合两种算法的优点,通过交叉验证和模型融合等技术,进一步提升分类性能。

二、代码实现

下面我们以IP数据集为例子进行展开讲解。

1、加载数据

将下载的数据加载进内存,便于后续处理

X = sio.loadmat('./data/Indian_pines.mat')['indian_pines']
y = sio.loadmat('./data/Indian_pines_gt.mat')['indian_pines_gt']

2、数据标准化

对数据标准化,方便模型学习特征

# 数据标准化
standard_scaler = StandardScaler()
data_standard_scaled = standard_scaler.fit_transform(X.reshape(-1, X.shape[2])).reshape(X.shape[0], X.shape[1], X.shape[2])

3、数据集的样本划分与标签分配

根据数据标签和数据,对其进行样本采样,并划分成训练集和验证集。这里以窗口为25的大小,训练集和测试集的占比分别为20%的训练,80%的验证。

print('\n... ... 数据预处理 ... ...')
mask = y>0
data, y = X[mask], y[mask]
print("获得的样本一共有:",len(data))
Xtrain, Xtest, ytrain, ytest = splitTrainTestSet(data, y, test_ratio)
print("训练集:",len(Xtrain),"验证集:",len(Xtest))

4、建立RF和SVM模型

# 建立模型并训练
model = RandomForestClassifier(n_estimators=500, random_state=42) # 随机森林
# model = SVC(kernel='rbf', C=500, random_state=42) # 支持向量机

需要哪个模型,即用该模型,取消注释即可,另一个注释。

5、训练和预测结果

model.fit(Xtrain, ytrain)# 训练模型
model.predict(Xtest)# 预测测试集

6、结果显示

classification, confusion, oa, each_acc, aa, kappa,names = reports(ytest, y_pred)
print(classification)
print("混淆矩阵\n",confusion)
print("kapap:", kappa)
print("aa:", aa)
print("oa:", oa)
print("训练时间:",train_time_1-train_time_0,"验证时间:",test_time_1-test_time_0)

以下结果是SVM的,RF的取消RF注释,并注释SVM重新运行即可:

三、项目代码

本项目的代码通过以下链接下载:基于随机森林与支持向量机的高光谱图像分类python代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现一个聊天室可发送消息语音图片视频表情包(任意文件)

文章目录 如何跑通代码仓库地址客户端登录发送消息接受消息发送文件接受文件 服务端接受消息并发送给各个客户端接受文件并发送给各个客户端 如何跑通 将手机和电脑都连自己的热点先运行服务器得到可监听的地址更新客户端安卓消息线程和文件线程的socker目标地址为可监听地址然…

【JAVA】Git 的基本概念和使用方式

Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。以下是Git的一些基本概念和使用方式的深入探讨: 基本概念 1. 仓库(Repository) 仓库是Git用来保存你的项目…

go解析含passphrase的pem秘钥

背景 在编写TLS配置时需要用到需要用到一串包含passphrase的RSA秘钥,本想通过官方库的方式解析使用,但由于安全因素,官方已经禁用了DecryptPEMBlock、EncryptPEMBlock、IsEncryptedPEMBlock等函数,导致无法通过官方库去实现这个需…

Unity 委托与事件、装箱和拆箱

文章目录 前言一、委托与事件1、委托的概念2、委托是什么3、事件是什么 二、装箱和拆箱1、什么是装箱和拆箱2、堆、栈3、应用4、优化 总结 前言 一、委托与事件 1、委托的概念 不知道大家在学习C#之前有没有学习过C/C,在中后期会接触到指针。她不仅能指向变量的地…

FPGA第一篇,FPGA现场可编程门阵列,从0开始掌握可编程硬件开发(FPGA入门指南)

简介:FPGA全称Field-Programmable Gate Array,是一种可编程逻辑器件,它通过可编程的逻辑单元和可编程的连接网络实现了灵活的硬件实现。与固定功能的集成电路(ASIC)相比,FPGA具有更高的灵活性和可重新配置性…

未授权访问:Redis未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、利用redis未授权写入weshell 5、利用redis未授权反弹shell 6、利用redis未授权实现免密登录 防御手段 从这篇文章开始我就要开始学习各种未授权访问的知识和相关的实操实验了,一共有好多篇,内容主…

美港通正规炒股市场恒生科指半日跌近2% 大型科技股集体下行

查查配5月7日电 7日,港股主要股指回调。截至午盘,恒生指数跌0.85%,恒生科技指数跌1.98%。 美港通证券以其专业的服务和较低的管理费用在市场中受到不少关注。该平台提供了实盘交易、止盈止损、仓位控制等功能,旨在为投资者提供更为全面的投资体验。 来源:Wind 盘面上,零售、软…

OC5864 0.6A输出 60V输入 500KHZ DCDC降压转换IC

一级代理 技术支持 提供样品测试 Tel:18028786817 简介 OC5864是一款内置功率MOSFET的单片降压型开关模式转换器。OC5864在5.5~60V宽输入电源范围内实现0.6A峰值输出电流,并且具有出色的线电压和负载调整率。 OC5864采用PWM电流模工作模式,…

stm32单片机遇到的问题(持续更新)

flymcu下载问题一直显示连接,实际是连接不上 参考,软件一键下载电路等 使用flymcu下载程序过程中,检测两个地方**,第一,两个boot引脚在下载和硬件运行不同的连接方式** BOOT1x,BOOT00:最常用的模…

kubectl_进阶_网络

网络 容器网络发展到现在,形成了两大阵营,就是 Docker 的 CNM 和 Google、CoreOS、Kuberenetes 主导的 CNI。首先明确一点,CNM 和 CNI 并不是网络实现,他们是网络规范和网络体系,从研发的角度他们就是一堆接口&#x…

RPC 失败。curl 16 Error in the HTTP2 framing layer

报错: (base) hh-virtual-machine:~/work$ git clone https://github.com/yangzongzhuan/RuoYi-Vue3.git 正克隆到 RuoYi-Vue3... error: RPC 失败。curl 16 Error in the HTTP2 framing layer fatal: 在引用列表之后应该有一个 flush 包这个错误通常是由于 Git 在…

sql中的lag()和lead()是什么意思

在SQL中,LAG() 和 LEAD() 是窗口函数,它们用于访问行与其相邻行的数据。这两个函数在进行数据比较和分析时非常有用,尤其是在需要根据行的相对位置进行操作的场景中。 ### LAG() LAG() 函数用于访问当前行的前面的行中的数据。你可以指定你想…

CentOS操作

1.如何修改主机名 方法一: 修改命令:hostnamectl set-hostname 主机名 查看命令:hostname 方法二和方法三都是永久改变主机名,需要密码验证 方法二 修改命令:nmcli general hostname 主机名 查看命令&#xff…

了解 websocket

​ 1. 概念 1、 websocket 是一种双向通行协议。实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的; 2、websocket连接成功后,只要连接不断开,通信就会一保持着; 3、要打开一个 WebS…

三维点云处理-聚类(下)

接着前一部分数据聚类方法的介绍,由于K-means和GMM方法都是基于欧式距离信息处理的,两者分别以圆形和椭圆形来作为数据的聚类分割方式,这种情况下会导致环形图和月牙图数据分割不准确,因此进一步的介绍一种谱聚类方法,…

感知机导论

综述 每一个算法都是为了解决一类问题,或者说是解决之前算法存在的缺陷而产生的,感知机,在这里就起到了一个很大的作用,它向后续的很多算法暴露出来了很多它存在的缺陷。所以我们后面要学习的很多算法都是在某种程度上解决了感知机暴露出来的…

静态NAT

哈喽!各位小伙伴们好久不见,最近由于工作的原因断更了一段时间,不过最近我都会把这些给补上,今天我们来学习一个简单的知识——静态NAT转换。 第一章 什么是NAT技术? 网络地址转换技术NAT(Networ…

致远M3 log 敏感信息泄露漏洞

文章目录 免责漏洞描述漏洞原理影响版本漏洞复现修复方法 免责 只为学习与交流,若利用做一切违法乱纪的事与本人无关 漏洞描述 致远M3是一个企业移动业务管理平台,全面覆盖各种工作场景,通过智能化的办公和业务场景融合,为企业…

【数据库原理及应用】期末复习汇总高校期末真题试卷07

试卷 一、填空题(每空1分,共10分) 1.数据库管理系统在外模式、模式和内模式这三级模式之间提供了两层映象,其中 映象保证了数据的逻辑独立性。 2. 数据模型通常由 、数据操作和完整性约束三部分组…

未来几年,还是要掌握真正的技术

我看到某些人很鼓吹不要精心学技术,要学管理,学系统化的思想方式。这都是在鼓吹成功的玄学,其实成功的人都具备偶然性,换而言之,再给他一次机会,他不见得会赚取这么多的财富。过去几十年,经济高…