Python实现哈里斯鹰优化算法(HHO)优化支持向量机回归模型(SVR算法)项目实战

news2024/11/25 12:35:31

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



1.项目背景


       2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO),该算法有较强的全局搜索能力,并且需要调节的参数较少的优点。


      本项目通过HHO哈里斯鹰优化算法寻找最优的参数值来优化支持向量机回归模型。


2.数据获取


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


编号 

变量名称

描述

1

x1

2

x2

3

x3

4

x4

5

x5

6

x6

7

x7

8

x8

9

x9

10

y

因变量


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


3.数据预处理

3.1 用Pandas工具查看数据


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


关键代码:

3.2数据缺失查看


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



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

关键代码:  


 

3.3数据描述性统计


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


关键代码如下:    

4.探索性数据分析

4.1 y变量直方图


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



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


4.2 相关性分析

 


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


5.特征工程

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


关键代码如下:


5.2 数据集拆分


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


6.构建HHO哈里斯鹰优化算法优化支持向量机回归模型


主要使用HHO哈里斯鹰优化算法优化SVR算法,用于目标回归。


6.1 算法介绍


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

算法原理:


哈里斯鹰随机栖息在某个地方,通过2种策略找到猎物:


 


      其中,X(t)、X(t+1)分别为分别为当前和下一次迭代式时个体的位置,t为迭代次数,Xrand(t)  为随机选出的个体位置,Xrabbit(t)  为猎物位置,即拥有最优适应度的个体位置,r1 , r2 ,r3 ,r4 ,q都是[0,1]之间的随机数。q用来随机选择要采用的策略,Xm(t)  为个体平均位置,表达式为:



其中,Xk(t)  为种群中第k个个体的位置,M为种群规模。


搜索与开发的转换


HHO 算法根据猎物的逃逸能量在搜索和不同的开发行为之间转换,逃逸能量定义为:



       其中,E0 是猎物的初始能量,为 [-1,1] 之间的随机数,每次迭代时自动更新,t为迭代次数,T 为最大迭代次数。当|E|≥1 时进入搜索阶段,|E|<1当时进入开发阶段。


开发阶段


       定义r为[0,1] 之间的随机数,用于选择不同的开发策略。当0.5 ≤ |E| < 1 且r ≥ 0.5 时,采取软围攻策略进行位置更新:


 


   其中,ΔX(t) = Xrabbit(t)  -X(t)表示猎物位置与个体当前位置的差值,J为 [0, 2] 之间的随机数。


当|E|<0.5且r ≥ 0.5 时采取硬围攻策略进行位置更新:



当0.5 ≤ |E| < 1 且r < 0.5时,采取渐近式快速俯冲的软包围策略进行位置更新:



其中,f()为适应度函数,S为 2 维随机向量,元素为[0,1] 之间的随机数,LF() 是莱维飞行的数学表达式。


当|E|<0.5且r < 0.5 时,采取渐近式快速俯冲的硬包围策略进行位置更新:



算法步骤


步骤 1:种群初始化。根据搜索空间每一维的上界和下界,初始化每个个体。

步骤 2:计算初始适应度。将适应度最优的个体位置设为当前猎物位置。

步骤 3:位置更新。先通过更新猎物逃逸能量,然后根据逃逸能量和生成的随机数执行搜索或开发行为中对应的位置更新策略。

步骤 4:计算适应度。计算位置更新后的个体适应度,并与猎物适应度值进行比较,若位置更新后的个体适应度值优于猎物,则以适应度

值更优的个体位置作为新的猎物位置。

重复步骤 3 和步骤 4,当算法迭代次数达到最大迭代次数时。输出当前猎物位置作为目标的估计位置。


6.2 HHO哈里斯鹰优化算法寻找最优参数值

关键代码:


迭代过程:



 最优参数:

6.3 最优参数值构建模型 

编号

模型名称

参数

1

支持向量机回归模型

C= 1.0

2

gamma= 0.31188138371137797

7.模型评估

7.1 评估指标及结果


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


模型名称

指标名称

指标值

测试集

支持向量机回归模型

  R方

1.0

