首页 > 编程语言 >基于SA-BP模拟退火算法优化BP神经网络实现数据预测Python实现

基于SA-BP模拟退火算法优化BP神经网络实现数据预测Python实现

时间:2024-09-05 16:54:55浏览次数:9  
标签:Python train torch 算法 神经网络 模拟退火 BP SA

       在数据分析和机器学习领域,时间序列预测和多输入单输出系统的预测是重要且复杂的问题。传统的BP(反向传播)神经网络虽然具有强大的非线性函数逼近能力,但在处理这些问题时容易陷入局部极小值、训练速度慢以及过拟合等问题。为了克服这些不足,我们引入了SA-BP(模拟退火算法优化BP神经网络)算法。本文将详细介绍SA-BP算法的原理、步骤,并结合Python程序进行实例分析。

一、SA-BP算法概述

      1.SA模拟退火算法

       SA模拟退火算法(Simulated Annealing, SA)是一种基于概率的全局优化算法,其灵感来源于物理学中固体物质的退火过程。模拟退火算法通过模拟固体在退火过程中粒子运动逐渐趋于有序并达到能量最低状态的机制,来解决数学优化问题。模拟退火算法的核心思想是在解空间中随机寻找目标函数的全局最优解。它从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在求解空间中随机寻找目标函数的全局最优解。即在局部最优解能概率性地跳出并最终趋于全局最优。

      2.BP神经网络(BP)

       BP神经网络是一种具有三层或三层以上的多层神经网络,包括输入层、隐含层和输出层。每一层都由若干个神经元组成,神经元之间通过加权和的方式传递信号,并经过激活函数进行非线性变换。BP神经网络的训练过程包括前向传播和反向传播两个阶段。在前向传播阶段,输入信号从输入层逐层传递到输出层;在反向传播阶段,根据输出误差调整各层之间的连接权重,使误差逐步减小。

      3.SA算法

       SA算法流程如下:

     (1)初始化:选择一个初始解作为当前解,同时设置一个初始温度和终止温度。温度表示搜索的“随机性”,在开始时较高,逐渐减小。

     (2)迭代搜索:在当前解的邻域中随机生成一个新解。计算新解与当前解的目标函数差(或成本差)ΔE。如果ΔE小于0,接受新解作为当前解。如果ΔE大于0,以一定概率接受新解。这个概率通常与温度参数和新旧解之间的成本差有关,遵循Metropolis准则。

     (3)温度更新:在每一次迭代后,根据一定的更新策略降低温度。常见的策略有线性降温和指数降温。

     (4)终止条件:当达到某个预定的迭代次数、温度降至某一阈值以下或在一定时间内未找到更好的解时,算法终止。

二、实验步骤

      SA-BP神经网络回归预测步骤:

      1.数据清洗:去除缺失值和异常值。

      2.特征选择:根据相关性分析选择对预测结果影响显著的特征。

      3.数据归一化:将特征值缩放到同一量纲,提高训练效率。

      4.确定BP神经网络结构:首先,根据问题的需求确定BP神经网络的输入层、隐藏层和输出层的节点数,以及隐藏层的层数。

      5.初始化BP神经网络参数:随机初始化BP神经网络的权重和偏置。这些参数将作为SA优化过程中的搜索变量。

      6.定义适应度函数:使用训练数据集训练BP神经网络,并计算网络输出与实际输出之间的误差(如均方误差MSE)作为适应度函数。适应度值越小,表示神经网络的预测性能越好。

      7.模拟退火优化:在一定的温度范围内,随机调整BP神经网络的权重和偏置。计算新解的误差,并根据接受准则判断是否接受新解。如果接受新解,则更新当前解,并降低温度;如果不接受,则保持当前解不变,继续下一轮迭代。

      8.迭代:重复执行适应度评估、分类和位置更新的过程,直到达到最大迭代次数或满足其他停止条件。

      9.输出最优BP神经网络:在SSA优化过程结束后,选择适应度值最小的麻雀(即最优的BP神经网络权重和偏置)作为最终的网络参数。

     10.测试与评估:使用测试数据集评估优化后的BP神经网络的预测性能,并与其他优化算法进行比较。

代码部分

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import torch
import torch.nn as nn
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
import random
import torch.optim as optim
import matplotlib
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

# 导入数据
data = pd.read_csv('数据集.csv').values

# 划分训练集和测试集
np.random.seed(0)
temp = np.random.permutation(len(data))

P_train = data[temp[:80], :7]
T_train = data[temp[:80], 7]
P_test = data[temp[80:], :7]
T_test = data[temp[80:], 7]

# 数据归一化
scaler_input = MinMaxScaler(feature_range=(0, 1))
scaler_output = MinMaxScaler(feature_range=(0, 1))

p_train = scaler_input.fit_transform(P_train)
p_test = scaler_input.transform(P_test)

t_train = scaler_output.fit_transform(T_train.reshape(-1, 1)).ravel()
t_test = scaler_output.transform(T_test.reshape(-1, 1)).ravel()

