遥感反演保姆级教程:SPSS筛选因子之后如何采用python建模和反演整个研究区?(以反演生物量为例)

SPSS筛选因子之后如何采用python建模和反演整个研究区?(以反演生物量为例)

引言

在遥感数据分析中,因子筛选和建模是关键步骤。筛选出与目标变量(如生物量)显著相关的因子,不仅可以提高模型的预测精度,还能简化模型结构。

通常我们使用SPSS软件进行因子的初步筛选,通过相关性分析选出与目标变量相关性较高的因子。在SPSS中,我们可以使用皮尔逊相关系数来评估因子的显著性,通常选择带有两颗星号(表示相关性显著)的变量用于后续建模。

两星变量

本教程将以反演森林生物量为例,详细介绍如何使用Python对筛选后的因子进行建模,并应用于整个研究区的反演任务。这一流程具有较强的通用性,适用于其他类似的遥感反演任务。

任务描述

本文以建模和反演森林生物量为例。我们将使用随机森林算法构建预测模型,并将其应用于整个研究区的生物量反演。

本文所用的示例数据和最终的反演结果已上传至百度网盘,整理不易,如有需要公众号(Python与遥感)后台回复 49 获取。

通过本文,读者可以完整地掌握从因子筛选到建模、再到研究区生物量反演的整个流程。

示列数据

文件描述

  1. 随机森林反演.ipynb:Jupyter Notebook代码文件,用于实现建模和反演。
  2. jianmo.csv:用于建模的数据文件,包含反演变量(生物量)和5个最重要的影响因子。
  3. 5个.tif文件:建模和反演所用的栅格变量数据。
  4. 生物量.tif:反演得到的研究区生物量结果,并已导出为png方便查看。

完成反演后,我们将得到整个研究区的生物量分布图。下图展示了根据森林区域掩膜文件提取后的研究区生物量分布结果。

反演结果

代码文件截图

如何打开代码运行,请看这篇文章

代码详解

1. 导入所需的库

首先,导入进行数据处理、建模和可视化所需的库:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import scipy.stats as stats
from sklearn import metrics
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
from joblib import dump
  • pandasnumpy:数据处理和数值计算。
  • matplotlib:绘图和可视化。
  • sklearn:机器学习建模、模型评估和超参数调整。
  • scipy:统计计算。

2. 读取数据并进行预处理

我们从CSV文件中读取数据,并将其分为自变量(影响因子)和因变量(生物量):

data = pd.read_csv(r'.\jianmo.csv', na_values=[' '])
y = data.iloc[:, 0].values  # 生物量(因变量)
X = data.iloc[:, 1:].values  # 影响因子(自变量)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
  • pd.read_csv读取CSV文件,na_values=[' ']将空白值视为缺失值。
  • y为因变量(生物量),X为自变量(影响因子)。
  • train_test_split将数据分为训练集和测试集,测试集占比30%。

3. 构建随机森林模型并进行训练

使用随机森林算法进行建模:

regressor = RandomForestRegressor(n_estimators=500, max_features=5)
regressor.fit(X_train, y_train)
  • RandomForestRegressor构建随机森林回归模型,设置n_estimators=500构建500棵树,max_features=5表示每次分裂时最多考虑5个特征。
  • fit函数训练模型。

4. 误差分析

接下来,对模型的预测误差进行分析,并计算Pearson相关系数、R²和均方根误差(RMSE):

random_forest_predict = regressor.predict(X_test)
random_forest_error = random_forest_predict - y_testplt.figure(1)
plt.clf()
plt.hist(random_forest_error)
plt.xlabel('Prediction Error')
plt.ylabel('Count')
plt.grid(False)
plt.show()random_forest_pearson_r = stats.pearsonr(y_test, random_forest_predict)
random_forest_R2 = metrics.r2_score(y_test, random_forest_predict)
random_forest_RMSE = metrics.mean_squared_error(y_test, random_forest_predict) ** 0.5
print('Pearson correlation coefficient = {0}、R2 = {1} and RMSE = {2}.'.format(random_forest_pearson_r[0], random_forest_R2, random_forest_RMSE))
  • regressor.predict对测试集进行预测,并计算误差。
  • 绘制误差分布图,帮助理解模型的误差情况。
  • 计算Pearson相关系数、R²和RMSE,评估模型的预测性能。

5. 栅格数据的读取与处理

读取研究区的栅格变量数据,并整合为一个矩阵:

