基于深度学习的长江干线水位数据回归预测

简介:基于长江干线重点地区历史水位数据,回归预测分析指定地区水位信息,构建虚拟水文站。在水位监测设备故障情况下,及时预测水位信息。通过预测水位信息与实际水位信息对比,可间接反应水位监测设备健康状态,及时发现故障设备。

1.数据准备

本案例以宜宾、重庆、宜昌、汉口、南京、镇江等19个长江干线水文站采集水位信息作为输入参数,预测泸州水位信息。主要步骤包括数据采集、数据清洗和数据加载工作,共收集541天历史水位数据。

all_features = pd.read_csv('dataset/cjwaterlevelnormal.csv')    #读取所有数据
new_features = pre_treatment(all_features, feature_names)
print(new_features)
     YIBIN  LUZHOU  BEIPEI  CHONGQING  ...  ANQING  WUHU  NANJING  ZHENJIANG
0      2.6     3.3    0.12      14.02  ...    5.01  3.64     2.86       3.38
1      2.6     3.3    0.12      14.02  ...    5.01  3.64     2.86       3.38
2      2.6     3.3    0.12      14.02  ...    5.01  3.64     2.86       3.38
3      2.6     3.3    0.12      14.02  ...    5.01  3.64     2.86       3.38
4      2.6     3.3    0.12      14.02  ...    5.01  3.64     2.86       3.38
..     ...     ...     ...        ...  ...     ...   ...      ...        ...
537    6.0     4.9    3.78       6.97  ...   10.37  7.08     5.68       5.37
538    5.6     4.8    4.00       7.18  ...   10.33  7.05     5.94       5.41
539    5.4     4.7    3.50       7.39  ...   10.31  7.05     6.03       5.18
540    6.2     4.9    4.55       8.81  ...   10.35  7.10     6.06       5.03
541    6.0     5.4    7.87      11.34  ...   10.41  7.19     6.02       4.86

2.模型设计与训练

选取434组历史数据作为训练集。

net = LinearNet(args.input_dim, args.output_dim)
init.normal_(net.linear.weight, mean=0, std=1)
init.constant_(net.linear.bias, val=0)
loss = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=args.learning_rate)

# 训练模型
loss_data = list()
for epoch in range(1, args.num_epochs + 1):
    for x, y in data_iter:
        output = net(x)
        l = loss(output, y.view(-1, 1))
        optimizer.zero_grad() #梯度清零,等价于net.zero_grad
        l.backward()
        optimizer.step()
    loss_data.append(l.item())
    if epoch % 100 == 0:
        plt.title("loss data")
        plt.plot(range(len(loss_data)), loss_data, 'r', label='loss', lineWidth=0.5)
        plt.show()

损失函数输出结果:

选取剩余108行历史数据作为测试集。

y_pre = list()
net = LinearNet(args.input_dim, args.output_dim)
net.load_state_dict(torch.load(file))
for x in X_test:
    prediction = net(x)
    y_pre.append(prediction.detach().numpy())
# 绘制曲线图
plt.title("result data")
fig, ax = plt.subplots()
ax.plot(range(len(y_pre)), y_pre, label='prediction', lineWidth=0.5)
ax.plot(range(len(y_pre)), y_test.detach().numpy(), label='practical', lineWidth=0.5)
ax.legend()
plt.show()

泸州水位预测值与实际值比较结果:

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值