均方误差

0.3751

可解释方差值

1.0

平均绝对误差

0.4897


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

关键代码如下:


7.2 真实值与预测值对比图 


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


  

8.结论与展望


       综上所述,本文采用了HHO哈里斯鹰优化算法寻找支持向量机SVR算法的最优参数值来构建回归模型,最终证明了我们提出的模型效果良好。此模型可用于日常产品的预测。 


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

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

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

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

相关文章

目标检测——day66 Scaled-YOLOv4: Scaling Cross Stage Partial Network

Scaled-Yolov4:可伸缩跨级部分网络 Scaled-YOLOv41. Introduction2. Related work2.1. Real-time object detection2.2. Model scaling&#xff08;模型缩放&#xff09;3. Principles of model scaling4. Scaled-YOLOv44.1. CSP-ized YOLOv44.2. YOLOv4-tiny4.3. YOLOv4-large…

上海亚商投顾:沪指缩量小幅调整 半导体与旅游股领涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪沪指今日缩量小幅调整&#xff0c;创业板指稍显强势&#xff0c;多数时间红盘运行&#xff0c;科创50指数涨超1%。半…

springMVC讲解(上)

SpringMvc 1&#xff0c;简介 springmvc是spring的一个后续产品&#xff0c;是spring的一个子项目&#xff0c;是spring为表示层所开发的一整套完备的解决方案&#xff0c;在表示层框架经历了struct、webWork、struct2等诸多产品的历代更迭之后&#xff0c;目前业界普遍选择了…

JAVA就业课程,面试题大全

面试整体流程1.1 简单的自我介绍我是xxxx,工作xxx年.我先后在xxxx公司、yyyy公司工作。先后做个xxxx项目、yyyy项目。1.2 你简单介绍一下xxxx项目为了解决xxxx问题&#xff0c;开发了一套xxxx系统&#xff0c;该系统主要有那些部分组成。简单介绍项目的整体架构。参与某个模块的…

【Python学习】输入和输出

前言 往期文章 【Python学习】列表和元组 【Python学习】字典和集合 【Python学习】条件和循环 在很多时候&#xff0c;你会想要让你的程序与用户&#xff08;可能是你自己&#xff09;交互。你会从用户那里得到输入&#xff0c;然后打印一些结果。我们可以使用iinput和pr…

MATLAB趣味绘图-内接正六边形旋转

MATLAB趣味绘图-内接正六边形旋转 观察一下内部的正六边形大概在外部的正六边形边的四等分点的位置&#xff0c;通过数学平面几何知识可得边和角度的迭代关系式为&#xff1a; an134an−1θnθn−1arctan⁡36a_n \frac{\sqrt{13}}{4} a_{n-1} \\ \theta_n \theta_{n-1}\arcta…

金融行业数据库场景下,SmartX 超融合表现如何|性能验证与落地实践

在金融行业&#xff0c;数据库是一项至关重要的 IT 基础设施。作为交易和数据的主要载体&#xff0c;数据库往往需要在短时间内处理大量的业务数据&#xff0c;其可靠性、稳定性和性能将直接影响业务系统的运行状态。而在进行数据库基础架构选型时&#xff0c;一些客户对于超融…

C++学习笔记——类和对象

1.面向对象的三大特性&#xff1a;封装、继承、多态 2.对象有其属性和行为 3.具有相同性质的对象&#xff0c;可被抽象为类 1.封装 1.封装是C面向对象三大特性之一 2.封装的意义&#xff1a; &#xff08;1&#xff09;将属性&#xff08;变量&#xff09;和行为&#xff…

python学习 --- 字典基础

目录 一、什么是字典&#xff1f; 1、字典示意图-无序说明 2、字典实现原理 二、字典的创建 1、使用花括号 2、使用内置函数dict() 三、字典常用操作 1、字典中元素的获取 2、key的判断&#xff08;存在与否&#xff09; 3、字典元素的删除 4、字典元素的新增 5、获…

计讯物联智慧水务解决方案:用“智水”捍卫生命之泉