import rasterio
from tqdm import tqdmwith rasterio.open(r'.\podu.tif') as src:data1 = src.read(1)meta = src.meta
with rasterio.open(r'.\dem.tif') as src:data2 = src.read(1)
with rasterio.open(r'.\lai.tif') as src:data3 = src.read(1)
with rasterio.open(r'.\ireci.tif') as src:data4 = src.read(1)
with rasterio.open(r'.\mcari.tif') as src:data5 = src.read(1)X = np.stack((data1, data2, data3, data4, data5), axis=-1)
  • 使用rasterio库读取栅格文件,将每个变量的数据存储在data1data5中。
  • meta保存栅格文件的元数据,用于保存预测结果。
  • np.stack将所有栅格数据整合为一个三维矩阵。

6. 数据清洗

对栅格数据进行清洗,去除缺失值(NaN):

X_2d = X.reshape(-1, X.shape[-1])
print(np.isnan(X_2d).any())  # 检查是否存在 NaN 值X_2d[np.isnan(X_2d)] = 0  # 将 NaN 值替换为0
  • 将三维数据转换为二维数据,便于处理。
  • 检查并处理缺失值,确保数据完整性。

7. 使用模型进行预测

利用训练好的随机森林模型对栅格数据进行生物量预测:

y_pred = []
for i in tqdm(range(0, X_2d.shape[0], 10000)):y_pred_chunk = regressor.predict(X_2d[i:i+10000])y_pred.append(y_pred_chunk)
y_pred = np.concatenate(y_pred)
  • 将栅格数据分块输入模型预测,减少内存占用。
  • 使用tqdm显示进度条,实时监控预测进度。

8. 保存预测结果

将预测得到的生物量数据保存为新的栅格文件:

with rasterio.open(r'.\生物量.tif', 'w', **meta) as dst:dst.write(y_pred.reshape(X.shape[:-1]), 1)
print("预测结束")
  • 创建新的栅格文件,并将预测结果写入其中。
  • 确保预测结果与原始栅格的空间信息一致。

9. 结果展示

最后,我们得到了整个研究区的生物量反演图。这一过程不仅适用于生物量的反演,也适用于其他多光谱遥感数据的反演任务。

总结

通过这篇文章,我们展示了如何使用Python对筛选后的影响因子进行随机森林建模,并应用于遥感数据反演森林生物量的任务。该流程不仅可以提高预测精度,还能有效处理大规模的遥感数据,为生态监测和森林管理提供重要支持。

如有更多问题或需要进一步指导,欢迎公众号(Python与遥感)后台联系作者获取更多信息。

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

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

相关文章

某音作品列表,视频列表

声明:文章仅用于学习交流,如有侵权请联系删除 今天分享下某音app作品列表采集方法,我只详细说一下大步骤,细节就不多说了,留着大家去试吧 我们通过Fiddler 快捷方式 配置好代理 打开抖音进行抓包,随便找个达人打开主…

了解Redis数据持久化(中)

3.5写时复制 Redis在使用RDB方式进行持久化时,会用到写时复制机制。写时复制的效果: bgsave子进程相当于复制了原始数据,而主线程仍然可以修改原来的数据。 对Redis来说,主线程fork出bgsave子进程后,bgsave子进程实际是复制了主线…

Jmeter 性能测试实战教程

