Python实现PSO粒子群优化循环神经网络LSTM分类模型项目实战

news2024/11/18 19:39:34

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

1.项目背景

PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、兽群、鸟群和鱼群等的群集行为,这些群体按照一种合作的方式寻找食物,群体中的每个成员通过学习它自身的经验和其他成员的经验来不断改变其搜索模式。

本项目通过PSO粒子群优化循环神经网络LSTM算法来构建分类模型。

2.数据获取

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

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

3.数据预处理

3.1 用Pandas工具查看数据

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

关键代码:

3.2数据缺失查看

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

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

关键代码:

3.3数据描述性统计

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

关键代码如下:

4.探索性数据分析

4.1 y变量柱状图

用Matplotlib工具的plot()方法绘制柱状图:

4.2 y=1样本x1变量分布直方图

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

4.3 相关性分析

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

5.特征工程

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

关键代码如下:

5.2 数据集拆分

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

输出结果如下:

 

通过上图可以看到,特征数据样本数为1600,特征数为8个;测试集样本数为400。

5.3 数据标准化

数据标准化的结果,如下图所示:

5.4 增加维度

增加维度后的结果,如下图所示:

通过上图可以看到,特征数据增加了一个维度,满足了LSTM建模的要求。

6.构建PSO粒子群优化循环神经网络LSTM分类模型

主要使用PSO粒子群算法优化LSTM算法,用于目标分类。

6.1 算法介绍

     说明:PSO算法介绍来源于网络,供参考,需要更多算法原理,请自行查找资料

(1)基本思想:

PSO是由Eberhart 和Kennedy于1995年提出的一种全局搜索算法,是一种模拟自然界的生物活动以及群体智能的随机搜索算法。除了考虑模拟生物的群体活动之外,融入了个体认知和社会影响,是一种群体智能算法。

鸟群觅食和粒子群优化算法的基本定义对照表: 

(2)基本流程:

粒子群优化算法要求每个粒子在寻优的过程中维护两个向量,速度向量vi=[vi1,vi2,…,viD]   和位置向量xi=[xi1,xi2,…,xiD]   ,其中i表示例子的编号,D是求解问题的维数。粒子的速度决定了其运动的方向和速度,而位置则体现了粒子所代表的解在解空间中的位置,是评估该解质量的基础。算法同时还要求每个粒子各自维护一个自身的历史最优位置向量(pBest)和群体还维护一个全局最优向量(gBest)。 

  • PSO的算法步骤:

(1)初始化所有粒子、初始化它们的速度和位置,并且将粒子的历史最优pBest设为当前位置,而群体中最优的粒子作为当前的gBest。

(2)在每一次迭代中,计算各个粒子的适应度函数值。

(3)如果该粒子当前的适应度函数值比历史最优值好,那么历史最优将会被当前位置所替代。

(4)如果该粒子的历史最优比全局最优好,全局最优将会被粒子的历史最优所替代。

(5)对每个粒子  的第  维的速度和位置分别按照下面公式进行更新:

(6)如果未满足结束条件,则转到(2),否则输出gBest并结束。

  • 参数说明:

ω :惯性权重,非负数,调节对解空间的搜索范围,一般初始化未0.9,随着迭代可递减到0.4.

c1,c2 :加速度常数,调节学习最大步长.

rand1d,rand2d :两个随机函数,取值范围[0,1],以增加搜索随机性.

需要注意的是在更新过程中,PSO要求采用一个由用户设定的Vmax 来限制速度的范围,Vmax 的每一维Vmaxd 一般可以取相应维的取值范围的10%-20%,另外位置更新后必须是合法的,所以每次更新后要检查是否合法,否则进行修正,一般修正方法是重新随机设定或者限定在边界。

6.2 PSO粒子群算法寻找最优参数值

关键代码:

迭代过程数据:

最优参数:

 

6.3 最优参数值构建模型

6.4 最优模型的摘要信息

