自学内容网 自学内容网

随机森林遥感反演详细教程

在遥感影像处理中,随机森林算法是一种非常强大的工具。今天我们将详细介绍如何使用随机森林算法进行遥感影像反演,并分享完整的代码和操作步骤。希望这篇教程能帮助到对遥感影像处理感兴趣的朋友们。

目录

1.如何打开代码运行

2.读取建模表格

3.变量重要性分析

4.选择前5个重要的变量重新建模

5.得到模型R2与RMSE值

6.反演整个研究区

1. 如何打开代码运行

首先,我们将导出的建模表格放在对应路径下。我们将通过以下步骤进行数据处理和模型训练。

2. 打开Anaconda Prompt并进入工作目录

  1. 打开Anaconda Prompt:

  2. 输入 E:,进入E盘(如果数据在其他盘,输入相应盘符,例如F盘则输入F:)。

  3. 使用 cd 命令进入存放样本和代码的路径。

  4. 输入 jupyter notebook 打开Python编辑器。

一个网页会自动弹出,这是Jupyter Notebook的界面。

任务描述

本文以建模和反演森林生物量为例。我们将使用随机森林算法构建预测模型,并将其应用于整个研究区的生物量反演。本文所用的示例数据和最终的反演结果以及PDF教程从这个链接获取。通过本文,读者可以完整地掌握从因子筛选到建模、再到研究区生物量反演的整个流程。

示列数据

文件描述

  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对筛选后的影响因子进行随机森林建模,并应用于遥感数据反演森林生物量的任务。该流程不仅可以提高预测精度,还能有效处理大规模的遥感数据,为生态监测和森林管理提供重要支持。


原文地址:https://blog.csdn.net/weixin_45276304/article/details/142990875

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!