【深度学习】CNN神经网络实现土壤湿度预测(1)

327 阅读4分钟

本文主要进行CNN卷积神经网络回归预测的项目开发,本文主要阐述其数据处理部分,包括构造数据字段、按照时间对数据排序、数据可视化、筛选所需字段等步骤。

1. 项目简介

本项目属于机器学习范畴,根据多特征数据集(包含土壤不同深度的湿度逐年变化、降水天数逐年变化、土壤降雨量逐年变化等因素)搭建神经网络对未来几年10cm土壤湿度进行预测。

本项目使用PaddlePaddle框架搭建卷积神经网络对10cm土壤湿度进行回归预测,主要包括数据处理、数据预处理、模型构建、模型训练、模型预测、可视化结果等过程。

2. 数据集介绍

数据集统计了某草原从2012年1月-2022年3月的土壤数据,包括10cm湿度(kg/m2),土壤蒸发量(W/m2),降水天数字段等等。需要对数据集按照时间顺序进行排序处理方可进行时间序列预测。

  • 经过初步分析随着时间变化,土壤湿度同样呈现规律性变化

3. 数据处理

3.1 导入数据集及所需库

本项目使用PaddlePaddle框架进行搭建,使用JupyterNotebook进行开发演示。

%matplotlib inline

# 导入 paddle
import paddle
import paddle.nn.functional as F

# 导入其他模块
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
print(paddle.__version__)
import paddle.nn as nn

2.1.1 读取数据

因为是excel形式保存的数据,使用pandas下的read_excel进行读取即可。

soil_humidity = pd.read_excel("data/data179898/soil_humidity.xlsx")
soil_humidity.head()

2.1.2 构建Datetime字段

  • 需要把一些object或者是字符、整型等某列进行转换为pandas可识别的datetime时间类型数据,方便时间的运算等操作。
  • pandas.to_datetime函数可以将一个标量,数组,Series或者是DataFrame/字典类型的数据转换为pandas中datetime类型的时间类型数据。
  • 转化Datetime方便我们后续根据时间顺序来对数据进行排序
soil_humidity["Datetime"] = pd.to_datetime(soil_humidity["datetime"])
soil_humidity.drop(["datetime"],axis=1, inplace=True)

2.1.3 按照时间顺序排序

  • 将数据从2012-01-01到2022年-03-01排序
  • 按照时间早晚的方式排序,方便后续进行处理预测等
soil_humidity.index = soil_humidity.Datetime
soil_humidity.drop(["Datetime"],axis=1, inplace=True)
soil_humidity = soil_humidity.sort_index()
soil_humidity.head()

接下来,根据按照时间顺序排序后的数据,绘制10cm湿度字段与时间的变化关系图。

  • 代码中前几行的含义是设置字体,使图像能够显示中文字体
from pylab import mpl
from matplotlib.font_manager import FontProperties
myfont=FontProperties(fname=r'/usr/share/fonts/fangzheng/FZSYJW.TTF',size=12)
sns.set(font=myfont.get_name())


# 可视化数据分布
plt.plot(soil_humidity["10cm湿度(kg/m2)"],"b--")

plt.yticks(fontproperties = 'Times New Roman', size = 18)
plt.xticks(fontproperties = 'Times New Roman', size = 18)

# 2.2 添加网格显示
# plt.grid(True, linestyle='--', alpha=0.5)  # 开启网格,虚线,透明度0.5

# 2.3 添加描述信息
plt.xlabel("时间", size = 18)
plt.ylabel("10cm湿度(kg/m2)", size = 18)
plt.title("湿度随时间变化关系", fontsize=22)
plt.show()

绘制出的图像如下图所示:

  • 观察图像可以发现,10cm湿度随着月份的变化呈现规律性变化
  • 因此,可以考虑使用CNN单序列预测
  • 当然,对于这种预测值与时间呈现一定规律性的数据,我们还可以采用LSTM神经网络对其进行预测

image.png

2.1.4 筛选所需字段

  • CNN单序列预测,只需要一个预测序列字段,通过搭建卷积神经网络来向后推算当前序列的新字段。
  • 因此,我们需要使用变量保存要预测的序列
  • 保存这个序列以后,我们后面将用到这个序列,对其划分训练集与测试集
soil_humidity_10cm = soil_humidity.loc[soil_humidity.index[:], ['10cm湿度(kg/m2)']]

3. 总结

本文完成了CNN神经网络对土壤湿度预测的数据处理部分,比如构建Datetime字段,然后通过Datetime字段进行排序,可视化湿度与时间的变化关系,并对有用字段进行筛选。下文将介绍模型构建、模型训练、模型预测部分。

本文正在参加「金石计划 . 瓜分6万现金大奖」