利用Python对含有地理信息的遥感影像,使用随机森林模型回归,并保存预测影像

这篇具有很好参考价值的文章主要介绍了利用Python对含有地理信息的遥感影像,使用随机森林模型回归,并保存预测影像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在做随机森林回归实验时,遇到了一个问题:

在做回归时,用的是excel点数据做的回归,像这样:

python sklearn 随机森林 遥感影像数据,随机森林,回归,python,机器学习但是如何把这个训练好的模型应用到整幅含有地理信息的遥感影像上去,并保存这个预测图像呢?对这个问题,展开了一些思考,废话不多说,直接上代码。

1 随机森林回归模型构建

导入数据,这里把Merge_Data替换成自己的数据;

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score,mean_absolute_error
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
file_path = r"Merge_Data.xlsx"
data = pd.read_excel(file_path)

# Separating features and label
X = data.iloc[:, :-1]  # Assuming the last column is the label
y = data.iloc[:, -1]

# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Feature scaling
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

训练模型:

# 初始化模型
rf_model = RandomForestRegressor(n_estimators=100, random_state=42, n_jobs=-1)

# 训练模型
rf_model.fit(X_train_scaled, y_train)

# 预测
y_pred = rf_model.predict(X_test_scaled)

# 计算评估指标
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
results = {'Random Forest': {'MSE': mse, 'R2': r2, 'MAE': mae}}

# 绘图
plt.rcParams["font.family"] = "Times New Roman"
plt.figure(figsize=(5, 4.5))
plt.plot(range(0, 30), range(0, 30), color='black', alpha=0.7)
plt.scatter(y_test, y_pred, marker='.', s=1)
plt.title("Random Forest - Actual vs Predicted", fontsize=15)
plt.xlabel("Actual Values", fontsize=15)
plt.ylabel("Predicted Values", fontsize=15)
plt.tick_params(axis='both', which='major', labelsize=15)
filename = f"{file_path}Random_Forest_plot.png"
plt.tight_layout()
# plt.savefig(filename, dpi=600)
plt.show()

2 应用该模型到遥感影像上

这里首先利用rasterio打开图像;因为我这里是用了特定波段进行的预测,所以设置了一个selected_bands,其实是不需要这个的,全波段的话selected_bands设置为None;

之后创建一个空数组来存放预测结果,后利用rf_model来预测,最后重塑;

predicted_image就是预测结果,即完成了预测部分。

import rasterio
# 打开影像
selected_bands = None
with rasterio.open(r"\img.tif") as src:
    # 读取指定的波段
    img = src.read(selected_bands)
    # 将影像数据转换为二维数组(像素数 x 波段数)
    reshaped_img = img.transpose(1, 2, 0).reshape(-1, img.shape[0]))

    # 创建一个空数组来存放预测结果,初始化为NaN
    predictions = np.full(reshaped_img.shape[0], np.nan)
    
    # 归一化
    reshaped_img = scaler.transform(reshaped_img)
    
    # 找出没有NaN值的行索引
    valid_data_mask = ~np.isnan(reshaped_img).any(axis=1)
    valid_data = reshaped_img[valid_data_mask]

    # 批量预测,对所有有效数据一次性进行
    predictions[valid_data_mask] = rf_model.predict(valid_data)

    # 重塑预测结果以匹配原始影像的形状
    predicted_image = predictions.reshape(src.height, src.width)

3 为预测影像添加地理信息

首先设置一些基本的输入和输出路径,这里有地理信息的栅格就是原始的遥感影像,需要读取原始图像的地理信息并将其应用到预测影像上,注释比较清楚,不多解释了。文章来源地址https://www.toymoban.com/news/detail-852970.html

from rasterio.transform import from_origin

# 路径设置
source_raster = r"\img3_CASK.tif"  # 有地理信息的栅格
target_data = predicted_image  # 没有地理信息的栅格
output_raster = r'output.tif'  # 输出文件路径

# 读取有地理信息的栅格数据
with rasterio.open(source_raster) as src:
    transform = src.transform
    crs = src.crs
    data = src.read(1)

# 创建一个新的栅格文件,应用地理信息
with rasterio.open(
    output_raster, 'w', driver='GTiff', height=target_data.shape[0],
    width=target_data.shape[1], count=1, dtype=target_data.dtype,
    crs=crs, transform=transform
) as dst:
    dst.write(target_data, 1)

