Py学习  »  机器学习算法

农业+AI~气候变化时间序列分析:利用深度学习赋能精准农业

人工智能学习指南 • 5 月前 • 134 次点击  

图片

精准农业旨在优化农业管理,在节约资源的同时提升产量,并最大程度降低对环境的影响。

目前,有几种技术致力于提升农业的可持续性,例如:

  • 智能灌溉系统:借助传感器来优化灌溉流程;

  • 精准播种系统:优化播种流程,比如调整种子之间的间距;

  • 作物产量预测:帮助农民决定每个季节种植何种作物。


露点温度

在灌溉系统方面,灌溉水量不足会使植物承受压力,进而降低作物产量,过度灌溉会导致水分过多,从而滋生害虫。

合适的灌溉流程能够节省大量水资源,并保护其他资源。

影响灌溉的一个关键指标就是露点温度,露点温度反映了空气中水分的含量,而这又会对灌溉流程产生影响,所以预测露点温度有助于为水资源规划提供支持。

而且露点温度在水利、气候和农业等多个领域的其他活动中也具有重要意义。

例如,如果预报显示可能出现水分过多的情况,就可以提前采取病虫害防治措施。

预报还能用于预测霜冻,让农民可以采取预防性措施来保护作物。

在能源管理领域,预测露点温度同样重要,在露点温度较高时,人们往往会使用空调系统来应对高相对湿度。

预测这些天气状况可用于预测能源需求的增长,从而有助于提高电网的运行效率。

在本文的后续部分将对多个地点的露点温度进行预测,大家将学习如何使用深度学习构建一个时空预测模型。


另外我们精心打磨了一套基于数据与模型方法的 AI科研入门学习方案(已经迭代过5次,即将迭代第6次),对于人工智能来说,任何专业,要处理的都只是实验数据,所以我们根据实验数据将课程分为了三种方向的针对性课程,包含时序、图结构、AI+实验室,我们会根据你的数据类型来帮助你选择合适的实验室,根据规划好的路线学习 只需5个月左右(很多同学通过学习已经发表了 sci 一区及以下、和同等级别的会议论文)学习形式为 直播+录播,多位老师为你的论文保驾护航。


图片

第6期课程大纲


大家感兴趣可以直接添加小助手微信:ai0808q 通过后回复咨询既可!


AI for science


实践:利用深度学习进行露点温度的时空预测

时空预测入门

时空数据是多元时间序列的一种特殊情况,这类数据集涉及在多个地点对某个变量(如露点温度)进行观测。

这类数据既包含时间依赖性,又包含空间依赖性,在特定地点采集的数据点,与该地点的滞后数据以及附近地点当前和过去的滞后数据都存在相关性。

对这两种依赖性进行建模,对于在每个地点获得更准确的预测至关重要。

时空预测通常采用向量自回归(VAR)或时空自回归(STAR)等技术。本文将采用基于深度神经网络的 VAR 方法。


数据集

本文将使用由美国农业部收集的真实数据集,该数据集包含露点温度等信息,该变量在 6 个附近站点进行了采集。

数据集来源:

https://agdatacommons.nal.usda.gov/articles/dataset/Data_From_Weather_Snow_and_Streamflow_data_from_four_western_juniper-dominated_Experimental_Catchments_in_south_western_Idaho_USA_/24660384?file=44334665

下载数据后,可使用以下代码读取:

import pandas as pd# 日期时间列名列表DATE_TIME_COLS = ['month''day''calendar_year''hour''water_year']# 读取数据集data = pd.read_csv(filepath)# 解析datetime列data['datetime'] =     pd.to_datetime([f'{year}/{month}/{day} {hour}:00'                    for year, month, day, hour in zip(data['calendar_year'],                                                      data['month'],                                                      data['day'],                                                      data['hour'])])# 删除原始日期时间列并设置datetime为索引data = data.drop(DATE_TIME_COLS, axis=1).set_index('datetime')# 移除列名中的'_dpt_C'后缀data.columns = data.columns.str.replace('_dpt_C''')


数据呈现如下:

不同地点的时序数据似乎存在相关性。


VAR——为监督学习准备数据

本文采用 VAR 方法来准备数据,以便训练深度神经网络,VAR 方法旨在捕捉不同变量之间的时间依赖性。

