遗传算法学习总结

遗传算法

本周搭建了python机器学习的相关环境,(机器学习相关包的下载建议用清华源 默认为外网)翻阅一些遗传算法博客,用自己的话简单总结了一下,并参考github一些分享,做了一个简单实验。下一步以论文思路进行思考,如何将遗传算法应用到内核参数配置推荐的场景当中。

一 算法流程及简单例子理解

在这里插入图片描述
查阅博客看到一个比较容易理解的例子,我给精简一下便于理解。
题目:求二元函数的最大值:
在这里插入图片描述
按照流程以此例逐一的分析:
(1) 个体编码
遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种符号串。本题中,用无符号二进制整数来表示。
例如:基因型 X=101110 所对应的表现型是:x=[ 5,6 ]。
(101 =5, 110 = 6)
(2) 初始群体的产生
遗传算法是对群体进行的进化操作,需要给其淮备一些表示起始搜索点的初始
群体数据。
本例群体规模的大小取为4,即群体由4个个体组成,假设选择四种不同的组合:011101,101011,011100,111001。
(3) 适应度汁算
遗传算法中以个体适应度的大小来评定各个个体的优劣程度,从而决定其遗传
机会的大小。
本例目标以求函数最大值为优化目标,故可直接利用目标函数值作为个体的适应度。
(4) 选择运算
选择运算(或称为复制运算)把当前群体中适应度较高的个体按某种规则或模型遗传到下一代群体中。一般要求适应度较高的个体将有更多的机会遗传到下一代群体中。
我总结为以下几步:
1 计算适应值,对应本例子的f(x)
2 计算适应度,也就是适应值/总和,就是占总数的百分比
3 最后再产生一个0到1之间的随机数,依据该随机数出现在上述哪一个概率区域内来确定各个个体被选中的次数。
在这里插入图片描述
5) 交叉运算
交叉运算是遗传算法中产生新个体的主要操作过程,它以某一概率相互交换某两个个体之间的部分染色体。
我总结为以下几步:
1 先对群体进行随机配对,其次随机设置交叉点位置
2 最后再相互交换配对染色体之间的部分基因,产生新的个体
在这里插入图片描述

(6) 变异运算
变异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进行改变,它也是产生新个体的一种操作方法。
总结:
1 首先确定出各个个体的基因变异位置,随机产生的变异点位置
2 然后依照某一概率将变异点的原有基因值取反。
在这里插入图片描述
随着多轮的迭代,适应值会越来越大,越接近最优质,遗传算法感觉可以理解为参数搜素的一个过程,并利用了生物进化 优胜略汰的思想。

二 遗传算法基本代码框架

基本框架就按照算法流程写就行

class GA():

    def __init__(self, nums, bound, func, DNA_SIZE=None, cross_rate=0.8, mutation=0.003):
        pass
#将编码后的DNA翻译回来(解码)
    def translateDNA(self):
        pass
#得到适应度
    def get_fitness(self, non_negative=False):
        pass
#自然选择
    def select(self):
        pass
#染色体交叉
    def crossover(self):
        pass
#基因变异
    def mutate(self):
        pass
#进化
    def evolution(self):
        pass
#重置
    def reset(self):
        pass
#打印当前状态日志
    def log(self):
        pass
#一维变量作图
    def plot_in_jupyter_1d(self, iter_time=200):
        pass

三 简单实验

整体思想与上面简单例子一样,区别在于适应值的计算不同,目标不同。sklearn库已经附带了数据集,出于学习比较容易导入,该数据集包含了十三个特征,1代表选择,0代表不选择。
在这里插入图片描述
参数组合组成了数据集
在这里插入图片描述
该实例的适应值为计算线性回归估计的CV得分。 选择均方误差(MSE)作为度量:
在这里插入图片描述
该实例目标将得分接近于30,经过多轮迭代,得出结果很接近这个值。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值