到了这里,关于利用Python对含有地理信息的遥感影像,使用随机森林模型回归,并保存预测影像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 地理信息系统概论复习重点

    地理信息系统概论重点 1 、数据:是通过数字化并记录下来可以被识别的符号,用以定性或定量地描述事物的特征和状况。 2 、信息:是指主体与外部客体之间相互联系的一种形式,是主体和客体之间的一切有用的消息或知识,是表征事物特征的一种普遍形式。 3 、数据与信

    2024年02月10日
    浏览(40)
  • 地理信息系统概率笔记1

    P1 地理信息系统概论 信息:用文本、数字、符号、语言、图像来传播; 地理信息:是表征地理系统诸要素的数量、质量、分布特征、相互联系和变化规律的数字、文字、图像和图形等的总称; 山川河流、城市楼栋、公路桥梁都是地理信息; 需要对特征就行抽象,用点、线、

    2024年02月09日
    浏览(48)
  • 地理信息安全在线培训考试-判断题

    1、机关、单位可以将依法应当公开的事项确定为国家秘密,不得将涉及国家秘密的信息公开。 A:对 B:不对 2、国家保密行政管理部门主管全国的保密工作。县级以上地方各级保密行政管理部门主管本行政区域的保密工作。 A:对 B:不对 3、国家秘密的保密期限,除另有规定

    2024年02月05日
    浏览(120)
  • 地理信息系统原理-空间数据结构(7)

    ​四叉树编码 1.四叉树编码定义 四叉树数据结构是一种对栅格数据的压缩编码方法,其基本思想是将一幅栅格数据层或图像等分为四部分,逐块检查其格网属性值(或灰度);如果某个子区的所有格网值都具有相同的值,则这个子区就不再分割,否则还要把这个子区再分割成

    2024年02月06日
    浏览(58)
  • 通过ip获取地理位置信息

    GeoLite2-City.mmdb 文件是 MaxMind 公司提供的一个免费的 IP 地址与城市地理位置映射数据库文件。它包含了 IP 地址范围与对应的城市、地区、国家、经纬度等地理位置信息的映射。这种数据库文件可以用于识别访问您的应用程序或网站的用户的地理位置,从而实现针对不同地区的

    2024年02月12日
    浏览(47)
  • Unity 获取手机地理位置信息

    在游戏的开发过程中,有时候会遇到需要获取玩家位置信息的需求,比如显示玩家所在的国家城市等。 有一下方法可以参考: 可以根据手机的地区和语言来做判断。 根据IP来判断所处的位置,阿里云啥的都有对应的接口服务。 根据GPS来判断。 以上方法都各有利弊吧,这里简

    2024年02月12日
    浏览(49)
  • Golang — 根据IP获取地理位置信息

    1 ip2region 2 geoip2-golang ip2region 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。 特点: 是一个开源的IP地理位置库。 标准化的数据格式 每个 ip 数据段的 region 信息都固定了格式:国家|区域|省

    2024年02月14日
    浏览(44)
  • Redis GEO地理位置信息的应用

    Redis的GEO操作是一种基于地理位置信息进行操作的功能。它使用经度和纬度坐标来表示地理位置,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。 1.GEOADD添加位置信息 将一个或多个指定的地理位置(经度、纬度、名称)添加到指定的键

    2024年02月08日
    浏览(50)
  • 探索未知世界:桌面端3D GIS引领地理信息新时代

    近年来, 桌面端的三维地理信息系统(3D GIS) 在地理信息领域迎来了显著的发展,为我们带来了更深入、更丰富的地理空间认知和数据分析体验。从城市规划到环境保护,从资源管理到应急响应,桌面端的3D GIS正逐渐成为解决复杂地理问题的有力工具。 深度还原地理空间:

    2024年02月11日
    浏览(54)
  • uniapp h5获取用户地理位置信息(高德地图)

     使用uni.getLocation()先获取到当前位置信息的经纬度 H5端测试可以使用http,上线打包需要设置为https模式 谷歌浏览器可能会获取不到任何信息,因为谷歌浏览器位置信息是连接谷歌服务器获取的,国内用户可能获取位置信息失败 使用高德开发平台注册一个key 高德开发平台:高

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包