项目背景 水是生命的源泉&#xff0c;是城市的灵魂&#xff0c;是农业的命脉&#xff0c;是工业的基石。2022年以来&#xff0c;基于国家政策的引导、科技革新的驱动与供排水需求增长&#xff0c;智慧水务的发展突飞猛进&#xff0c;从信息化到数字化&#xff0c;再到智能化&a…

若依 ruoyi vue el-switch 列表开关状态显示有误 全部关闭的问题

后台使用int类型传状态status的值但是前端列表展示的开关状态是未开启&#xff0c;实际上&#xff0c;后台传的都是开启的状态结果应该是这样确定后台传的status值 在 el-switch 标签中是否使用了正确的值判断&#xff0c;比如 后台用的是字符串、布尔 或者是 数值类型&#xf…

android判断文件是否存在跳转不同activity

android studio版本&#xff1a;2021.2.1Patch 2例程名称&#xff1a;ActivityJump完成日期&#xff1a;2023.1.17一直在完善一个小东西&#xff0c;也是不断的在学习。之前做的那个桌面日历天气&#xff08;老旧安卓手机发挥余热做桌面时钟摆件使用&#xff09;&#xff0c;有…

java 数列排序

试题 基础练习 数列排序提交此题 评测记录 资源限制内存限制&#xff1a;512.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s问题描述给定一个长度为n的数列&#xff0c;将这个数列按从小到大的顺序排列。1<n<200输入格式…

【渗透测试】信息搜集总结

前言零零散散的发布过很多文章了&#xff0c;但是也没有完整的总结一下&#xff0c;今天就从信息搜集入手&#xff0c;系统的总结一下。一方面可以巩固自己的基础&#xff0c;作为自己的字典随用随查&#xff0c;另一方面希望对大家的学习和工作起到帮助作用。按照这个过程基本…

求两点间的距离-C语言实现

任务描述 已知两点A(x1,y1),B(x2,y2),求其间的距离。 输入 一行四个浮点数,x1,y1,x2,y2 输出 两点间的距离,要求不要输出多余的零。 本关知识 两点间的距离公式 pow函数 在C语言中,提供了用于求x的y次幂的函数,函数原型为: double pow(double x, double y…

啊啊啊小红书爆款标题技巧被我找到了!

我通过平日里对小红书的了解和积累&#xff0c;再加上这一阵子对小红书爆款笔记的研究&#xff0c;终于在这么多笔记当中发现了小红书爆款笔记标题的撰写规律&#xff01; 我们在撰写小红书的时候恨不得篇篇都是爆文&#xff0c;那么今天就来讲一下小红书那些爆款笔记标题的撰写…

75、DiffRF: Rendering-Guided 3D Radiance Field Diffusion

简介 主页&#xff1a;https://sirwyver.github.io/DiffRF/ 对应用于三维亮度场的概率扩散过程进行去噪。在3D监控和体积渲染的指导下&#xff0c;模型能够无条件地合成高保真3D资产(左)。 蒙面补全的新应用(右)&#xff0c;即从不完整的对象中恢复形状和外观的任务(在右上方…

超实用的百度百科人物词条创建攻略分享,纯干货

自媒体时代&#xff0c;人们越来越有IP意识&#xff0c;打造个人IP就是在为自己创造更多价值。 个人IP的打造是一个提升知名度的过程&#xff0c;怎么才能快速提升&#xff1f;创建一个百度百科词条不失为一个好的选择。 现在用户有问题就会在百度上搜索一下&#xff0c;当用户…

java实现模拟调用接口

本文总结如何用fiddler和postman调试接口&#xff0c;并用java模拟调用接口。fiddler用法当页面点击事件后&#xff0c;在fiddler出现一个请求&#xff0c;单击左侧请求&#xff0c;在右侧的raw的tab标签&#xff0c;出现该请求的详细内容。其实一个请求需要两类参数&#xff0…

Linux常用命令——umask命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) umask 用来设置限制新建文件权限的掩码 补充说明 umask命令用来设置限制新建文件权限的掩码。当新文件被创建时&#xff0c;其最初的权限由文件创建掩码决定。用户每次注册进入系统时&#xff0c;umask命令都被…