首页 > 编程语言 >【实验】遗传算法的超参数优化

【实验】遗传算法的超参数优化

时间:2023-06-03 23:33:49浏览次数:61  
标签:10 MAX self high 参数 low 遗传算法 2.0 优化

wine数据集分类结果

best parameters: {'algorithm': 'SAMME', 'learning_rate': 0.3593813663804626, 'n_estimators': 60}
best score: 0.9720634920634922
Time Elapse: 113.00295925140381

Grid Search Based GA

Best individual is: {'n_estimators': 100, 'learning_rate': 0.3593813663804626, 'algorithm': 'SAMME'}
with fitness: 0.9719101123595506
Time Elapsed = 46.56487488746643

GA

结果:

  1. POPULATION_SIZE = 10
    P_CROSSOVER = 0.9  # probability for crossover
    P_MUTATION = 0.5   # probability for mutating an individual
    MAX_GENERATIONS = 10
    HALL_OF_FAME_SIZE = 5
    CROWDING_FACTOR = 20.0  # crowding factor for crossover and mutation
    

    Best solution is:
    params = (67, 0.34684801135281196, 'SAMME')
    Accuracy = 0.97206

    image-20220524104037648

  2. POPULATION_SIZE = 10
    P_CROSSOVER = 0.9 # probability for crossover
    P_MUTATION = 0.5 # probability for mutating an individual
    MAX_GENERATIONS = 10
    HALL_OF_FAME_SIZE = 5
    CROWDING_FACTOR = 20.0 # crowding factor for crossover and mutation

    Best solution is:
    params = (67, 0.34684801135281196, 'SAMME')
    Accuracy = 0.97206

    image-20220524104239562

PSO

算法大致步骤:

  • 初始化
  • 更新

可参考的blog:(87条消息) 智能优化算法——粒子群算法原理与仿真程序_子木呀的博客-CSDN博客_粒子群优化算法原理

代码实现设置的条件:

MAX_Generation = 10		#迭代次数
Population = 10			#种群数量
dimension = 3
v_low = -1
v_high = 1
pso = PSO(dimension, MAX_Generation, Population,
              BOUNDS_LOW, BOUNDS_HIGH, v_low, v_high) #实现的class

更新步骤的核心代码:

网上搜一下,其中w自身权重系数(记不清了),c1是个体学习系数,c2是群落学习系数

c1 = 2.0  # 学习因子
c2 = 2.0
w = 0.8
# 更新速度(核心公式)
self.v[i] = w * self.v[i] + c1 * random.uniform(0, 1) * (
    self.p_best[i] - self.x[i]) + c2 * random.uniform(0, 1) * (self.g_best - self.x[i])
# 速度限制
for j in range(self.dimension):
    if self.v[i][j] < self.v_low:
        self.v[i][j] = self.v_low
    if self.v[i][j] > self.v_high:
        self.v[i][j] = self.v_high

# 更新位置
self.x[i] = self.x[i] + self.v[i]
# 位置限制
for j in range(self.dimension):
    if self.x[i][j] < self.bound[0][j]:
        self.x[i][j] = self.bound[0][j]
    if self.x[i][j] > self.bound[1][j]:
        self.x[i][j] = self.bound[1][j]

大致的意思就是通过公式更新速度和位置,同时对更新后的速度与位置进行修正,因为更新的位置一定是在一定的范围之内的。

结果:

  1. MAX_Generation = 10 #迭代次数
    Population = 10 #种群数量

    v_low = -1

    v_high = 1

    c1 = 2.0 # 学习因子
    c2 = 2.0
    w = 0.8


    n_estimators'=97.59544738, 'learning_rate'=0.93788895, 'algorithm'=SAMME
    0.9830158730158731
    当前的最佳适应度:0.9830158730158731
    time cost: 175.3606903553009

    image-20220523224042529

  2. ################ 改变迭代次数和种群大小#######################

    MAX_Generation = 50 #迭代次数
    Population = 20 #种群数量

    v_low = -1

    v_high = 1

    c1 = 2.0 # 学习因子
    c2 = 2.0
    w = 0.8

    当前最佳位置:[22.63664273 0.7580015 0.39425009]
    0.9831746031746033
    当前的最佳适应度:0.9831746031746033
    time cost: 1097.9579124450684 s

    image-20220523235957152

  3. ################ 改变速度大小#######################

    MAX_Generation = 50 #迭代次数
    Population = 20 #种群数量

    v_low = -0.5

    v_high = 0.5

    c1 = 2.0 # 学习因子
    c2 = 2.0
    w = 0.8

    当前最佳位置:[7.49302006e+01 6.20588351e-01 2.87210702e-02]
    0.9831746031746033
    当前的最佳适应度:0.9831746031746033
    time cost: 1510.600219488144 simage-20220524090749388

  4. ################ 改变速度范围#######################

    MAX_Generation = 50 #迭代次数
    Population = 20 #种群数量

    v_low = [-10, -0.1, -0.5]

    v_high = [10, 0.1, 0.5]

    c1 = 2.0 # 学习因子
    c2 = 2.0
    w = 0.8

    当前最佳位置:[17.96950042 0.88984003 0. ]
    0.9885714285714287
    当前的最佳适应度:0.9885714285714287
    time cost: 1343.2985899448395 s

    image-20220524093834412

  5. 改变初始化

    当前最佳位置:[58.67594087 0.40936569 0. ]
    0.9776190476190475
    当前的最佳适应度:0.9776190476190475
    time cost: 2636.623948097229 s

    image-20220524110732371

