Python实现ACO蚁群优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

news/2024/10/21 11:58:48/

说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。




1.项目背景

蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法,由意大利学者M. Dorigo, V. Maniezzo和A.Colorni等人于20世纪90年代初期通过模拟自然界中蚂蚁集体寻径行为而提出的一种基于种群的启发式随机搜索算法"。蚂蚁有能力在没有任何提示的情形下找到从巢穴到食物源的最短路径,并且能随环境的变化,适应性地搜索新的路径,产生新的选择。其根本原因是蚂蚁在寻找食物时,能在其走过的路径上释放一种特殊的分泌物——信息素(也称外激素),随着时间的推移该物质会逐渐挥发,后来的蚂蚁选择该路径的概率与当时这条路径上信息素的强度成正比。当一条路径上通过的蚂蚁越来越多时,其留下的信息素也越来越多,后来蚂蚁选择该路径的概率也就越高,从而更增加了该路径上的信息素强度。而强度大的信息素会吸引更多的蚂蚁,从而形成一种正反馈机制。通过这种正反馈机制,蚂蚁最终可以发现最短路径。

本项目通过ACO蚁群优化算法寻找最优的参数值来优化BP神经网络回归模型。

2.数据获取

本次建模数据来源于网络(本项目撰写人整理而成),数据项统计如下:

 

数据详情如下(部分展示):

 

3.数据预处理

3.1 用Pandas工具查看数据

使用Pandas工具的head()方法查看前五行数据:

关键代码:

 

3.2数据缺失查看

使用Pandas工具的info()方法查看数据信息:

从上图可以看到,总共有11个变量,数据中无缺失值,共2000条数据。

关键代码:

 

3.3数据描述性统计

通过Pandas工具的describe()方法来查看数据的平均值、标准差、最小值、分位数、最大值。

关键代码如下:

 

4.探索性数据分析

4.1 y变量直方图

用Matplotlib工具的hist()方法绘制直方图:

 从上图可以看到,y变量主要集中在-400~400之间。

4.2 相关性分析

从上图中可以看到,数值越大相关性越强,正值是正相关、负值是负相关。

5.特征工程

5.1 建立特征数据和标签数据

关键代码如下:

5.2 数据集拆分

通过train_test_split()方法按照80%训练集、20%测试集进行划分,关键代码如下:

6.构建ACO蚁群优化算法优化BP神经网络回归模型

主要使用ACO蚁群优化算法优化BP神经网络回归算法,用于目标回归。

6.1 ACO蚁群优化算法寻找的最优参数

关键代码:

最优参数:

 6.2 最优参数值构建模型

6.3 最优参数模型摘要信息

 

6.4 最优参数模型网络结构

 

6.5 最优参数模型训练集测试集损失曲线图

 

7.模型评估

7.1 评估指标及结果

评估指标主要包括可解释方差值、平均绝对误差、均方误差、R方值等等。

从上表可以看出,R方0.9985,为模型效果良好。

关键代码如下:

7.2 真实值与预测值对比图

 

从上图可以看出真实值和预测值波动基本一致,模型拟合效果良好。  

8.结论与展望

综上所述,本文采用了ACO蚁群优化算法寻找BP神经网络回归算法的最优参数值来构建回归模型,最终证明了我们提出的模型效果良好。此模型可用于日常产品的预测。

# ====定义惩罚项函数======
def calc_e(X):"""计算蚂蚁的惩罚项,X 的维度是 size * 2 """ee = 0"""计算第一个约束的惩罚项"""e1 = X[0] + X[1] - 6ee += max(0, e1)"""计算第二个约束的惩罚项"""e2 = 3 * X[0] - 2 * X[1] - 5ee += max(0, e2)return ee# ******************************************************************************# 本次机器学习项目实战所需的资料,项目资源如下:# 项目说明:# 链接:https://pan.baidu.com/s/1c6mQ_1YaDINFEttQymp2UQ# 提取码:thgk# ******************************************************************************# ===定义子代和父辈之间的选择操作函数====
def update_best(parent, parent_fitness, parent_e, child, child_fitness, child_e, X_train, X_test, y_train, y_test):"""针对不同问题,合理选择惩罚项的阈值。本例中阈值为0.1:param parent: 父辈个体:param parent_fitness:父辈适应度值:param parent_e    :父辈惩罚项:param child:  子代个体:param child_fitness 子代适应度值:param child_e  :子代惩罚项:return: 父辈 和子代中较优者、适应度、惩罚项"""if abs(parent[0]) > 0:  # 判断取值units = int(abs(parent[0])) * 10  # 赋值else:units = int(abs(parent[0])) + 16  # 赋值if abs(parent[1]) > 0:  # 判断取值epochs = int(abs(parent[1])) * 10  # 赋值else:epochs = int(abs(parent[1])) + 10  # 赋值

 更多项目实战,详见机器学习项目实战合集列表:

机器学习项目实战合集列表_机器学习实战项目_胖哥真不错的博客-CSDN博客



http://www.ppmy.cn/news/96051.html

相关文章

【2024最新】Spring面试题

✅✅作者主页:🔗请你喝杯Java的博客 🔥🔥精选专栏:🔗Java求职一条龙(持续更新中) 💞💞觉得文章还不错的话欢迎大家点赞👍➕收藏⭐️➕评论💬支持博主🤞 👉 👉你的一键三连是我更新的最大动力❤️❤️ 【2024最新】Spring面试题 一.Spring中@Resource…

【Linxu网络服务】LAMP架构

LAMP架构 一、LAMP架构1.1LAMP架构的组件 二、编译安装Apache httpd服务三、编译安装mysqld服务四、编译安装PHP解析环境六、安装论坛 一、LAMP架构 1.1LAMP架构的组件 (平台)Linux:作为LAMP架构的基础,提供用于支撑Web站点的操作系统,能够与…

as-if-serial原则

as-if-serial语义 as-if-serial语义不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变编译器、runtime和处理器都必须遵守as-if-serial语义。为了遵守as-if-serial语义,编…

软考A计划-试题模拟含答案解析-卷二

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

ldd 脚本分析

文章目录 1. 背景2. 查看ldd源码3. ldd 源码分析4. ldd 指令移植5. 总结 ldd 脚本分析 1. 背景 在开发某嵌入式平台时,发现没有动态库依赖查看工具ldd,后来几经搜索与源码分析,将相关记录一下。 2. 查看ldd源码 ldd 指令本质 ldd 本质不是一…

八大排序算法-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序、基数排序(下)

目录 前言冒泡排序(Bubble Sort)一、概念二、实现思路三、图示过程四、案例分析1、图示过程2、第一趟排序示例 五、代码1、代码示例2、代码解释3、运行结果 六、复杂度 快速排序(QuickSort)一、概念二、实现思路三、图示过程四、代…

H743 USBHOST协议栈 CPU占用率高的问题。

经过查看,是因为USBHOST频繁的进入中断导致,单步执行发现,是因为发生了USB_OTG_HCINT_CHH或者USB_OTG_HCINT_NAK中断了,只在CHH中断服务函数里,给USB主线程发了1个消息,又引起了USBH_Process_OS主线程的频繁…

七、Django DRF框架GenericAPIView--搜索排序分页

上一章: 六、DRF框架APIView--request&response解析器&渲染器_做测试的喵酱的博客-CSDN博客 下一章: 一、GenericAPIView介绍 APIView 继承 View GenericAPIView 继承 APIView。 GenericAPIView 功能: a.具备View的所有特性 …