我的数据为一个excle,excle中有两列,分别为RS数据和LS数据 使用10个RS和LS数据预测接下来一个的LS数据,训练集为70%,验证集为15%,测试集为15% 打印评价指标和预测图片 我们使用基于pytorch的BP神经网络代码
时间: 2024-03-17 17:46:09 浏览: 108
好的,针对您的问题,我可以给出以下的步骤和代码:
1. 数据预处理
首先,读取Excel中的数据,将其划分为训练集、验证集和测试集。然后,对数据进行归一化处理,将其缩放到0-1范围内,以便于模型的训练和预测。
以下是数据预处理的代码:
```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
# 读取Excel中的数据
df = pd.read_excel('data.xlsx')
# 提取RS和LS数据
X = df[['RS', 'LS']].values
# 提取预测目标
y = df['LS'].values.reshape(-1, 1)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_test, y_test, test_size=0.5, random_state=42)
# 归一化处理
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)
X_test = scaler.transform(X_test)
y_train = scaler.fit_transform(y_train)
y_val = scaler.transform(y_val)
y_test = scaler.transform(y_test)
```
2. 构建神经网络模型
在这里,我们使用PyTorch框架来构建BP神经网络模型,包括输入层、隐藏层和输出层。我们定义一个包含两个隐藏层的神经网络模型,使用ReLU作为激活函数,并在输出层使用线性激活函数。
以下是构建神经网络模型的代码:
```python
import torch
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(2, 16)
self.fc2 = nn.Linear(16, 16)
self.fc3 = nn.Linear(16, 1)
self.relu = nn.ReLU()
def forward(self, x):
x = self.relu(self.fc1(x))
x = self.relu(self.fc2(x))
x = self.fc3(x)
return x
# 初始化神经网络模型
net = Net()
criterion = nn.MSELoss()
optimizer = optim.Adam(net.parameters(), lr=0.001)
```
3. 训练神经网络模型
在这里,我们使用训练集和验证集来训练神经网络模型。我们将模型训练100个epoch,并在每个epoch结束时记录训练集和验证集的损失值,以便于后续的可视化分析。
以下是训练神经网络模型的代码:
```python
# 将数据转换为PyTorch张量
X_train = torch.from_numpy(X_train).float()
X_val = torch.from_numpy(X_val).float()
y_train = torch.from_numpy(y_train).float()
y_val = torch.from_numpy(y_val).float()
# 定义训练参数
epochs = 100
train_losses, val_losses = [], []
# 训练神经网络模型
for epoch in range(epochs):
net.train()
optimizer.zero_grad()
y_pred = net(X_train)
loss = criterion(y_pred, y_train)
loss.backward()
optimizer.step()
train_losses.append(loss.item())
net.eval()
with torch.no_grad():
y_val_pred = net(X_val)
val_loss = criterion(y_val_pred, y_val)
val_losses.append(val_loss.item())
print(f'Epoch [{epoch+1}/{epochs}], Train Loss: {loss.item():.4f}, Val Loss: {val_loss.item():.4f}')
# 可视化训练集和验证集的损失值
import matplotlib.pyplot as plt
plt.plot(train_losses, label='Train Loss')
plt.plot(val_losses, label='Val Loss')
plt.legend()
plt.show()
```
4. 测试神经网络模型
最后,我们使用测试集来测试神经网络模型的性能,包括预测结果的可视化和评价指标的计算。在这里,我们使用均方根误差(RMSE)作为评价指标。
以下是测试神经网络模型的代码:
```python
# 将数据转换为PyTorch张量
X_test = torch.from_numpy(X_test).float()
y_test = torch.from_numpy(y_test).float()
# 测试神经网络模型
net.eval()
with torch.no_grad():
y_test_pred = net(X_test)
test_loss = criterion(y_test_pred, y_test)
test_rmse = torch.sqrt(test_loss)
print(f'Test RMSE: {test_rmse.item():.4f}')
# 可视化预测结果
plt.plot(y_test.numpy(), label='True')
plt.plot(y_test_pred.numpy(), label='Predicted')
plt.legend()
plt.show()
```
这就是整个BP神经网络模型的实现过程。希望能够对您有所帮助!
阅读全文