# 转换为 PyTorch 张量
p_train = torch.tensor(p_train, dtype=torch.float32).to(device)
t_train = torch.tensor(t_train, dtype=torch.float32).view(-1, 1).to(device)
p_test = torch.tensor(p_test, dtype=torch.float32).to(device)
t_test = torch.tensor(t_test, dtype=torch.float32).view(-1, 1).to(device)

# 定义神经网络
class NeuralNet(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(NeuralNet, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        return out

model = NeuralNet(7, 10, 1).to(device)
criterion = nn.MSELoss()

四、实验与结果

      1.数据准备

       为了验证SA优化BP神经网络的有效性,本文采用如下数据集进行实验。下面所示本次采用的数据集(部分)。

      2.结果分析

       实验结果表明,采用基于SA优化BP神经网络的预测模型与传统BP神经网络模型进行对比分析。实验结果表明,SA-BP模型在准确率、鲁棒性和收敛速度方面均优于传统BP神经网络模型。

       (1) 适应度曲线图

       (2) 训练集预测值和真实值对比结果    

      (3) 测试集预测值和真实值对比结果   

      (4) 训练集线性回归图   

     (5) 测试集线性回归图    

     (6) 其他性能计算和新数据预测   

五、结论

       SA-BP算法通过结合模拟退火算法的全局搜索能力和BP神经网络的逼近能力,有效提高了BP神经网络的预测精度和鲁棒性。在实际应用中,SA-BP算法可以应用于时间序列预测、多输入单输出系统的预测等多个领域,为数据分析和机器学习提供强有力的支持。

标签:Python,train,torch,算法,神经网络,模拟退火,BP,SA
From: https://blog.csdn.net/2301_80449389/article/details/141934912

相关文章

  • Biome-BGC生态系统模型与Python融合技术实践应用
    Biome-BGC是利用站点描述数据、气象数据和植被生理生态参数,模拟日尺度碳、水和氮通量的有效模型,其研究的空间尺度可以从点尺度扩展到陆地生态系统。在Biome-BGC模型中,对于碳的生物量积累,采用光合酶促反应机理模型计算出每天的初级生产力(GPP),将生长呼吸和维持呼吸减去后的产物......
  • Python详细安装教程:基于Windows系统(配有图文)
    1.在官网上安装你想安装的版本 官网地址:https://www.python.org/点击选择Windows(笔者的电脑的是windows11)如果你的电脑是win7或XP系统,则需要下载老一点的版本。这里是最新版本的稳定版本,你可以选择下载,也可以选择下载老一点的版本。点击DowdloadWindowsinstaller(64-b......
  • python电梯厂企业固定资产管理系统excel数据导入 9327d
    目录博主介绍技术栈......
  • python大学生就业信息系统的设计与实现 ajz8t
    目录技术栈和环境说明具体实现截图系统设计解决的思路python-flask核心代码部分展示python-django核心代码部分展示django项目结构讲解个人心得可行性分析论证源码获取技术栈和环境说明本系统以Python开发语言开发,MySQL为后台数据库,采用DJANGO/flask框架开发。。预......
  • Python基础学习教程笔记 (持续更新!!)
    Python3学习数字number数学函数abs(x)返回数字的绝对值ceil(x)返回数字的上入整数floor(x)返回数字的下舍整数(x>y)-(x<y)如果x<y返回-1,如果x==y返回0,如果x>y返回1exp(x)返回e的x次幂fabs(x)以浮点数形式返回数字的绝对值,eg:math.fabs(-10)返回10.0log(x)eg:math.......
  • 计算机毕业设计推荐-基于python的健身房管理系统【python-爬虫-大数据定制】
    精彩专栏推荐订阅:在下方专栏......
  • centos下python3.6.8 安装ssl模块
    1.查看openssl是否已安装输入命令行:opensslversion 2.下载python安装包.这个在官网去下载就可以了.然后导入到centos系统当中,并进行解压tar-zxvfxxx.tgz3.安装python,相关前置条件查看百度即可.什么gcc之类的常用命令:./configure--prefix="/usr/local/python"m......
  • 计算机毕业设计基于OpenCV和Python的人脸识别系统
    目录博主介绍技术栈具体实现截图系统设计解决的思路python-flask核心代码部分展示python-django核心代码部分展示django项目结构讲解个人心得可行性分析论证源码获取博主介绍......
  • 软工homework2:个人项目-论文查重(Python)
    这个作业属于哪个课程广工计院计科34班软工这个作业要求在哪里作业要求这个作业的目标个人独立完成一次论文查重项目,完成项目后能够了解项目开发工程流程,学会使用PSP表格,完成性能分析以及测试等零、GitHub地址一、需求题目:论文查重描述如下:设计一个论文查重......
  • VSCode Python环境 gmpy2库安装
    win+rcmd①Wheel文件安装:安装wheel:pipinstallwheel**查看wheel版本的命令:wheelversion②下载对应Python版本的WHL文件:**我的是Python版本是:需要选择的应当是cp39:总之选了最新版本。下载完成后移动文件到所使用的集成开发工具对应目录下在bin层创建了一个ku文件夹存......