基于ABC-BP人工蚁群优化BP神经网络实现数据预测Python实现

news2024/11/16 9:27:04

在数据预测领域,传统的统计方法和时间序列分析在面对复杂、非线性的数据时往往力不从心。随着人工智能技术的快速发展,神经网络特别是BP(Back Propagation)神经网络因其强大的非线性映射能力,在预测领域得到了广泛应用。然而,BP神经网络也存在易陷入局部最优、收敛速度慢等问题。为了克服这些缺点,本文将介绍一种基于人工蜂群算法(Artificial Bee Colony Algorithm, ABC)优化BP神经网络的数据预测方法,即ABC-BP模型。

一、ABC-BP算法概述

       1.ABC人工蜂群算法

       人工蜂群算法是一种受蜜蜂觅食行为启发的群体智能算法。蜜蜂在寻找食物源时,通过侦察蜂、雇佣蜂和跟随蜂的协同工作,实现全局最优解的搜索。ABC算法通过模拟这一过程,实现复杂优化问题的求解。ABC算法主要包括以下步骤:生成一组初始的神经网络权重作为“食物源”位置。蜜蜂(代表神经网络的解决方案)通过评估函数(如分类准确度或预测误差)来搜索最优解。工蜂(其他解决问题的个体)共享它们发现的好食物源,更新整个群体的最佳解。根据工蜂的数量和食物源的质量,采用一定的概率规则选择下一个解决方案。ABC算法具有分布式、并行性和自适应性的特点,能够有效避免局部最优解,提高搜索效率。

       2.BP神经网络(BP)

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

       3.SSA算法

       SSA算法流程如下:

     (1)初始化:确定种群规模(蜜蜂总数)、最大迭代次数、控制参数“limit”(同一蜜源被限定开采的次数)等。随机生成初始蜜源(问题的可行解),并计算每个蜜源的适应度(即蜜量大小)。

     (2)引领蜂阶段:每个引领蜂在其对应的蜜源附近进行局部搜索,寻找新的蜜源(即新的解)。计算新蜜源的适应度,并与原蜜源进行比较。如果新蜜源的适应度优于原蜜源,则替换原蜜源;否则,原蜜源的开采次数加1。

     (3)跟随蜂阶段:跟随蜂根据引领蜂分享的蜜源信息(通过某种概率机制,如轮盘赌方式)选择合适的蜜源。在选定的蜜源附近进行局部搜索,生成新解并计算其适应度。同样地,根据贪婪选择机制保留较优的解。

     (4)侦查蜂阶段:检查每个蜜源的开采次数是否达到“limit”。如果某个蜜源的开采次数超过“limit”,则认为该蜜源已经陷入局部最优,对应的引领蜂转变为侦查蜂。侦查蜂在全局范围内随机生成新的蜜源,替代原来的蜜源,以增加算法跳出局部最优的能力。

     (5)记忆最佳蜜源:在每次迭代过程中,记录并更新迄今为止找到的最佳蜜源(即最优解)。

     (6)判断终止条件:检查是否达到最大迭代次数或其他预设的终止条件。如果满足终止条件,则输出最佳蜜源作为优化问题的解;否则,返回步骤2继续迭代。

     (7)输出结果:输出算法找到的最优解及其适应度值。

二、实验步骤

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

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

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

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

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

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

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

     7.ABC算法优化:利用ABC算法对BP神经网络的权重和阈值进行优化,最小化网络输出与真实值之间的均方误差(MSE)。

     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 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

# 实例化模型
input_size = 7
hidden_size = 14
output_size = 1
model = NeuralNet(input_size, hidden_size, output_size).to(device)
criterion = nn.MSELoss()

