Python实现FA萤火虫优化算法优化支持向量机分类模型(SVC算法)项目实战

2023-11-14

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

1.项目背景

萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , 作为最新的群智能优化算法之一,该算法具有更好的收敛速度和收敛精度,且易于工程实现等优点。

本项目通过FA萤火虫优化算法寻找最优的参数值来优化支持向量机分类模型。

2.数据获取

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

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

3.数据预处理

3.1 用Pandas工具查看数据

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

关键代码:

 

3.2数据缺失查看

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

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

关键代码:

 

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%测试集进行划分,关键代码如下:

6.构建FA萤火虫优化算法优化支持向量机分类模型

主要使用FA萤火虫优化算法优化SVC算法,用于目标分类。

6.1 算法介绍

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

(1)算法原理:

在FA中,萤火虫发出光亮的主要目的是作为一个信号系统,以吸引其他的萤火虫个体,其假设为:

1) 萤火虫不分性别,它将会被吸引到所有其他比它更亮的萤火虫那去;

2) 萤火虫的吸引力和亮度成正比,对于任何两只萤火虫,其中一只会向着比它更亮的另一只移动,然而,亮度是随着距离的增加而减少的;

3) 如果没有找到一个比给定的萤火虫更亮,它会随机移动 。

如上所述,萤火虫算法包含两个要素,即亮度和吸引度。亮度体现了萤火虫所处位置的优劣并决定其移动方向,吸引度决定了萤火虫移动的距离,通过亮度和吸引度的不断更新,从而实现目标优化。从数学角度对萤火虫算法的主要参数进行如下描述 :

(1)萤火虫的相对荧光亮度为: 

其中,I0 为萤火虫的最大萤光亮度,与目标函数值相关,目标函数值越优自身亮度越高;γ为光强吸收系数,荧光会随着距离的增加和传播媒介的吸收逐渐减弱; ri,j 为萤火虫i与j之间的空间距离 。

(2)萤火虫的吸引度为:

其中,β0 为最大吸引度; γ为光强吸收系数; ri,j 为萤火虫i与j之间的空间距离。

(3)萤火虫i被吸引向萤火虫j移动的位置更新公式如式(3)所示:

其中,xixj 为萤火虫i和j所处的空间位置;α∈[0,1] 为步长因子;rand为[0,1]上服从均匀分布的随机数。

算法步骤如下

(1)初始化萤火虫算法参数。

(2)计算各萤火虫的亮度并排序得到亮度最大的萤火虫位置。

(3)判断迭代是否结束:判断是否达到最大迭代次数 T ,达到则转(4),否则转(5)。

(4)输出亮度最大的萤火虫位置及其亮度。

(5)更新萤火虫位置:根据式(3)更新萤火虫的位置,对处在最佳位置的萤火虫进行随机扰动,搜索次数增加1 ,转(2),进行下一次搜索。

6.2 FA萤火虫优化算法寻找最优参数值

关键代码:

迭代过程数据(部分截图):

 最优参数:

6.3 最优参数值构建模型

7.模型评估

7.1评估指标及结果

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

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

关键代码如下:

7.2 查看是否过拟合

从上图可以看出,训练集和测试集分值相当,无过拟合现象。

7.3 分类报告

从上图可以看出,分类为0的F1分值为0.87;分类为1的F1分值为0.88。 

7.4 混淆矩阵

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

8.结论与展望

综上所述,本项目采用了FA萤火虫优化算法寻找支持向量机SVC算法的最优参数值来构建分类模型,最终证明了我们提出的模型效果良好。此模型可用于日常产品的预测。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python实现FA萤火虫优化算法优化支持向量机分类模型(SVC算法)项目实战 的相关文章

  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • import matplotlib.pyplot 给出 AttributeError: 'NoneType' 对象没有属性 'is_interactive'

    我尝试在 Pycharm 控制台中导入 matplotlib pyplt import matplotlib pyplot as plt 然后作为回报我得到 Traceback most recent call last File D Pr
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street

