当前位置:   article > 正文

模型参数优化(一):遗传算法_遗传算法估计模型参数

遗传算法估计模型参数

       参数是指算法中的未知数,有的需要人为指定,比如神经网络算法中的学习效率,有的是从数据中拟合而来,比如线性回归中的系数,如此等等。在使用选定算法进行建模时,设定或得到的参数很可能不是最优或接近最优的,这时需要对参数进行优化以得到更优的预测模型。常用的参数优化方法主要包括交叉验证、网格搜索、遗传算法、粒子群优化、模拟退火,本节介绍遗传算法。

      遗传算法实质:选定一批最佳参数,使得目标函数最优。

1.基本概念

        遗传算法是模拟自然界遗传选择与淘汰的生物进化计算模型。达尔文的自然选择学说认为,遗传和变异是决定生物进化的内在因素。遗传是指父代与子代之间,在性状上的相似现象,而变异是指父代与子代之间以及子代的个体之间,在性状上或多或少地存在的差异现象,变异能够改变生物的性状以适应新的环境变化。而生存斗争是生物进化的外在因素,由于弱肉强食的生存斗争不断地进行,其结果是适者生存,具有适应性变异的个体被保留下来,不具有适应性变异的个体被淘汰。更进一步,孟德尔提出了遗传学的两个基本规律:分离律和自由组合律,认为生物是通过基因突变与基因的不同组合和自然选择的长期作用而进化的。

       由于生物进化与某些问题的最优求解过程存在共通性,即都是在产生或寻找最优的个体(或者问题的解),这就产生了基于自然选择、基因重组、基因突变等遗传行为来模拟生物进化机制的算法,通常叫作遗传算法,它最终发展成为一种随机全局搜索和优化的算法。

       遗传算法研究的对象是种群,即很多个体的集合,对应于求解的问题,这里的个体代表一个解,种群代表这些解的集合,当然,开始的时候,也许所有的解不是最优的,经过将这些解进行编码、选择、交叉、变异之后,逐代进化,从子代中可以找到求解问题的全局最优解。

  • 编码:将表现型的解转化为基因型,便于进行遗传操作;
  • 解码:即是从基因型转化为表现型,以直观判断个体的表现以,从而决定是否选择进入下一代或直接得到最优解。
  • 选择的标准:优化准则。
  • 交叉:也就是基因重组,即两个个体,互相交换 因型的对应片段。
  • 变异:指的是基因突变,是指个体基因型中某个基因的改变。

      种群的每代个体经过了这几个关键的步骤之后,种群得以进化,在最终的子代中找到问题的最优解。这就是使用遗传算法求解最优化问题的大致过程。

2、名词概念

      染色体(个体):在参数寻优问题中一个染色体代表一个参数,染色体的十进制数值,用于获取待寻优参数实际输入到模型中的值。

      基因:每一个染色体都对应多个基因,基因是二进制数,基因的取值长度是染色体的长度。遗传算法的交叉、变异操作都是对染色体的基因进行的。

      种群:初始化的染色体可能的取值数

      适应度函数:表征每一组染色体(每一组参数)对应的模型评价指标(本博文的python实例中,采用3-flod 交叉检验的平均值作为适应度函数值)。

      假设对于两个参数的寻优,我们设定染色体长度为20,种群数为200,就是说初始化两个染色体,每个染色体初始化200个可能的值,每一个染色体的十进制数值用20位二进制数表示。、

3. 遗传算法实现过程

第一步:编码。变量x是遗传算法的表现型形式,从表现型到基因型的映射称为编码,通常采用二进制编码形式,串的长度取决于求解的精度。

  • 染色体长度:如参数batch取值范围为[10,100],区间长度为90,将其分成90份。因为:

                                                                   64=2^{6}< 90< 2^{7}=128

                     所以二进制串的长度是7,即染色体长度是7。

  • 解码:二进制对应的十进制数

                                             

(1)首先将二进制转为十进制:比如一个二进制为10101,转化为十进制就是1*2^{4}+0*2^{3}+1*2^{2}+0*2^{1}+1*2^{0}=21(2)把21放到上面的解码公式就得到了最终的batch:min=10,max=100

第二步:产生父代个体,构建初始种群。

第三步:选择个体。根据适应度函数选择再生个体,被选出的概率正比于染色体的适应性,适应性分数愈高,被选中的可能性也就愈大。常用的方法就是采用所谓的轮盘赌选择法

第四部:交叉。

第五步:变异。

即:

       第一步:(产生初始种群:优化参数的候选者)根据种群规模,随机产生初始种群,每个个体表示染色体的基因型,如LSTM超参数batch_size、epochs等优化,初始种群为batch_size、epochs的候选值
       第二步:(计算适应度:目标函数)计算每个个体的适应度,并判断是否满足优化准则,若满足,则输出最佳个体及其代表的最优解,并结束算法;若不满足,则转入下一步。适应度,即因变量f,如LSTM的loss
       第三步:(选择)依据适应度选择再生个体,适应度高的个体被选中的概率高,反之,适应度低的个体被选中的概率低,甚至可能被淘汰。
       第四步:(交叉)根据一定的交叉概率和交叉方法生成子代个体。
       第五步:(变异)根据一定的变异概率和变异方法,生成子代个体。
       第六步:(循环计算适应度)由交叉和变异产生新一代种群,返回到第二步。

 遗传算法中的优化准则,一般根据问题的不同有不同的确定方式。通常采取如下之一作为判断条件:

  1. 种群中个体的最大适应度超过了设定值。(随着代数的增大,最大适应度向变大的方向移动;适应度值越大,表示解的质量越好)
  2. 种群中个体的平均适应度超过了设定值。
  3. 世代数超过了设定值。
  4. 种群中个体的最大适应度除以平均适应度超过了设定值。 

4、遗传算法单参数/多参数寻优

       多参数寻优和单一参数寻优的基本思路是相同的,不过在种群初始化时,每次需要初始化m个染色体,并且在选择、交叉、变异操作时,m个染色体是分别进行的。

      步骤一:种群、染色体、基因初始化。
      步骤二:计算种群中每一组染色体对应的适应度函数值。
      步骤三:对种群中的染色体进行选择、交叉、变异操作,产生新的种群。
      步骤四:判断是否满足终止条件?如果不满足,跳转到步骤二;如果满足,输出最优参数。
      步骤五:结束。

5. 代码实现 

5.1 python实现

     参考:遗传算法(GA)的新手入门必备,python3案例

                python遗传算法(详解)

                遗传算法多参数寻优

4.2 R实现

      R语言预测实战:6.3.5

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/357198?site
推荐阅读
相关标签
  

闽ICP备14008679号