在本例中,这些变量代表在 6 个地点采集的露点温度。

我们可以通过使用滑动窗口将每个变量转换为矩阵格式,然后合并结果来实现这一点。

from sklearn.model_selection import train_test_splitfrom src.tde import transform_mv_series# 滞后阶数和预测步长N_LAGS, HORIZON = 1212# 站点数量(数据列数)N_STATIONS = data.shape[1]# 保留最后20%的数据作为测试集train, test = train_test_split(data, test_size=0.2, shuffle=False)# 计算训练集中每个序列的平均值mean_by_location = train.mean()# 均值缩放:将每个序列除以其平均值train_scaled = train / mean_by_locationtest_scaled = test / mean_by_location# 将数据转换为监督学习格式X_train, Y_train = transform_mv_series(train_scaled, n_lags=N_LAGS, horizon=HORIZON)X_test, Y_test = transform_mv_series(test_scaled, n_lags=N_LAGS, horizon=HORIZON)


接下来,我们基于 Keras 构建一个堆叠式 LSTM 模型。

(长短期记忆网络LSTM是一种特殊的循环神经网络,能够捕捉时间依赖性。

from keras.models import Sequentialfrom keras.layers import Dense, Dropout, LSTM, RepeatVector, TimeDistributedmodel = Sequential()model.add(LSTM(64, activation='relu', input_shape=(N_LAGS, N_STATIONS)))model.add(Dropout(.2))model.add(RepeatVector(HORIZON))model.add(LSTM(32, activation='relu', return_sequences=True))model.add(Dropout(.2))model.add(TimeDistributed(Dense(N_STATIONS)))model.compile(optimizer='adam', loss='mse')


定义并编译模型后,可按以下方式进行训练:

from keras.callbacks import ModelCheckpoint# 模型检查点,用于在训练期间保存最佳模型model_checkpoint = ModelCheckpoint(    filepath='best_model_weights.h5',  # 保存模型权重的文件路径    save_weights_only=True,           # 只保存权重而非整个模型    monitor='val_loss',               # 监控验证集损失    mode='min',                       # 监控指标的最小化模式    save_best_only=True)              # 只保存最佳模型# 训练模型history = model.fit(X_train, Y_train,                    epochs=25,                     # 训练轮数                    validation_split=0.2,         # 验证集比例                    callbacks=[model_checkpoint])  # 使用的回调函数


训练完成后,可加载模型检查点回调所保存的最佳权重:

# 训练完成后,将最佳模型权重加载到模型中model.load_weights('best_model_weights.h5')# 在测试集上进行预测preds = model.predict_on_batch(X_test)


模型拓展

我们可以从多个方面拓展该模型,例如将其他气象信息作为解释变量纳入模型。

露点温度等气象数据会受到多种因素的影响,将这些因素纳入模型可能是提高预测性能的关键。

尝试其他神经网络架构也可能带来提升,文中采用了堆叠式 LSTM,但其他方法也展现出了良好的预测性能,例如 N-BEATS、DeepAR 或 ES-RNN。

我们还可以纳入空间信息,如地理坐标,这样模型就能更好地模拟不同地点之间的空间依赖性。


总结

精准农业旨在优化农业流程,这种优化可以降低农业对环境的影响,露点温度是水文学中的一个关键指标,预测该变量对灌溉等多种活动有益。

气象变量通常在多个站点进行采集,从而形成时空数据集,深度学习可用于构建时空预测模型。

本文使用包含六个不同地点露点温度的数据集训练了一个 LSTM 神经网络,这个模型可以通过纳入额外的解释变量、空间信息或改变网络架构等方式进行拓展。


大家想自学的我还给大家准备了一些机器学习、深度学习、神经网络资料大家可以看看以下文章(文章中提到的资料都打包好了,都可以直接添加小助手获取)


<


 人工智能资料分享 



>







图片


零基础学习路线(点击图片即可跳转)









图片


深度学习中文教程书(点击图片即可跳转)


大家觉得这篇文章有帮助的话记得分享给你的 死党闺蜜、同学、朋友、老师、敌蜜!

B站:AI秃秃学长小墨


图片


关注小墨

获取最新AI技能+最肝AI干货


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182405