Python实现ACO蚁群优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

news2024/12/24 8:21:50

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




1.项目背景

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

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

2.数据获取

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

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

 

3.数据预处理

3.1 用Pandas工具查看数据

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

关键代码:

 

3.2数据缺失查看

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

从上图可以看到,总共有11个变量,数据中无缺失值,共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蚁群优化算法优化随机森林分类模型

主要使用ACO蚁群优化算法优化随机森林分类算法,用于目标分类。

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

关键代码:

最优参数:

 6.2 最优参数值构建模型

7.模型评估

7.1 评估指标及结果

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

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

关键代码如下:

7.2 分类报告

 

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

7.3 混淆矩阵

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

8.结论与展望

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

 

# ====定义惩罚项函数======
def calc_e(X):
    """计算蚂蚁的惩罚项,X 的维度是 size * 2 """
    ee = 0
    """计算第一个约束的惩罚项"""
    e1 = X[0] + X[1] - 6
    ee += max(0, e1)
    """计算第二个约束的惩罚项"""
    e2 = 3 * X[0] - 2 * X[1] - 5
    ee += 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:  # 判断取值
        max_depth = int(abs(parent[0])) + 2  # 赋值
    else:
        max_depth = int(abs(parent[0])) + 5  # 赋值

    if abs(parent[1]) > 0:  # 判断取值
        min_samples_leaf = int(abs(parent[1])) + 1  # 赋值
    else:
        min_samples_leaf = int(abs(parent[1])) + 5  # 赋值

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

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


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

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

相关文章

伟大的公司只需要十一人

在生成式AI、云计算等技术逐渐抹平大企业与中小企业之间的技术、成本差距后,各企业真正比拼的,只剩下人才、创意与执行力。 目前,随着AI技术的快速迭代,各种基于AIGC(人工智能内容生成)技术的产品不断涌向…

pytest自动化测试框架和unittest自动化测试框架的区别

目录 Unittest vs Pytest 用例编写规则 用例前置与后置条件 断言 测试报告 失败重跑机制 参数化 用例分类执行 实例演示 前后置区别 参数化区别 总结 python的单元测试框架经常使用的是unittest,因为它比较基础,并且可以进行二次开发&#xf…

分布式事务的21种武器 - 3

在分布式系统中,事务的处理分布在不同组件、服务中,因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式,并分析其实现原理和优缺点,在面对具体分布式事务问题时,可以选择合适的模式…

时间序列预测 | Matlab基于最小二乘支持向量机LSSVM时间序列预测,LSSVM时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 基于最小二乘支持向量机LSSVM多维时间序列预测LSSVM多变量时间序列预测,matlab代码 评价指标包括:MAPE、MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %----------------…

如何落地中台架构

大家好,我是易安!今天我分享下如何落地中台架构。 前台和后台 讲中台之前,我们先来理解下前台和后台,这样,你才能更清楚中台的定位。 前台 比较好理解,指的是 面向C端的应用,比如像微信、淘宝这…

数字音频接口I2S-PDM-TDM-PCM

主要分类:模拟、数字(I2S、PCM、PDM、TDM) 模拟音频,就是功放输出的,驱动音箱和喇叭的音频。模拟麦克风采样回来的数据也是模拟音频。通常会有单端或差分两种信号。 数字音频,不能直接驱动喇叭&#xff0…

混剪功能开发——抖音账号矩阵系统源码解析

抖音是目前国内非常流行的短视频平台之一,用户数量庞大,更是吸引了许多企业和个人在上面开设账号,通过发布内容来进行流量变现。但是,在一个账号发布内容的同时,管理员又需要同时关注多个账号,对账号的管理…

vs code 配置net 开发环境.并搭配vs相似的解决方案面板

由于在本人在Linux22.04下安装Rider 一直处于卡死系统状态.不得不使用该方式 以下为安装步骤 安装 VS code https://code.visualstudio.com/Download 安装 mono https://www.mono-project.com/download/stable/#download-lin 安装 NET SDK https://learn.microsoft.com/zh…