标签:10,MAX,self,high,参数,low,遗传算法,2.0,优化
From: https://www.cnblogs.com/copy2000/p/17454962.html

相关文章

  • 常见的for循环优化方式
    ?>前言经常使用一些循环,进行耗时计算的操作,特别是for循环,它是一种重复计算的操作,如果处理不好,耗时就比较大,如果处理书写得当,将大大提高效率,下面总结几条for循环的常见优化方式。首先初始化一个集合list,如下:List<String>list=newArrayList<>();方式一:最常规的不加思考的写......
  • Request类源码分析、序列化组件介绍、序列化类的基本使用、常用字段类和参数、反序列
    目录一、Request类源码分析二、序列化组件介绍三、序列化类的基本使用查询所有和查询单条四、常用字段类和参数(了解)常用字段类字段参数(校验数据来用的)五、反序列化之校验六、反序列化之保存七、APIVIew+序列化类+Response写的五个接口代码八、序列化高级用法之source(了解)九、......
  • 如何用C语言做一个扫雷游戏(包含展开优化)
    老一套做一个简易的游戏菜单,并且完善他的功能,选一开始游戏,选0退出游戏,超出就重选。目录做完开始实现游戏内容,先做一个棋盘来放我们的雷和我们排查雷的情况,但是在一个棋盘上既要放雷,又要来存放我们排查的雷,完成起来就很乱,那么我们是不是就可以做两个棋盘,一个来专门放雷,一个专门来放......
  • 关于SQLAlchemy中update的使用参数synchronize_session
    update语句带上synchronize_session="fetch"或者带上synchronize_session=False是啥区别在SQLAlchemy中,当您使用update语句更新数据库中的记录时,可以使用`synchronize_session`参数来指定要同步的会话对象。-当`synchronize_session`设置为`False`时,会话对象不会自动同步,这意......
  • postman 参数化构建 批量测试
    postman之前一直只是使用简单测试接口。参数引用注意下:request参数获取:varreqObj=JSON.parse(request.data);reqObj.参数字段response参数获取:varjsonObject=JSON.parse(responseBody);jsonObject.参数字段postman内置了几个变量可以用来直接获取请求的值或者......
  • elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择
    效果展示(多列可以配置)  一、icon下拉框的多列选择:  二、常规、通用下拉框的多列选择:【注】第二种常规、通用下拉框的多列选择,是在第一种的前端代码上删除几行代码就行(把icon显示标签删去),所以下面着重介绍第一种icon下拉框的多列选择。思路  不使用下拉框标签<el-option>......
  • 【花雕学AI】ChatGPT的四大语言处理神器:文本生成、问答、创意生成和内容优化的技巧和
    引言:ChatGPT是一个人工智能聊天机器人,它可以理解和交流多种语言,例如中文、英文、日文、西班牙语、法语、德语等。它是由OpenAI开发的,基于GPT-3.5和GPT-4这两个大型语言模型。它不仅可以与用户进行对话,还可以根据用户的指示完成一些语言处理的任务,例如文本生成、问答、创意生成和内......
  • postman 常用参数例子
    文档路径:https://learning.postman.com/docs/getting-started/navigating-postman/常用tests用法如下:1.检查responsebody中是否包含某个stringtests["Bodymatchesstring"]=responseBody.has("string_you_want_to_search");注意:"Bodymatchesstring"......
  • PACS-医学影像创建连接、接收参数
    一、创建连接二、接收参数1.DicomObject2.接收dicom文件一、创建连接publicclassPacsMain{privateDcmQRdcmqr;/***下载数据的方法**@paramqueryLevel查询级别*@parammatchingKey查询条件*/publi......
  • Beginner:Client libraries-8 在类中使用参数
    目标:创建和运行一个具有ROS参数的类背景当实现自己节点的时候,可能需要从launch文件中添加参数。本教程的目的是告诉你怎样在c++类中创建这些参数,以及怎样在launch文件中设置。任务1、创建一个包ros2pkgcreate--build-typeament_cmakecpp_parameters--dependenciesrcl......