使用BP神经网络对时序数据进行回归代码
时间: 2023-07-09 15:36:45 浏览: 100
基于BP神经网络的数据回归预测
5星 · 资源好评率100%
下面是使用BP神经网络对时序数据进行回归的示例代码,其中使用了Python的PyTorch库:
```python
import torch
import torch.nn as nn
import numpy as np
# 生成时间序列数据
x = np.arange(0, 10, 0.1)
y = np.sin(x)
# 将时间序列数据转化为监督学习数据
def create_dataset(dataset, look_back):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back)]
dataX.append(a)
dataY.append(dataset[i + look_back])
return np.array(dataX), np.array(dataY)
look_back = 5
trainX, trainY = create_dataset(y, look_back)
# 转化为张量
trainX = torch.from_numpy(trainX).float()
trainY = torch.from_numpy(trainY).float()
# 定义BP神经网络模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(look_back, 10)
self.fc2 = nn.Linear(10, 1)
def forward(self, x):
x = torch.sigmoid(self.fc1(x))
x = self.fc2(x)
return x
net = Net()
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)
# 训练模型
for epoch in range(1000):
optimizer.zero_grad()
output = net(trainX)
loss = criterion(output, trainY)
loss.backward()
optimizer.step()
# 预测结果
testX = np.array([[0.1, 0.2, 0.3, 0.4, 0.5], [0.2, 0.3, 0.4, 0.5, 0.6]])
testX = torch.from_numpy(testX).float()
testY = net(testX)
print(testY.detach().numpy())
```
这段代码中,我们首先生成了一个正弦函数的时间序列数据,然后将其转化为监督学习数据。接着,我们定义了一个包含两个全连接层的BP神经网络模型,并使用均方误差(MSE)作为损失函数,随机梯度下降(SGD)作为优化器进行训练。最后,我们使用训练好的模型对两个测试样本进行预测,并输出了预测结果。
需要注意的是,这只是一个简单的示例,实际应用中需要根据具体数据和问题进行参数调整和模型优化。
阅读全文