群体优化算法python工具箱分享(GA、PSO、CS、GWO、WOA、HHO),持续更新…

之前在学校写论文的时候各种群体优化算法用得挺多的,工作之后虽然没怎么用了,不过这类算法在优化一些算法超参数的时候还是比较有用的,比如优化SVM。。。

准备空闲的时候将这类算法整合成一个工具箱方便使用,目前写好了GA、PSO、CS、GWO、WOA、HHO,后续有空更新其他算法。

工具箱为每个优化算法提供统一的参数接口,因此使用的时候只需要关注自己的目标函数即可。使用仅需四个步骤:1、定义目标函数;2、设置目标函数待优化参数信息;3、设置优化器本身需要的参数信息;4、调用优化算法。

举例:
假设用遗传算法优化目标函数:

y = sum(x^2)

首先,定义目标函数:

def objf(x):return np.sum(x**2)

然后设置目标函数中待优化参数信息,假设我们x为100维,每个维度在[-10, 10]范围内取值,则目标函数参数信息设置为:

parms_func = { 'x_lb': -10, 'x_ub': 10, 'dim': 100}

再设置优化器需要的参数信息,遗传算法需要参数包括种群大小、迭代次数、交叉概率、变异概率、每代最优保留数,因此GA优化器参数设置为:

parms_ga = {'PopSize': 20, 'Niter':100, 'Pcrs': 0.7, 'Pmut': 0.1, 'Ntop': 2}

最后整合参数信息并调用GA就可以了完成优化了:

func_opter_parms = FuncOpterInfo(parms_func, parms_opter)
func_opter_parms = GA(objf, func_opter_parms)

运行完成之后,优化过程信息会保存在func_opter_parms中,比如最优参数结果为:

func_opter_parms.best_x

全局最优值收敛曲线和每代平均函数值曲线分别为:

func_opter_parms.convergence_curve
func_opter_parms.convergence_curve_mean

画出收敛过程:

测试灰狼优化算法GWO优化SVM中的超参数,首先定义目标函数(测试集分类误差):

from sklearn.svm import SVC
from sklearn import metricsdef svc_objf(C_gamma, Xtrain=None, Ytrain=None, Xtest=None, Ytest=None):'''构造SVM分类模型目标函数(适应度函数)'''mdl = SVC(C=C_gamma[0], gamma=C_gamma[1])mdl = mdl.fit(Xtrain, Ytrain)Ypre = mdl.predict(Xtest)error = 1 - metrics.accuracy_score(Ytest, Ypre)return error

准备数据集:

from sklearn import datasets
from sklearn.model_selection import train_test_split as ttsdata = datasets.load_iris()
X = pd.DataFrame(data_cls['data'], columns=data_cls.feature_names)
Y = pd.Series(data_cls['target'])Xtrain, Xtest, Ytrain, Ytest = tts(X, Y, test_size=0.4, random_state=0)

然后设置待优化参数C和gamma信息:

parms_func = {'x_lb': 0.01, 'x_ub': 100, 'dim': 2,'kwargs': {'Xtrain': Xtrain, 'Ytrain': Ytrain,'Xtest': Xtest, 'Ytest': Ytest}}

设置GWO优化器需要的参数信息:

parms_gwo = {'opter_name': 'GWO', 'PopSize': 20, 'Niter': 100}

优化:

gwo_parms = FuncOpterInfo(parms_func, parms_gwo)
gwo_parms = GWO(objf, gwo_parms)

完成后查看最优参数结果:

gwo_parms.best_x
Out[1]: array([3.60648373e+01, 1.00000000e-02])

当然,除了优化模型超参数外,也可以用来尝试优化模型,比如逻辑回归,通常求解逻辑回归参数用的都是梯度下降或者牛顿法,来看看用布谷鸟优化算法求解逻辑回归中的w和b的效果如何。

定义逻辑回归模型优化目标函数(误差率):

import numpy as npdef LR_cls_bin_objf(W_b, X_train=None, y_train=None, p_cut=0.5):def sigmoid(x):return 1.0 / (1 + np.exp(-x))def forward(X, W):'''前向传播(模型表达式)'''return sigmoid(np.dot(X, W))def XaddConst(X):'''X添加常数列'''const = np.ones((X.shape[0], 1))return np.concatenate((X, const), axis=1)W = np.array(W_b).reshape(-1, 1)X_train, y_train = np.array(X_train), np.array(y_train)Xconst = XaddConst(X_train) # X添加常数项# y转化为二维if len(y_train.shape) == 1 or y_train.shape[1] == 1:y_train = y_train.reshape(-1, 1)y_pre_p = forward(Xconst, W)y_pre = (y_pre_p >= p_cut).astype(int)error = 1 - metrics.accuracy_score(y_train, y_pre)return error

数据准备

# 分类任务数据集
data = pd.read_excel('../utils_datsci/test/test_data1.xlsx')
X = data[['x1', 'x2']]
y = data['y']X_train, y_train = X, y

目标函数参数信息设置:

parms_func = {'x_lb': -20, 'x_ub': 20, 'dim': 3,'kwargs': {'X_train': X_train, 'y_train': y_train}}

CS算法参数设置:

parms_cs = {'PopSize': 10, 'Niter': 100, 'pa': 0.25}

优化结果(分界线):

跟梯度下降的优化结果比较一下:

从效果来看,CS貌似比经典梯度下降法更好,不过对更复杂的参数优化问题就可能不一定了。。。

