使用随机森林回归预测森林生物量(python)
随机森林算法的基本思想是基于多颗决策树的集成学习过程,使用场景广泛,一般的分类回归问题都可以使用。我们以光学影像为例,来估测森林生物量。
建立回归关系需要满足的条件
1、线性关系:回归关系应该是线性的,即自变量和因变量之间的关系应该是线性的。
2、独立性:自变量之间应该是独立的,即自变量之间的相关性应该尽可能小,自变量之间不应该存在多重共线性。
3、正态性:残差应该是正态分布的,即残差应该符合正态分布的假设。
4、同方差性:残差的方差应该是恒定的,即残差的方差应该在自变量的不同取值下是相同的。
5、随机性:误差项应该是随机的,即误差项应该是不可预测的,不能被自变量解释。
使用传统机器学习方法估测森林生物量的过程
基本思想:由于遥感影像一般可以覆盖整个研究区,而地面调查工作一般不会对整个研究区进行展开,所以就可以利用遥感影像和地面调查数据建立回归关系,然后再利用所建立的这个关系对未进行地面调查的地方进行预测。
指标筛选:建立回归关系首先要满足指标变量和预测变量之间存在相关性。先从光学影像中提取指标变量,单波段或者波段组合运算啥的,可以参考相关论文来选。
指标提取:在同一张影像中提取的自变量之间难免存在共线性问题,但也不是不能减少其对模型的影响,例如:使用PCA对指标进行降维;对指标进行逐步回归或者相关性分析提取对生物量解释程度很高的几个变量作为自变量;在损失函数中添加惩罚项来降低模型复杂度,从而缓解指标共线性问题;使用树模型,例如典型的随机森林,由于随机森林在建立决策树过程是随机选取指标以及特征,这种随机性可以使得模型对于共线性较弱的特征更加敏感,从而避免了共线性的影响;随机森林模型在建立过程中是通过计算特征调用率,建立分裂树信息熵减少量等来判断特征对于预测指标的重要性,可以剔除一些重要性较低的指标从而提高模型的泛化能力。
建立随机森林回归
提取样地点对应指标变量的像元值作为自变量,样地点生物量作为因变量后就可以建立随机森林模型并对整个研究区生物量就行预测,具体实现过程如下:
数据准备
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
from pyswarm import pso
import rasterio
# 读取Excel表格数据
data = pd.read_excel(r'D:\code\3s\redata.xlsx', sheet_name='Sheet3')
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=42)
定义随机森林模型
def random_forest_regression(X, y, n_estimators, max_depth, max_features, min_samples_split, min_samples_leaf):
model = RandomForestRegressor(n_estimators=n_estimators, max_depth=max_depth, max_features=max_features,
min_samples_split=min_samples_split, min_samples_leaf=min_samples_leaf)
model.fit(X,