基于RBMO-BP神经网络回归预测的Python代码实现

时间:2025-02-19 08:33:31
import torch
import as nn
import numpy as np
import pandas as pd
import as optim
from import StandardScaler
from import mean_absolute_error
import matplotlib
device = ('cuda' if .is_available() else 'cpu')
['-serif'] = ['SimHei']
['axes.unicode_minus'] = False

# 加载数据
data = pd.read_csv('数据集.csv').values

# 划分训练集和测试集
(0)
temp = (len(data))

X_train = data[temp[:80], :7]
y_train = data[temp[:80], 7]
X_test = data[temp[80:], :7]
y_test = data[temp[80:], 7]

# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = (X_test)

# 转换为PyTorch张量
X_train = (X_train, dtype=torch.float32).to(device)
y_train = (y_train, dtype=torch.float32).to(device).unsqueeze(1)  # 回归任务,目标应为连续值
X_test = (X_test, dtype=torch.float32).to(device)
y_test = (y_test, dtype=torch.float32).to(device).unsqueeze(1)  # 回归任务,目标应为连续值

class BPNeuralNetwork():
    def __init__(self, input_size, hidden_size1,hidden_size2,output_size,dropout_prob=0.0):
        super(BPNeuralNetwork, self).__init__()
        self.fc1 = (input_size, hidden_size1)
         = ()
        self.fc2 = (hidden_size1, hidden_size2)
         = ()
        self.fc3 = (hidden_size2, output_size)
         = (dropout_prob)  # 添加 Dropout

    def forward(self, x):
        out = self.fc1(x)
        out = (out)
        out = self.fc2(out)
        out = (out)
        out = (out)  # 在激活函数之后应用 Dropout
        out = self.fc3(out)
        return out

# 定义网络
input_size = X_train.shape[1]
hidden_size1 = 15
hidden_size2 = 13
output_size = 1  # 回归任务,输出一个连续值
model = BPNeuralNetwork(input_size, hidden_size1, hidden_size2, output_size).to(device)

# 使用 MSELoss 进行回归
criterion = ()