一、性能测试流程 进行性能测试前,我们首先需要了解一下性能测试大致分为哪些流程,这样才能保证测试过程有序开展: 1、性能需求分析 了解哪些业务需要(一般都是用户量大的核心业务,比如登录,查询等功能&…

go国内源设置

一、背景 部分网络环境不稳定、丢包或无法连外网,在编译go代码时,需要更新相关依赖,可通过设置go国内源地址来更新。 二、国内可用镜像源 2.1 镜像源一 https://goproxy.cn 2.2 镜像源二 https://goproxy.io 2.3 镜像源三 https://gop…

使用vagrant、virtualbox、快速创建kali linux

使用vagrant、virtualbox、快速创建kali linux 初始化kali下载vagrant相应镜像vagrant添加相应镜像创建vagrantfile在vagrantfile根目录执行cmd虚拟机登录密码修改sshd配置 用shell远程链接(可选)可视化界面设置成中文创建成功展示图 添加实体网卡使用kali 破解WiFi密码解决 on…

爆改YOLOv8 | 利用MB-TaylorFormer提高YOLOv8图像去雾检测

1,本文介绍 MB-TaylorFormer是一种新型多支路线性Transformer网络,用于图像去雾任务。它通过泰勒展开改进了softmax-attention,使用多支路和多尺度结构以获取多层次和多尺度的信息,且比传统方法在性能、计算量和网络重量上更优。…

Redis面试都卷到C语言去了。。。

Redis 面试都卷到 C 去了。有个小伙伴在前两天找松哥模面的时候如是说到。 是啊,没办法,自从 Java 八股文这个概念被提出来并且逐步在 Java 程序员中强化之后,现在各种各样的八股文手册,有免费的有付费的,琳琅满目。 …

秃姐学AI系列之:GoogLeNet + 代码实现

目录 GoogLeNet —— 含并行连结的网络 卷积层超参数 Inception块:小学生才做选择,我全要! 为什么要用Inception块? GoogLeNet架构 详细展开每个Stage Stage 1 & 2 Stage 3 Stage 4 & 5 Inception 有各种后续变…

CocosCreator3.8 IOS 构建插屏无法去除的解决方案

CocosCreator3.8 IOS 构建插屏无法去除的解决方案 在实际项目开发过程中,我们通常无需CocosCreator 自带的插屏,一般采用自定义加载页面。 然后在构建IOS 项目时,启用(禁用)插屏无法操作,如下图所示&#…

Unity Protobuf3 GC 问题(反序列化)

背景:Unity接入的是 Google Protobuf 3.21.12 版本,排查下来反序列化过程中的一些GC点,处理了几个严重的,网上也有一些分析,这里就不一一展开,默认读者已经略知一二了。 如果下面有任何问题请评论区留言提…

Web攻防之应急响应(一)

目录 1. 前言 2. 靶场准备 3. 应急场景 4. 应急实战 4.1 查看服务器开放端口 4.2 通过远程链接工具连接服务器 4.3 寻找中间件日志 4.4. 查看并下载日志 4.5 初步分析日志 4.6 查看安全分析报告 4.6 从被篡改的页面开始 4.6 通过修改的文件时间进一步分析日志信息 4.…

如何给10000张图片快速打标签,一招教你节省上千小时!看这期就够了!免费素材管理插件分享

如果给1万张图片打标签,你会怎么做?如果你用过eagle或者billfish的话,那么你一定知道,他们都没有支持用AI来自动给素材打标签。 一旦我们素材多起来的时候,手动输入,键盘都要打冒烟了,效率太低…

企业级NoSql数据库Redis集群

数据库主要分为两大类:关系型数据库与 NoSQL 数据库 关系型数据库 ,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 DB2 都属于这类传统数据库。 …

中仕公考怎么样?2025国考报名流程介绍!

现在是八月下旬,距离2025年国考的开始日期越来越近,今天来给大家分享一下国考报名的流程,希望大家提前做个了解。 报考时间(参考去年) 职位表发布:24年10月中旬 网上报名:24年10月中下旬 报名确认:24年…

昂科烧录器支持Melexis迈来芯的位置传感器MLX90365KDC

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中Melexis迈来芯的位置传感器MLX90365KDC已经被昂科的通用烧录平台AP8000所支持。 MLX90365KDC是第II代Triaxis位置传感器IC。 这款单片器件可凭借其表面的集磁点(IMC)&#xf…

ai变声:视频怎么变音?分享6个语音变声器,视频变声不再难!

想过如何让自己的直播内容更吸引人吗?你是否希望通过变声器来打造独特的声音效果?或者,如何用创意声音提升观众的互动体验呢?随着直播行业的不断发展,每位主播都在努力寻找吸引观众的独特方式,而变声器正是…

鸿蒙南向开发:测试框架xdevice核心组件

简介 xdevice是OpenHarmony中为测试框架的核心组件,提供用例执行所依赖的相关服务。 xdevice主要包括以下几个主要模块: command,用户与测试平台命令行交互模块,提供用户输入命令解析,命令处理。config,…

【机器学习】梯度下降算法

梯度下降算法 这篇博客更加详细,以下只是我个人的理解 梯度下降算法原理讲解——机器学习-CSDN博客 梯度下降算法是一种优化算法,通过梯度下降找到函数最小值时的自变量值。 其基本思想是沿着梯度方向的反方向更新参数,直到逼近函数的极值…

DaxPay:一套开源支付网关系统【送源码】

项目介绍 DaxPay是一套开源支付网关系统,已经对接支付宝、微信支付、云闪付相关的接口。可以独立部署,提供接口供业务系统进行调用,不对原有系统产生影响 特色功能 封装各类支付通道的接口为统一的接口,方便业务系统进行调用&am…

wps题注为表格或图片编号

word中为表格添加题注: 问题:多次或多人编辑导致--序号不能联动更新(域代码不一致,如图) 所以是否可以批量替换word里的域代码?如果可以这问题就解决了————失败 解决办法: 如图,复制表头&…