ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

随机森林建模及反演流程(遥感影像)

随机森林建模及反演流程(遥感影像) 随机森林建模及反演流程遥感影像代码下载​自助下载→方式一顶部专栏https://blog.csdn.net/weixin_45276304/article/details/164451286?spm1001.2014.3001.5502方式二数据下载列表来源GISer资料库​我把上一步导出来的表格放在了 E:\xianyu\landsat反演盖度和可食牧草产量\jianmo\样本\图斑样本路径下。下面我们搜索anaconda prompt打开并输入E:(这里我数据放在E盘下所以输入E,如果你是放在F盘那就是输入F)意思是进入E盘然后采用cd命令进入我们存放样本和代码的路径下输入jupyter notebook打开python的编辑器它会自动弹出以网页的形式注意不要关闭这个黑窗。如何运行下面是对代码的详细介绍1.数据导入与准备首先我们需要导入必要的库并读取数据文件。以下是详细步骤importpandasaspd# 导入用于数据处理的pandas库importnumpyasnp# 导入用于数值计算的numpy库frommatplotlibimportpyplotasplt# 导入用于绘图的matplotlib库fromsklearn.ensembleimportRandomForestRegressor# 导入随机森林回归模型fromsklearn.model_selectionimporttrain_test_split# 导入数据集拆分工具fromsklearn.metricsimportmean_squared_error,r2_score# 导入误差计算和R²评分工具fromsklearnimportmetrics# 导入额外的度量工具读取表格数据我们有一个CSV文件new_yb0.csv其中第一列是目标变量即我们要预测反演的变量其余列是特征变量即用于预测的指标。我们使用pandas库读取该文件# 读取表格数据, 将excel另存为csv文件datapd.read_csv(r./new_yb0.csv,na_values[ ])# 读取CSV文件空值处理为NaNydata.iloc[:,0].values# 提取第一列作为目标变量Xdata.iloc[:,1:].values# 提取其他列作为特征变量#X data[[dem, b4_ronghe, gcvi, gndvi, isr2]].valuesdfpd.DataFrame(data)# 将数据转换为DataFrame格式分割数据集为了评估模型的性能我们将数据集拆分为训练集和测试集random_forest_seednp.random.randint(low1,high230)# 生成随机种子# 分割数据集为训练集和测试集比例为7:3X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.3,random_staterandom_forest_seed)2.构建并训练随机森林模型接下来我们构建一个随机森林回归模型并对训练集数据进行训练# 初始化随机森林回归器设置树的数量为600最大特征数为8这个您可以自行改动regressorRandomForestRegressor(n_estimators600,max_features8)regressor.fit(X_train,y_train)# 使用训练数据拟合模型模型误差分析我们可以通过绘制误差分布图来观察模型的误差情况如果绘制的图像呈现正态分布说明模型很好# 预测测试集数据random_forest_predictregressor.predict(X_test)# 计算预测误差random_forest_errorrandom_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()精度验证通过计算R²值和均方根误差RMSE来评估模型精度random_forest_R2metrics.r2_score(y_test,random_forest_predict)random_forest_RMSEmetrics.mean_squared_error(y_test,random_forest_predict)**0.5print(R^2 {0} and RMSE {1}..format(random_forest_R2,random_forest_RMSE))3.变量重要性分析随机森林模型能够评估每个特征在预测中的重要性。我们可以绘制重要性图来直观地显示前20个最重要的变量# 计算变量重要性random_forest_importancelist(regressor.feature_importances_)# 选择前20个重要变量random_forest_feature_importance[(feature,round(importance,9))forfeature,importanceinzip(df.columns[1:],random_forest_importance)]# 按重要性排序random_forest_feature_importancesorted(random_forest_feature_importance,keylambdax:x[1],reverseTrue)# 提取变量名和重要性x_data[item[0]foriteminrandom_forest_feature_importance[:20]]y_data[item[1]foriteminrandom_forest_feature_importance[:20]]# 设置图表大小plt.figure(figsize(16,10))# 绘制柱状图plt.bar(x_data,y_data)# 设置横轴标签plt.xlabel(Variable,fontsize16)plt.xticks(rotation-90,fontsize16)# 设置纵轴标签plt.ylabel(Importance,fontsize20)# 设置标题plt.title(Variable Importances,fontsize16)# 显示图表plt.show()4.栅格数据预测最后我们将使用训练好的随机森林模型对栅格数据进行预测。这里我们根据变量重要性分析重新选择了前5个重要的变量把代码X data.iloc[:, 1:].values 改为 X data[[‘dem’, ‘b4_ronghe’, ‘gcvi’, ‘gndvi’, ‘isr2’]].values 然后从头开始运行代码读取这5个变量即可实现研究区反演我们将对这些数据进行反演预测importrasterio# 导入栅格数据处理库fromtqdmimporttqdm# 导入进度条显示库# 读取栅格数据withrasterio.open(r./dem.tif)assrc:data1src.read(1)metasrc.metawithrasterio.open(r./b4_ronghe.tif)assrc:data2src.read(1)withrasterio.open(r./gcvi.tif)assrc:data3src.read(1)withrasterio.open(r./gndvi.tif)assrc:data4src.read(1)withrasterio.open(r./isr2.tif)assrc:data5src.read(1)# 整合栅格数据为一个矩阵Xnp.stack((data1,data2,data3,data4,data5),axis-1)# 清洗输入数据X_2dX.reshape(-1,X.shape[-1])print(np.isnan(X_2d).any())# 检查数据中是否存在NaN值# 将NaN值替换为0X_2d[np.isnan(X_2d)]0# 使用训练好的模型进行预测y_pred[]foriintqdm(range(0,X_2d.shape[0],10000)):y_pred_chunkregressor.predict(X_2d[i:i10000])y_pred.append(y_pred_chunk)y_prednp.concatenate(y_pred)# 保存预测结果为新的栅格数据withrasterio.open(r./建模变量.tif,w,**meta)asdst:dst.write(y_pred.reshape(X.shape[:-1]),1)print(预测结束)运行过程会产生一个进度条进度条走完代表反演结束自助下载→方式一顶部专栏https://blog.csdn.net/weixin_45276304/article/details/164451286?spm1001.2014.3001.5502方式二数据下载列表来源GISer资料库
返回列表