class ArtificialBeeColony:
    def __init__(self, bee_count, max_iter, limit, search_space, input_size, hidden_size, output_size, device):
        self.bee_count = bee_count
        self.max_iter = max_iter
        self.limit = limit
        self.search_space = search_space
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.device = device
        self.network_structure = NeuralNet(self.input_size, self.hidden_size, self.output_size).to(self.device)
        self.population = self.initialize_population()
        self.fitness = np.zeros(self.bee_count)
        self.trial = np.zeros(self.bee_count)
        self.best_solution = None
        self.best_fitness = float('inf')

    def initialize_population(self):
        population = []
        for _ in range(self.bee_count):
            weights_biases = []
            for param in self.network_structure.parameters():
                weights_biases.append(
                    torch.rand(param.shape, device=self.device) * (self.search_space[1] - self.search_space[0]) + self.search_space[0])
            population.append(weights_biases)
        return population

    def evaluate_fitness(self, network, data, target):
        network.eval()  # Ensure the model is in evaluation mode
        data = data.to(self.device)
        target = target.to(self.device)
        with torch.no_grad():
            output = network(data)
        loss = criterion(output, target)
        return loss.item()

四、实验与结果

     1.数据准备

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

     2.结果分析

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

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

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

      (3) 训练集线性回归图  

     (4) 测试集线性回归图   

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

五、结论

      本文介绍了基于ABC优化BP神经网络进行数据预测的方法。通过结合ABC的全局搜索能力和BP神经网络的非线性映射能力,可以有效提高模型的预测精度。实际应用中,可根据具体问题调整ABC和BP神经网络的参数,以达到最佳预测效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2104624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL图形界面 --DataGrip

一.DataGrip下载安装 .进入DataGrip官网 右上角点击下载 下载完成之后双击该下载的应用程序 点击下一步 输入安装目录 全选,下一步 直接安装 开始中找到该数据库并且启动 新建项目mysql-base 要想连接MySQL,点击 “”创建数据源 配置MySQ连接信息并下载需驱动…

Anaconda安装和环境配置教程(深度学习准备)

目录 1.下载选择 2.prompt配置 3.虚拟环境配置 4.检查是不是安装成功 5.安装jupter 6.关闭anaconda重新进入 7.总结 1.下载选择 我第一次使用的这个官网上面的邮箱的方式下载的,但是这个方式真的特别慢,于是用了这个清华的镜像网站,网…

UML概述

文章目录 1、相关概念2、UML分类 1、相关概念 构造块 事务 结构事务:最静态的部分,包括:类、接口、协作、用例、活动类、构件和节点行为事务: 代表时间和空间上的动作,包括:消息,动作次序&…

AS-V1000视频监控平台web客户端播放实时视频和视频录像时,有个别画面出现卡顿和花屏问题的解决过程

目录 一、问题背景 二、解决过程 1、检查平台进程 2、检查服务器CPU内存的使用情况 ①top/htop命令 ②vmstat命令 ③free命令 ④sar命令 3、检查网络带宽情况 三、最终效果 一、问题背景 客户在公网测试服务器中的视频监控平台接入了两路rtsp流并在服务器中进行录像。最近发现…

Tomato靶机通关攻略

步骤一:进行端口扫描,找寻靶机地址 步骤二:访问靶机地址 步骤三:利用dirb进行扫描 得出:/antibot_image/进行访问 步骤四:进入antibots->info.php->右击进入页面源代码->发现存在文件包含漏洞 步…

EmguCV学习笔记 C# 9.1 VideoCapture类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

html+css+js网页设计 故宫10个页面 ui还原度100%

htmlcssjs网页设计 故宫10个页面 ui还原度100% 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 …

Ubuntu20.04安装libtorch并测试(一定要验证测试有效性!!!)

这里写目录标题 根据你自己的电脑配置选择合适版本的libtorch版本创建工作空间验证这个libtorch包编译验证根据你自己的电脑配置选择合适版本的libtorch版本 我的cuda版本是10.1的所以定位到所在网址链接: libtorch ,选择了版本libtorch-cxx11-abi-shared-with-deps-1.8.1+cu…

jmeter使用——接口测试事知识点

一、接口架构 基于Soap架构,基于xml规范,基于webserice协议,特点:地址接口?wsd结尾。比较老,不是流行框架。基于RPC架构,基于dubbo协议/thrft协议/SpringCloud微服务。数据量少,高并…

