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

news2024/11/22 17:17:58

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_test

plt.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 tqdm

with 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.coloradmin.cn/o/2076976.html

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

相关文章

编程世界的平衡术:日常编码与自我提升的和谐共生

前言 在快速迭代的编程世界中,程序员的角色日益复杂且充满挑战,他们不仅是代码的编织者,更是技术进步的推动者。面对日常编码工作的繁重与个人成长的迫切需求,寻找两者之间的平衡点成为了每位程序员必须深思的问题。以下是我的详细…

C++初学者指南-5.标准库(第二部分)–特殊容器

C初学者指南-5.标准库(第二部分)–特殊容器 pair<A , B> 包含两个相同或不同类型的值 tuple<A , B> C11 包含许多相同或不同类型的值 optional C17 包含一个类型为 T 的值或没有值 variant<A,B,C,…> C17 包含一个类型为A、B或C的值…… any C17 包含任…

《花100块做个摸鱼小网站! 》第四篇—前端应用搭建和完成第一个热搜组件

⭐️基础链接导航⭐️ 服务器 → ☁️ 阿里云活动地址 看样例 → &#x1f41f; 摸鱼小网站地址 学代码 → &#x1f4bb; 源码库地址 一、前言 在本系列文章的早期章节中&#xff0c;我们已经成功地购买了服务器并配置了MySQL、Redis等核心中间件。紧接着&#xff0c;我们不仅…

用AI来学习英语口语(白嫖,所以稍微麻烦些)

写在前面 本文看下如何使用AI来免费学习英语口语。 1&#xff1a;正文 首先&#xff0c;我们点击这里来到一个对话窗口&#xff0c;你可以在这个窗口中使用英语来询问你的问题&#xff0c;比如what can i do when i am not happy&#xff1a; 接着复制机器人回答内容&#…

datawhale AI夏令营第五期 深度学习入门 Task1 了解机器学习

机器学习基础 定义 学习一般是只有人才具备的能力&#xff0c;机器学习就是通过某种方式让机器具备人才有的学习能力&#xff0c;这里的某种方式是机器具备找一个函数的能力 比如说证件照背景颜色更换&#xff0c;那么机器需要找到图片中的背景在哪里&#xff0c;再替换成目…

pandas操作Excel文件

pandas操作Excel文件 一、前言二、指定读取的工作表与header设置2.1指定工作表2.2header设置 三、读取Excel数据3.1iloc读取数据3.2read_excel读取数据3.3loc读取数据 四、DataFrame数据筛选4.1根据列标签对整列进行筛选4.2使用iloc对区域进行筛选4.3自定义筛选 五、DataFrame类…

2024年8月26日(线上考试系统,虚拟化技术部署,使用link)

[rootdocker ~]# systemctl start docker [rootdocker ~]# docker pull mysql 一、线上考试系统 虚拟化技术部署 1、部署前端服务器 project_exam_system.sql数据库文件 dist网络资源 1.将资源上传到服务器 C:\Users\89765>scp -r "D:\青岛实训\project_exam_system\d…

C语言典型例题52

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目&#xff1a; 例题4.4 相传古代印度国王舍罕要褒奖他聪明能干的宰相达依尔&#xff08;国际象棋发明者&#xff09;&#xff0c;问他需要什么&#xff0c;达依尔回答说&#xff1a;“国王只要在国际象棋的棋盘的…

Shader 中的渲染顺序

1、深度测试和深度写入 有了深度测试和深度写入发挥作用让我们不需要关心不透明物体的渲染顺序比如一个物体A 挡住了 物体B&#xff0c;即使底层逻辑中 先渲染A&#xff0c;后渲染B&#xff0c;我们也不用担心 B的颜色会把A覆盖&#xff0c;因为在进行深度测试时&#xff0c;远…

电池管理系统SOX算法资料优化目录2024.8.26