需要工具箱源码的同学请关注公众号Genlovy562,后台回复关键词 “群体优化”:

github:
https://github.com/Genlovy-Hoo/utils_hoo/tree/master
群体优化工具库在utils_optimizer里面
如果对您有用,欢迎star

群体优化算法工具箱分享(GA、PSO、CS、GWO、WOA、HHO)相关推荐

  1. 【优化算法】遗传算法GA求解混合流水车间调度问题(附C++代码)

    [优化算法]遗传算法GA求解混合流水车间调度问题(附C++代码) 00 前言 各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵.于是,今天我们带来了一个神奇的优化算法--遗传算 ...

  2. 灰狼优化算法(Grey Wolf Optimizer,GWO)

    灰狼优化算法(Grey Wolf Optimizer,GWO) 一.算法灵感 二.算法介绍 2.1 初始化 2.2 搜寻猎物(探索阶段) 2.3 开发阶段 2.3.1 围捕猎物 2.3.2 攻击猎物 ...

  3. 进化算法的比较(GA,PSO,DE)及其优化算法包的使用

    概述   最近搞进化算法搞得比较多,所以想来总结以下,一来是对7月实训的总结,二来是对今后学习的一个反思.   进化算法的思想大同小异,具体的操作可以分为一下几个步骤: 编码可行解 对于进化算法这一类 ...

  4. matlab粒子群优化算法工具箱,MATLAB粒子群优化算法(PSO)

    MATLAB粒子群优化算法(PSO) 一.介绍 粒子群优化算法(Particle Swarm Optimization Algorithm)是一种群智能算法,为了寻求全局最优.群体迭代,粒子在解空间追 ...

  5. 群体优化算法------粒子群

    在数千年的宏观演化过程中,这些机器已经学会了有效地应对他们的竞争对手,在智力和能源利用方面都遥遥领先. 他们不仅要与其他机器人作战,还要与星球上的生命世界作战. 这部作品中的幻想元素能够可靠地与进化和 ...

  6. 优化算法 | 随机漂移粒子群优化算法(附标准PSO算法Python工具包)

    目录 ▎标准PSO算法 ▎RDPSO算法 ▎标准PSO算法Python工具包 01 | 工具包适用范围 02 | 工具包安装方法 03 | 工具包使用实例 ▎参考文献 今天为各位讲解一种改进的粒子群优 ...

  7. 粒子群优化算法(PSO)简介及MATLAB实现

    目录 粒子群优化算法概述 PSO算法步骤 PSO(粒子群优化算法)与GA(遗传算法)对比 PSO的MATLAB实现 粒子群优化算法概述 • 粒子群优化(PSO, particle swarm opti ...

  8. 粒子群优化算法 PSO

    文章目录 1.基本内容 1.1 概念 1.2 基本原理 1.3 基本步骤 2.代码分析 2.1 Rastrigrin()函数 2.2 Schaffer()函数 2.3 Griewank()函数 2.4 ...

  9. pso解决tsp matlab,计算智能课程设计_粒子群优化算法求解旅行商问题_Matlab实现.doc...

    计算智能课程设计_粒子群优化算法求解旅行商问题_Matlab实现.doc 摘要:TSP是一个典型的NPC问题.本文首先介绍旅行商问题和粒子群优化算法的基本概念.然后构造一种基于交换子和交换序[1]概念 ...

  10. 【项目实战】Python实现用PSO粒子群优化算法对KMeans聚类模型进行优化项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取. 1.项目背景 粒子群优化算法(Particle Swarm optimizat ...

最新文章

  1. exchange 2013 lesson 6 CAS HA installing
  2. Gmail新增新功能 支援四种语言等智能功能
  3. 【Network Security!】服务器远程管理
  4. python合并两个文本文件内容_用Python 将两个文件的内容合并成一个新的文件.
  5. python三维图能画地图_Python地图绘制实操详解
  6. 【高校宿舍管理系统】第三章 Layui整合Axios
  7. 批量生成多个账户并设置密码
  8. I/O多路复用之epoll实战
  9. 【java】蔡勒公式计算星期(switch语句方法和数组方法)
  10. hybird简介以及安卓应用hybird初体验
  11. 跟着Code走,详解Symbian Client/Server架构
  12. [云原生专题-1]:总体-云原生初步探究,什么是云原生,云原生的基本特性
  13. 校企合作,人才共育|岳阳开放大学校长乐艳华一行莅临云畅科技考察交流
  14. SQL Server键和约束
  15. MSRA实习申请经验分享
  16. 远程桌面服务器office版本,Windows UWP 版 “Micosoft 远程桌面” 配置方法
  17. sql 授予其他用户权限语句
  18. mysql高性能 pdf_高性能MySQL(第3版)(High Performance MySQL) pdf扫描版
  19. 个人博客(一)之表结构设计
  20. 网络运维基础知识梳理

热门文章

  1. 蘑菇街测试开发实习生面经
  2. 用MATLAB仿真DSB调制
  3. Windows窗口(DirectX3D11学习笔记)
  4. js获取浏览器高度和宽度值(多浏览器)
  5. 离职/辞职通知书模板
  6. 自制ADK To Win11PE,加入原生explorer,初步修改注册表(图文1.1万字,很细) (2)
  7. tableau 和sfdc连携提取数据时,发现数据提取出错误或不能全部提取数据。
  8. python命令行进入帮助模式_python的help()用法
  9. 如何在“一周内”摸清一个行业
  10. QT虚拟键盘中英文切换