• Python实现SSA智能麻雀搜索算法优化支持向量机分类模型(SVC算法)项目实战


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

    1.项目背景

    麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法,在2020年提出,主要是受麻雀的觅食行为和反捕食行为的启发。

    在麻雀觅食的过程中,分为发现者(探索者)和加入者(追随者),发现者在种群中负责寻找食物并为整个麻雀种群提供觅食区域和方向,而加入者则是利用发现者来获取食物。为了获得食物,麻雀通常可以采用发现者和加入者这两种行为策略进行觅食。种群中的个体会监视群体中其它个体的行为,并且该种群中的攻击者会与高摄取量的同伴争夺食物资源,以提高自己的捕食率。此外,当麻雀种群意识到危险时会做出反捕食行为。

    本项目通过SSA麻雀搜索算法优化支持向量机分类模型。

    2.数据获取

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

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

    3.数据预处理

    3.1 用Pandas工具查看数据

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

     关键代码:

    3.2数据缺失查看

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

    从上图可以看到,总共有8个变量,数据中无缺失值,共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.构建SSA麻雀搜索算法优化支持向量机分类模型

    主要使用SSA麻雀搜索算法优化SVC算法,用于目标分类。

    6.1 算法介绍

    说明:算法介绍来源于网络,供参考。

    在SSA中,具有较好适应度值的发现者在搜索过程中会优先获取食物。此外,因为发现者负责为整个麻雀种群寻找食物并为所有加入者提供觅食的方向。因此,发现者可以获得比加入者更大的觅食搜索范围。在每次迭代的过程中,发现者的位置更新描述如下:

     其中,t代表当前迭代数,itermax是一个常数,表示最大的迭代次数。Xij表示第i个麻雀在第j维中的位置信息。α∈(0,1]是一个随机数。R2(R2∈[0,1])和ST(ST∈[0.5,1])分别表示预警值和安全值。Q是服从正态分布的随机数。L表示一个1×d的矩阵,其中该矩阵内每个元素全部为1。当R2< ST 时,这意味着此时的觅食环境周围没有捕食者,发现者可以执行广泛的搜索操作。当R2 ≥ ST,这表示种群中的一些麻雀已经发现了捕食者,并向种群中其它麻雀发出了警报,此时所有麻雀都需要迅速飞到其它安全的地方进行觅食。

    加入者(追随者)的位置更新描述如下:

    其中,Xp是目前发现者所占据的最优位置,Xworst则表示当前全局最差的位置。A表示一个1×d的矩阵,其中每个元素随机赋值为1或-1,并且A+=AT(AAT)-1。当i >n/2时,这表明,适应度值较低的第i个加入者没有获得食物,处于十分饥饿的状态,此时需要飞往其它地方觅食,以获得更多的能量。

    当意识到危险时,麻雀种群会做出反捕食行为,其数学表达式如下:

     其中,其中Xbest是当前的全局最优位置。β作为步长控制参数,是服从均值为0,方差为1的正态分布的随机数。K∈[-1,1]是一个随机数,fi则是当前麻雀个体的适应度值。fgfw分别是当前全局最佳和最差的适应度值。ε是最小的常数,以避免分母出现零。

    为简单起见,当fi>fg表示此时的麻雀正处于种群的边缘,极其容易受到捕食者的攻击。fi=fg时,这表明处于种群中间的麻雀意识到了危险,需要靠近其它的麻雀以此尽量减少它们被捕食的风险。K表示麻雀移动的方向同时也是步长控制参数。

    6.2 支持向量机构建模型

    由于原始数据质量较好,直接应用支持向量机构建模型效果也很好。但是本项目的主要目的是应用SSA麻雀搜索算法优化模型。

    6.3 SSA麻雀搜索算法寻找最优参数值

    关键代码:

    每次迭代的过程数据和最优值:

    6.4 最优参数构建模型

    这里通过最优参数构建支持向量机分类模型。

    7.模型评估

    7.1评估指标及结果

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

    从上表可以看出,F1分值为0.9947,其中查全率有所提高,说明麻雀搜索算法优化的的模型效果较好。

    关键代码如下:

    7.2 查看是否过拟合

     

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

    7.3 分类报告

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

    7.4 混淆矩阵

     从上图可以看出,实际为0预测不为0的 有1个样本,整体预测准确率时非常高的。

    8.结论与展望

    综上所述,本文采用了SSA麻雀搜索算法寻找支持向量机SVC算法的最优参数值来构建分类模型,最终证明了我们提出的模型效果良好。此模型可用于日常产品的建模工作。

    1. # 本次机器学习项目实战所需的资料,项目资源如下:
    2. # 项目说明:
    3. # 链接:https://pan.baidu.com/s/1H05Wx9Jg119NH1O556m6Kw
    4. # 提取码:z496
    5. # 用Pandas工具查看数据
    6. print(data.head())
    7. # 数据缺失值统计
    8. print('****************************************')
    9. print(data.info())
    10. # 数据描述性统计分析
    11. print('****************************************')
    12. print(data.describe().round(4)) # 保留4位小数点
    13. import matplotlib.pyplot as plt
    14. # y变量柱状图
    15. plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
    16. plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
    17. # kind='bar' 绘制柱状图
    18. data['y'].value_counts().plot(kind='bar')
    19. plt.xlabel("y变量")
    20. plt.ylabel("数量")
    21. plt.title('y变量柱状图')
    22. plt.show()
  • 相关阅读:
    锁降级 ReentrantReadWriteLock
    线性代数学习笔记4-5:求解线性方程组
    抖音店铺列表接口h5
    软件系统设计
    C++面向对象程序设计题
    hashMap索引原理
    单调栈、单调队列
    从数硬币来比较贪心算法和动态规划
    计算机视觉与深度学习 | 基于GPS/BDS多星座加权图因子优化的行人智能手机导航
    前端研习录(29)——JavaScript CSS操作讲解及示例分析
  • 原文地址:https://blog.csdn.net/weixin_42163563/article/details/127438654