这篇文章主要写一下这一次更新的几个地方&#xff0c;有对原来的代码及模型进行优化的部分&#xff0c;也有新增加的代码和模型&#xff0c;我就把几个比较典型的给列了出来。但是还有好多的更新没有在下面展示出来&#xff0c;因为一个个展示出来太复杂了。如果你对更新的内容…

如何使用ssm实现基于 SSM 框架的宠物用品电子商务平台设计与实现+vue

TOC ssm258基于 SSM 框架的宠物用品电子商务平台设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科…

黑神话悟空妖怪平生录

黑神话悟空是一部特别好玩的单机游戏。上一个我这么喜欢的国产单机还是古剑奇谭三。 虽然黑神话的战斗系统和地图系统尚不完善&#xff0c;但是这里面的游记是真的做得很认真。 203个妖怪&#xff0c;203首小诗&#xff0c;203个妖生故事&#xff0c;带你去看妖怪的喜怒哀乐。…

freemarker模版注入

Freemarker模版注入漏洞 模版注入漏洞根因&#xff08;SSTI&#xff0c;服务器端模版注入&#xff09;freemarker介绍Freemarker模版注入漏洞关键点漏洞复现环境引入依赖poc 修复方案完整代码&#xff08;包含修复&#xff09;参考 模版注入漏洞根因&#xff08;SSTI&#xff0…

乾坤大挪移--将一个混乱的excel分类整理的辅助VBA代码

excel 乾坤大挪移 你不需要将工作表手动分类&#xff1b; 只需要在”已整理“的标题行增加标题列&#xff0c; listbox会自动获取”已整理“sheet中的标题列&#xff0c;并列出来 你只需要选中同一列中的单元格&#xff0c;点击想移动到的列表的类别&#xff0c;双击或者点…

【云故事探索】NO.7:「越用越上瘾」,中华财险 60% 研发人员用通义灵码提效

云布道师 中华联合财产保险股份有限公司运用“云大模型”技术革新业务&#xff0c;通过阿里云的通义灵码大幅提升编码效率&#xff0c;近60%的研发人员采用&#xff0c;采纳的生成代码占比约20%&#xff0c;显著提升了团队创新能力与代码质量&#xff0c;并积极探索大模型在更多…

基于SpringBoot的智慧党建系统+uniapp移动端+LW示例参考

1.项目介绍 技术栈环境&#xff1a;SpringBootthymeleafuniappIDEA NavicatMySQL 功能介绍&#xff1a; 后端功能&#xff1a;首页管理&#xff08;轮播图、通知公告、新闻管理&#xff09;、用户管理&#xff08;用户信息、用户反馈、用户订单、用户动态&#xff09;、其他…

一文搞定MybatisPlus

Mybatis简介 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 &#xff08;来自官网&#xff09; 体验Mybatisplus 1.创建SpringBoot工程&#xff0c;导入m…

HarmonyOS--认证服务-操作步骤

HarmonyOS–认证服务 文章目录 一、注册华为账号开通认证服务二、添加项目&#xff1a;*包名要与项目的包名保持一致三、获取需要的文件四、创建项目&#xff1a;*包名要与项目的包名保持一致五、添加json文件六、加入请求权限七、加入依赖八、修改构建配置文件&#xff1a;bui…

【UDS诊断】——0x34、0x36、0x37服务

&#x1f64b;‍♂️【UDS诊断服务介绍合集】系列&#x1f481;‍♂️点击跳转 文章目录 一、服务概述1.0x34服务——请求下载数据1.1.0x34格式 2.0x36服务——数据传输2.1.0x36格式 3.0x37服务——退出上传下载3.1.0x37格式 一、服务概述 Client端使用Routine Control服务来…

WIN32实现远程桌面监控

文章目录 完整代码API简介调试代码 后记reference 完整代码 server.cpp #include <winsock2.h> #include <Ws2tcpip.h> #include <windows.h> #include <stdio.h> #include <vector> #pragma comment(lib, "ws2_32.lib")LRESULT CAL…