目录层次结构中区分不同功能的RPM包,同时只有一份共享的repodata

使用本地的yum源有几个潜在的好处: 更快的下载速度: 本地yum源通常位于本地网络上,因此可以通过局域网快速获取软件包,而不需要依赖互联网连接。这样可以提供更快的下载速度,节省时间和带宽消耗。 离线访问&#xff1…

实验12 卷积神经网络

1. 实验目的 ①掌握深度学习的基本原理; ②能够使用TensorFlow实现卷积神经网络,完成图像识别任务。 2. 实验内容 ①设计卷积神经网络模型,实现对Mnist手写数字数据集的识别,并以可视化的形式输出模型训练的过程和结果&#xf…

Qt--事件过滤器

写在前面 Qt中的事件过滤器(Event Filter)是一种机制,用于拦截并处理特定类型的事件。但和Qt–事件分发器一文中提到的事件分发器有些区别。 事件过滤器的工作原理 这里同样使用一个简单的示例图帮助理解: 这里假设有一个Widget父窗口,该…

服务间的通信(RestTemplate +Ribbon+Feign):

服务之间的依赖: 其实根据上图我们发现会员管理服务其实是依赖于我们图书的这个服务的,那么为什么要依赖于图书这个服务呢,因为会员服务想要进行借阅图书的时候,必须要对图书模块的图书的库存等做校验才可以,所以membe…

在 Kubernetes 上实现高速应用交付

原文作者:NGINX 原文链接:在 Kubernetes 上实现高速应用交付 转载来源:NGINX 官方网站 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 运行于 Kubernetes 之上的应用需要一个经过验证的生产级应用交付解决方案。NGINX Ingress Cont…

边缘计算AI硬件智能分析网关V1版的接入流程与使用步骤

我们的AI边缘计算网关硬件——智能分析网关目前有两个版本:V1版与V2版,两个版本都能实现对监控视频的智能识别和分析,支持抓拍、记录、告警等,在AI算法的种类上和视频接入上,两个版本存在些许的区别。V1的基础算法有人…

【ChatGPT】《吴恩达 x OpenAI Prompt Engineering教程中文笔记》- 知识点目录

《吴恩达 x OpenAI Prompt Engineering教程中文笔记》 🐳 在开始编写提示词之前的一些设置 不同的temperature会影响模型的理性和想象力,这里告诉我们: Low:例如GPT4,更加适合确定性的问答任务Hight:例如…

non-protected broadcast场景分析及解决

non-protected broadcast场景分析及解决 在两个app之间互相送消息使用BroadcastReceiver,有时在运行过程中在logcat工具中会发现大片的飘红消息。 要消除这些错误信息,需要在广播的 Sender 和 Receiver 做部分的修改。 错误信息分析 由于 发送端 的 M…

忆享聚焦|ChatGPT、AI、网络数字、游戏……近期热点资讯一览

“忆享聚焦”栏目第十四期来啦!本栏目汇集近期互联网最新资讯,聚焦前沿科技,关注行业发展动态,筛选高质量讯息,拓宽用户视野,让您以最低的时间成本获取最有价值的行业资讯。 目录 行业资讯 1.科技部部长王志…

上海亚商投顾:沪指跌1.28%失守年线 大金融板块集体走弱

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日继续调整,沪指超1%逼近3200点,尾盘失守年线,创业板指较为抗跌。大…

你收藏了那些实用工具类网站?

今天来给大家分享几个众多网友们推荐的,宝藏工具类网站 uIGradients https://uigradients.com/#Flickr 专业的渐变色配色工具网站,配色什么的非常全,也可以按照自己的想法来选择搭配,还能直接获得对应渐变配色的CSS代码&#xff…

水表自动抄表系统有什么功能

水表自动抄表系统是一种新型的智能化管理系统,它可以自动采集水表的数据,并且实时上传到管理平台,实现了水表的实时监测和管理。该系统具有以下几个主要功能: 1.自动抄表功能 水表自动抄表系统可以实现自动采集水表的数据&#x…