通过上图可以看到,模型共有11603个参数,以及每一层的参数。

6.5 最优模型的结构

通过上图可以看到,每一层的输入和输出以及层与层之间的结果关联关系。

6.6 模型准确率和损失可视化图

通过上图可以看到,训练集和测试集准确率随着迭代次数的增加,准确率逐步增加,迭代10次以后准确率逐步稳定下来;训练集和测试集损失随着迭代次数的增加逐步减小,在迭代10次以后损失逐渐趋于平稳。

7.模型评估

7.1评估指标及结果

评估指标主要包括准确率、查准率、查全率、F1分值等等。

从上表可以看出,F1分值为0.8863,说明模型效果良好。

关键代码如下:

7.2 分类报告

从上图可以看出,分类为0的F1分值为0.90;分类为1的F1分值为0.91;分类为2的F1分值为0.85。

7.3 混淆矩阵

从上图可以看出,实际为0预测不为0的 有12个样本;实际为1预测不为1的 有23个样本;实际为2预测不为2的 有11个样本,整体预测准确率良好。  

8.结论与展望

综上所述,本项目采用了PSO粒子群算法寻找循环神经网络LSTM算法的最优参数值来构建分类模型,最终证明了我们提出的模型效果良好。此模型可用于日常产品的预测。

本次机器学习项目实战所需的资料,项目资源如下:

项目说明:
链接:https://pan.baidu.com/s/1c6mQ_1YaDINFEttQymp2UQ 
提取码:thgk

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

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

相关文章

配置别名 配置alias

Linux: ~/.bashrc MAC bash 的配置文件是 ~/.bash_profile zsh的配置文件是~/.zsh 查看一下你的shell类型 terminal->performance->shells open with 方案是 1. 创建新的文件存放alias cd ~ vi .myalias edit .myalias esc :wq保存 2. add config to ~/.zshrc …

Java数据结构与Java算法学习Day09---并查集(简略笔记记录)

目录 并查集的功能: 1.1并查集结构 136 1.2并查集API设计 137 1.3并查集代码的实现 137 1.3.1UF(int N)构造方法实现 1.3.2并查集代码测试 138 1.4并查集应用案例 139 1.5UF_Tree算法优化 139 1.5.1UF_tree API设计 1.5.2优化后的…

git基本操作

目录 1 git命令与状态 1.1 常用git命令 1.2 不那么常用的git命令 1.3 常见状态 2 一些概念 2.1 版本控制 2.2 git简介 2.3 开源许可协议 3 常见git操作 3.1 下载git 3.2 安装git 3.3 配置用户信息 3.4 初始化仓库 3.5 查看git仓库状态 3.6 将文件…

手机软件测试用例设计

实例讲解手机软件测试用例设计 实例讲解手机软件测试用例设计,测试伴随在整个手机软件开发的各个阶段中,测试质量的高低直接关系到手机软件的可用性,友好性,可靠性。可以说,测试环节是手机软件开发的重要环节,是整个开…

JavaScript大作业:基于HTML实现紫色化妆品包装设计公司企业网站

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Linux与Nginx

Linux 一、Linux的概述: Linux是基于Unix的,Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机…

前端学习教程-SVG描边属性

前端学习教程-SVG描边属性,SVG提供了大量的笔画属性,实现各种各样的描边效果。我们来介绍一下: stroke:笔画属性, stroke-width:笔画宽度属性, stroke-linecap:笔画线帽属性&…

一文读懂如何使用PyCharm为飞桨提PR

本文以使用PyCharm进行飞桨中文文档修复为例,详细介绍了如何给飞桨提交PR(Pull Request)。 背景介绍 关于飞桨框架 飞桨框架是一个开源深度学习框架,源代码公开在GitHub上的PaddlePaddle中。该目录下包括飞桨核心框架代码库Pa…

51单片机——IO拓展(串转并)-74HC595 小白详解