汽车电子行业知识:什么是车辆定位技术

车辆定位技术是指通过各种技术手段对车辆的位置进行实时监测和记录的技术。它通常结合全球定位系统(GPS)、蜂窝网络、Wi-Fi、蓝牙等多种技术来实现车辆的精确定位。 实现方式 GPS定位:利用卫星信号获取车辆的经纬度信息。蜂窝网络定位&#…

开发chrome扩展插件修改地址

引言 在前端开发过程中,一般分为三个环境:开发环境、测试环境和生产环境。这三个环境对于前端而言,不过就是请求的 API 接口不同罢了。如果是vue3项目,可以通过 import.meta.env.MODE来区分环境,可是站在后端兄弟角度…

短剧看剧系统+商城功能,开发uniapp+PHP,正版片源供授权,短剧影视小程序带支付收益等模式 付费短剧小程序源码

目录 一、短剧看剧系统是什么? 二、短剧授权是什么? 三、短剧有哪些类型? 四、区别? 总结: 一、短剧看剧系统是什么? 首先小程序上架需要有资质(办资质需要20-30天)。 1、短剧微信小程序要求:《广播电…

无外网的redis本地登录测试

输入命令: redis-cli -h 127.0.0.1 -p 6379 redis 127.0.0.1:6379> redis 127.0.0.1:6379> keys * (error) ERR operation not permitted redis 127.0.0.1:6379> select 1 (error) ERR operation not permitted redis 127.0.0.1:6379[1]> …

保姆级教程:Dupay从注册到充值开卡全过程,可开GPT Plus、可绑定GPT充值API余额

前言 想要购买GPT Plus,或者给GPT充值,绑定国内visa信用卡,会被拒,于是便问问度娘,找到了一篇关于注册虚拟卡的教程,搬过来顺便修改下! 应用场景 1、Depay Master Visa卡支持绑定宝、微、美外…

高并发代理IP有哪些优势?

在当今数字化时代,随着互联网的迅猛发展,各类在线服务、电商平台、社交媒体及云计算应用等正以前所未有的速度增长,而这些系统的稳定运行和高效性能往往依赖于强大的服务器架构和高效的数据处理能力。高并发代理IP作为应对高流量、高并发访问…

Java导入包com.alibaba.fastjson2.JSONObject

com.alibaba.fastjson2.JSONObject 是阿里巴巴的 fastjson 库中的一个类,用于处理 JSON 数据。 这里提供一些常见的使用示例和可能的问题解决方法。 解决方案和示例代码: 创建 JSONObject 对象: import com.alibaba.fastjson2.JSONObject;JSONObject jsonObject …

TeeChart助力科研软件:高效实现数据可视化

在当今的科学研究中,数据可视化已经成为理解和传播复杂信息的关键工具。尤其是在物理研究领域,科学家们经常需要处理大量的数据,并通过可视化将这些数据转化为更易理解的形式。TeeChart作为一个强大且灵活的图形展示工具,能够帮助…

SpringBoot2:RESTFUL风格接口开发及源码解读

一、RESTFUL简介 Rest风格支持(使用HTTP请求方式,动词来表示对资源的操作) 以前:/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户 现在: /user GET-获取用户 DELETE-删除用户 PUT-修改…

Hadoop是什么?

Hadoop 是什么 1)Hadoop 是一个由 Apache 开发的分布式系统基础架构; 2)主要解决:海量数据的存储和海量数据的分析计算问题; 3)广义上来说,HADOOP 通常是指——HADOOP 生态圈; H…

福田区专精特新小巨人奖励最高50万元!

深圳市福田先进制造业-专精特新企业认定支持,对小巨人给予最高50万元补贴。下面深科信整理项目完整申报条件如下: 专精特新企业奖励标准 对入选专精特新企业名单的企业,符合以下申请条件的,给予一般不超过50万元支持。同一企业同…