Python实现ACO蚁群优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

2023-11-15

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



 


1.项目背景

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

本项目通过ACO蚁群优化算法寻找最优的参数值来优化LightGBM分类模型。

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.构建ACO蚁群优化算法优化LightGBM分类模型

主要使用ACO蚁群优化算法优化LightGBM分类算法,用于目标分类。

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

关键代码:

最优参数:

 6.2 最优参数值构建模型

7.模型评估

7.1 评估指标及结果

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

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

关键代码如下:

 7.2 分类报告

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

7.3 混淆矩阵

 

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

8.结论与展望

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

# =======定义目标函数=====
def calc_f(X):
    """计算粒子的的适应度值,也就是目标函数值 """
    A = 10
    pi = np.pi
    x = X[0]
    y = X[1]
    return 2 * A + x ** 2 - A * np.cos(2 * pi * x) + y ** 2 - A * np.cos(2 * pi * y)


# ******************************************************************************
 
# 本次机器学习项目实战所需的资料,项目资源如下:
 
# 项目说明:
 
# 链接: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:  # 判断取值
        n_estimators = int(abs(parent[0])) + 100  # 赋值

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

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


 

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

Python实现ACO蚁群优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战 的相关文章

  • 如何在 Windows 64 上安装 NumPy?

    NumPy 安装程序在注册表中找不到 python 路径 无法安装 需要 Python 2 5 版本 但在注册表中未找到该版本 OK 我必须修改注册表吗 我已经修改了 PATH 以指向Python25安装目录 我可以检查一下您使用的是什么安
  • python 中的并行处理

    在 python 2 7 中进行并行处理的简单代码是什么 我在网上找到的所有示例都很复杂 并且包含不必要的代码 我该如何做一个简单的强力整数分解程序 在每个核心 4 上分解 1 个整数 我真正的程序可能只需要2个核心 并且需要共享信息 我知
  • opencv水印周围的轮廓

    我想在图像中的水印周围画一个框 我已经提取了水印并找到了轮廓 但是 不会在水印周围绘制轮廓 轮廓是在我的整个图像上绘制的 请帮我提供正确的代码 轮廓坐标的输出为 array 0 0 0 634 450 634 450 0 dtype int
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • Python3.0 - 标记化和取消标记化

    我正在使用类似于以下简化脚本的内容来解析较大文件中的 python 片段 import io import tokenize src foo bar src bytes src encode src io BytesIO src src l
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • Python新式类和__subclasses__函数

    有人可以向我解释为什么这有效 在 Python 2 5 中 class Foo object pass class Bar Foo pass print Foo subclasses 但这不是 class Foo pass class Ba
  • .pyx 文件出现未知文件类型错误

    我正在尝试构建一个包含 pyx 文件的 Python 包 pyregion 但在构建过程中出现错误 检查以下输出 python setup py build running build running build py creating b
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • 使用 Pandas 计算 delta 列

    我有一个数据框 如下所示 Name Variable Field A 2 3 412 A 2 9 861 A 3 5 1703 B 3 5 1731 A 4 0 2609 B 4 0 2539 A 4 6 2821 B 4 6 2779 A
  • Jython 和 SAX 解析器:允许的实体不超过 64000 个?

    我做了一个简单的测试xml saxJython 中的解析器在处理大型 XML 文件 800 MB 时遇到以下错误 Traceback most recent call last File src project xmltools py li
  • 使用 Keras np_utils.to_categorical 的问题

    我正在尝试将整数的 one hot 向量数组制作为 keras 将能够使用的 one hot 向量数组来拟合我的模型 这是代码的相关部分 Y train np hstack np asarray dataframe output vecto
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • Elasticsearch 通过搜索返回拼音标记

    我用语音分析插件 https www elastic co guide en elasticsearch plugins current analysis phonetic html由于语音转换 从弹性搜索中进行一些字符串匹配 我的问题是
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • TKinter 中的禁用/启用按钮

    我正在尝试制作一个像开关一样的按钮 所以如果我单击禁用按钮 它将禁用 按钮 有效 如果我再次按下它 它将再次启用它 我尝试了 if else 之类的东西 但没有成功 这是一个例子 from tkinter import fenster Tk
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此