74HC595 芯片介绍 74HC595 是一个 8 位串行输入、并行输出的位移缓存器,其中并行输出为三 态输出(即高电平、低电平和高阻抗)。芯片管脚及功能说明如下:图1 上面两张都是 74HC595 芯片管脚图,细心的朋友就会发现左侧的…

python+django在线考试系统39n99

目 录 目 录 III 第一章 概述 1 1.1 研究背景 1 1.2 开发意义 1 1.3 研究现状 1 1.4 研究内容 2 1.5 论文结构 2 第二章 开发技术介绍 1 第三章 系统分析 1 3.1 可行性分析 1 3.1.1 技术可行性 1 3.1.2 操作可行性 1 3.1.3 经济可行性 …

STM32频率测量

频率测量是个最基本的且常见的工业需求. 但是这种简单的需求却不是那么的好实现. 总体来看, 目前的单片机还是有很大的改进空间. 很少有频率测量能够覆盖所有的频率范围. 而使用 STM32F103 性能有限. 根据待测频率, 我分成低中高, 三个阶段. 分别对应着3种不同的测量方法. 低频…

springboot 协同办公OA管理系统源码带文字安装教程【免费分享】

Java协同办公OA管理系统源码带文字安装教程 文末获取源码! 框架:springboot freemark jpa mybatis mysql 环境:jdk8 mysql5.7 IntelliJ IDEA maven nginx 宝塔面板 这是一套OA办公系统,使用Maven作项目管理,基…

NETCAD GIS快速而简单的搜索引擎

NETCAD GIS快速而简单的搜索引擎 NETCAD GIS是一种支持国际标准的CAD和GIS软件,旨在为用户设计和使用地理信息系统。它还提供了CAD、GIS和光栅与未来的强大连接。 该程序也是一个快速而简单的搜索引擎,只能通过向查看器键入几个单词来访问,并…

嵌入式开发学习之--中断应用概览

文章目录前言一、什么是NVIC1.1NVIC 简介1.2 NVIC 寄存器简介二、中断优先级2.1优先级定义2.2优先级分组三、中断编程总结前言 中断是系统逻辑十分常用的,学好中断,以及中断优先级的合理配置,才能使自己的项目更加稳定。 提示:以…

rdd 相关信息整理

RDD 是什么? 官网描述 A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable, partitioned collection of elements that can be operated on in parallelRDD 是三个单词的首字母缩写,它表示弹性分布式数…

火爆全网的ChatGPT上手体验,文尾免费送账号!

文章目录1. ChatGPT公开信息2. ChatGPT上手体验3. ChatGPT目前趋势4. 福利派送1. ChatGPT公开信息 近期关于网路上对 ChatGPT(OpenAI发布的一款人工智能对话引擎)的讨论比较多。官方对ChatGPT的定义如下: We’ve trained a model called Cha…

[Linux打怪升级之路]-文件操作

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、认识操…

python -- PyQt5(designer)中文详细教程(七)控件2

控件2 本章我们继续介绍PyQt5控件。这次的有 QPixmap , QLineEdit , QSplitter ,和 QComboBox 。 图片 QPixmap 是处理图⽚的组件。本例中,我们使用 QPixmap 在窗⼜⾥显示⼀张图片。 from PyQt5.QtWidgets import (QWidget, QH…

PLC远程监控助力食品废水处理智能化管理

食品加工行业是用水大户,因其原料广泛、成品丰富,中间需要多种不同的加工工艺,因此排放的废水差异很大,废水量也不一样,对污水处理厂提出不同的要求。为了保证污水处理工作的稳定进行,保证视频废水的净化效…

Matplotlib入门[06]——figures,subplots,axes和ticks对象

Matplotlib入门[06]——figures,subplots,axes和ticks对象 参考: https://ailearning.apachecn.org/Matplotlib官网matplotlib xticks yticks import matplotlib.pyplot as pltfigures,axes和ticks的关系 这些对象的关系可以用下图表示&…