随机推荐

  • Kotlin Coroutines Flow 系列(一) Flow 基本使用

    一 Kotlin Flow 介绍 Flow 库是在 Kotlin Coroutines 1 3 2 发布之后新增的库 官方文档给予了一句话简单的介绍 Flow cold asynchronous stream with flow build
  • C# socket异步通信服务器和客户端

    本文章向大家介绍C socket异步通信服务器和客户端 主要包括C socket异步通信服务器和客户端使用实例 应用技巧 基本知识点总结和需要注意事项 具有一定的参考价值 需要的朋友可以参考一下 服务器代码 只要客户端连接进来就会接收到Se
  • Qt之QTableView 保持滚动条自动滚动到底部

    在使用QTableView添加数据时 当数据量超出显示范围时会自动的打开滚动条 如果设置了在需要时打开滚动条属性 而默认的是滚动条一直是保持在最顶部 但是有些时候我们添加数据时是需要查看添加的最新结果的 所以一般都会把滚动条滚动到最新数据那
  • 【scrapy】scrapy爬取数据指南

    scrapy是爬虫界常用的基于Python爬虫框架 但是网上找了很多这类的文章 发现有多处错误 故为了让刚想尝试爬虫的蜘蛛们少走点坑 故把最新的方法奉上 在此之前 请先更新你的pip版本 并安装scrapy pymysql pip inst
  • kernelbase.dll崩溃的处理_kernelbase.dll故障教程

    kernelbase dll是存放在windows系统下的一个非常重要的dll文件 DLL英文全称Dynamic Link Library 中文意思是 动态链接库 DLL是一个作为共享函数库的可执行文件 它使进程可以调用不属于本身可执行代码
  • java 代理模式

    1 静态代理 1 1 代码实现 接口 interface Hello String sayHello String str 实现 class HelloImp implements Hello Override public String
  • 对象常用的方法

    思维导图 对象中常用的方法 Object prototype 1 hasOwnProperty 方法会返回一个布尔值 指示对象自身属性中是否具有指定的属性 也就是 是否有指定的键 检测是否为私有属性 即使属性的值是 null 或 undef
  • (五)redis常用命令之list

    概述 列表类型用来存储多个有序的字符串 列表中的每个字符串就是一个元素 一个列表最多可以存储2 32 1个元素 redis的列表结构操作起来非常灵活 应用场景非常广 lpush命令 从列表左边插入多个元素 格式 lpush key valu
  • 使用dockerfile发布go项目

    docker安装 下载docker yum install docker 设置docker随系统启动 chkconfig docker on 启动docker服务 service docker start 启动后查看docker状态 sys
  • pandas Cannot interpolate with all object-dtype columns

    pandas 不能使用所有的 object 类型的列进行插值 这意味着在使用 pandas 的插值函数 例如 interpolate 时 所有的列都必须是数值类型的 如果其中有一列是 object 类型的 则会抛出异常 要解决这个问题 你需
  • 单列模式--Singleton with Go

    package main import fmt sync Singleton 单例对象的类必须保证只有一个实例存在 全局有唯一接口访问 1 懒汉模式 指全局的单例实例在第一次被使用是构建 缺点 非线程安全 type singleton st
  • 软件测试必备的Linux知识(一)

    1 Linux 概述 1 1 测试人员为什么学习linux 对于软件测试人员来说 我们测试的任何产品都是基于操作系统 比如我们每天都在使用的QQ软件 它有windows ios Android Mac OS等版本 需要把QQ安装在各个平台上
  • 虚拟地址,虚拟地址空间, 交换分区

    1 虚拟内存是内存管理的一种方式 它在磁盘上划分出一块空间由操作系统管理 当物理内存耗尽是充当物理内存来使用 它将多个物理内存碎片和部分磁盘空间重定义为连续的地址空间 以此让程序认为自己拥有连续可用的内存 当物理内存不足时 操作系统会将处于
  • 从零开始的ESP8266探索(11)-定时任务调度器Ticker使用演示

    文章目录 目的 使用演示 基本使用1 基本使用2 动态设置和参数传递 停止和重启任务 注意事项 总结 目的 Arduino for esp8266属于无操作系统环境 对于开发多任务的复杂应用还是比较麻烦的 所以这里就提供了一个近似于操作系统
  • bugku No one knows regex better than me

    进入环境是一串php代码 代码审计 考的是正则
  • 感知器的数学表达和训练算法

    目录 一 感知器模型 二 两种训练法则 1 感知器训练法则 2 delta法则 三 小结 1 标准梯度下降算法与随机梯度下降算法的差异 2 有阈值的感知机算法和无阈值的感知机算法的差异 在人工神经网络简介一节中 图二中的ANN系统的每一个单
  • Numpy常用的数据结构

    numpy安装 pip install numpy numpy底层是使用C语言来实现运算的效果非常高 数据清洗的意义 现实生活中 数据并非完美 需要进行清洗才能进行后面的数据分析 数据清洗是整个数据分析项目最消耗时间的一步 数据的质量最终决
  • Java回调函数的理解

    2008 07 21 20 34 所谓回调 就是客户程序C调用服务程序S中的某个函数A 然后S又在某个时候反过来调用C中的某个函数B 对于C来说 这个B便叫做回调函数 例如Win32下的窗口过程函数就是一个典型的回调函数 一般说来 C不会自
  • DC/DC:闭环控制的升压(Boost)变换电路原理设计及实验仿真

    与降压 Buck 变换器类似 升压Boost变换电路也可以构建电压闭环反馈控制的闭环Boost变换器 Boost功率电路图如图所示 具体电路元器件参数计算可参考前期文章 直流电路中升压电路 Boost 的设计原理 参数计算及MATLAB仿真
  • Python实现FA萤火虫优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 萤火虫算法 Fire fly algorithm FA 由剑桥大学Yang于2009年提出 作为最新的群智能