随机推荐

  • 权衡问题---学习了微服务各大常用组件的一点思考

    1 没有什么技术可以完全通用 只要深度使用一定需要从业务出发对技术进行权衡 从几个例子出发 1 ES的分片机制天生支持分布式 同时也带来了分布式了弊端 排序和算分问题 搜索的场景需要严格的定制化 通过对mapping的修改可以支持算分的调整
  • vtk9.2.6编译记录

    1 cmake gui打开 搜索qt相关 将默认选项改成yes 重新configure之后 会出现新的选项 比如Qt目录 确认没有问题之后 Generate生成sln解决方案后 用vs编译 2 配置CMAKE INSTALL PREFIX
  • Git 将已有项目上传新建仓库

    Git 将已有项目上传新建仓库 一 gitee或github创建空白仓库 记得保留下git链接 https gitee com huadeng863 git 二 在已有项目目录内删除已有git readme 如果有的话 将项目中的 git
  • buildroot 编译出错

    编译buildroot的时候出现如下错误 Incorrect selection of kernel headers expected 4 1 x got 4 0 x package pkg generic mk 228 recipe fo
  • phpstudy 8.1下载安装和简单使用教程

    phpstudy下载 去官网下载PHPStudy 选择自己电脑对应的系统版本 在首页导航选择windows版 弹出下拉框点击phpStudy 客户端 进入下载界面 点击下载 接着选择64位 然后就开始下载了 PHPStudy安装 解压下载好
  • stm32---用外部中断实现红外接收器

    一 红外遥控的原理 红外遥控是一种无线 非接触控制技术 具有抗干扰能力强 信息传 输可靠 功耗低 成本低 易实现等显著优点 被诸多电子设备特别是 家用电器广泛采用 并越来越多的应用到计算机系统中 红外遥控通信系统一般由红外发射装置和红外接收
  • 无意中发现的方法:一招让你的 IntelliJ Idea 飞起来

    一 引言 最近工作中使用到了 IntelliJ Idea 说实在的 不太熟悉这个 IDE 不知道为什么 对比 Eclipse 和 IntelliJ Idea 在我的电脑上 竟然是 IntelliJ Idea 比 Eclipse 运行的更卡一
  • python炫酷gui界面_如何炫酷的使用Python

    Python很酷 真的很酷 但是 我们中的很多人都是从不同的编程语言开始的 尽管我们确实很容易地掌握了Python 但是我们仍然不擅长以pythonic的方式做事 本文介绍了我几年来学到的一些技巧和相同的实际示例 希望你喜欢它 1 有用的键
  • android aidl出现无法import

    当采用eclipse 写aidl时出现couldn t find import for class 原因是你import的包没有在framework aidl里parcelable过 所以解决办法很简单 找到对应api level的fram
  • 软件开发十本书

    几年前 总结了 软件测试十本书 对从事软件质量验证和确认工作的基础知识进行简介 软件花钱最多 耗时最长 投入人力和精力最大的 是在开发过程 根据个人经验 推荐软件开发相关的十本书 供入门和进阶参考 坐等拍砖员 1 代码大全 软件开发世界的
  • Java 多线程同步:volatile 关键字

    多线程基础知识 Java 内存模型 Java 中的堆内存用来存储对象的实例 堆内存是被所有线程共享的运行时内存区域 因此 它存在可见性的问题 而局部变量 方法定义的参数则不会在线程之间共享 它们不会有内存可见性问题 也不受内存模型的影响 J
  • MySQL Cluster

    MySQL Cluster数据分布 分区 两阶段提交协议及事务资源 2013 12 11 15 00 28 分类 MySQL FROM http www zrwm com p 3210 Posted on 2013 年 3 月 8 日 by
  • https网络编程——openssl安装(两个软链接库libssl、libcrypto)、openssl命令行方式实现CA和证书、介绍SSH

    参考 openssl安装方式 Ubuntu下 地址 https qingmu blog csdn net article details 115454254 spm 1001 2014 3001 5502 目录 官方网站 1 解压 2 编译
  • stable diffusion webui安装与使用(官方超简单教程)

    预备依赖 下载miniconda 教程参考 https blog csdn net weixin 43828245 article details 124768518 安装git 参考教程 https blog csdn net weixi
  • js 实现多重罗盘转动

    引子 这几天一直在忙一个可滑动的转盘的demo 网上也有类似的例子 但是根据老板的需求来改他们的代码 还不如重新写个完全符合需求的插件 想法很美好 但是新手上路 效果链接文末 需求 image 这个demo给的非常简单 能转动的地方有三处
  • 方差、标准差、均方差、均方误差区别总结

    转载 http blog csdn net Leyvi Hsing article details 54022612 一 百度百科上方差是这样定义的 variance 是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量 概率论中方差
  • Flutter 重写原生App -- 02 基础知识 一路踩坑

    Pubspec Assist 插件 快速添加 pubspec yaml 的依赖 device info 0 4 0 3 可查看当前 链接的设备是 Ios Android 并且获得设备信息 Dart 语法 https dart dev gui
  • SVN配置

    1 SVN插件下载地址 http subclipse tigris org update 1 4 x http subclipse tigris org servlets ProjectDocumentList expandFolder 2
  • 【特征工程】特征选择与特征学习

    特征选择与特征学习 在机器学习的具体实践任务中 选择一组具有代表性的特征用于构建模型是非常重要的问题 特征选择通常选择与类别相关性强 且特征彼此间相关性弱的特征子集 具体特征选择算法通过定义合适的子集评价函数来体现 在现实世界中 数据通常是
  • Python实现ACO蚁群优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 蚁群优化算法 Ant Colony Optimization ACO 是一种源于大自然生物世界的新的仿生进化