基于遗传算法的分类系统

遗传算法不仅可作为搜索和优化的一种方法,而且还可作为一种机器学习技术。例如,可以将基于遗传算法的机器学习应用于分类系统。霍勒德等人将分类系统视为一种认知模型,其可在环境中学习一些简单的串规则(string  rules)(又称为分类器),以指导系统的行为。
一个分类系统包含以下三个组成部分:
  1、执行系统;
  2、评价系统;
  3、遗传算法(GA)。
  执行系统是最低层的与环境直接交互的子系统,它的作用象一个基于产生式规则的专家系统。每条规则称为一个分类器。但这种规则比较简单,其条件和动作部分都是串,起着传递消息的作用。
  分类系统的学习是通过系统从环境中获得反馈信息而进行的,即通过评价分类器(规则)的正确性和效率来实现。这种评价行为由评价系统完成。其中一种有名的评价方法叫组桶式(bucket  brigade)算法。
  处于最高层的是遗传算法子系统。该子系统产生新的规则去替代系统中效率不高的规则。新规则的产生(发现)方法是利用遗传算法,  根据规则的适应度进行选择、组合和替代。
1.  执行系统
  执行系统实际上是一个简单的产生式系统,产生式规则形如:
        if  <条件>  then  <动作>
  在分类系统里,规则的条件和动作都是串(以便于GA处理)。条件部分的串说明了规则所能匹配的消息集合,而动作部分则说明了规则执行时要发送的消息。
  为简便起见,设串长为k,由表{0,1,#}中的三种元素组成,其中#表示"不关心"。条件串中的#表示可与0或1匹配,而动作串中的#表示一种消息传递,即该位的值等于与条件串匹配的消息的对应位值。
  例如,设k=4,有规则为:
        if  #10#  then  010#
若现有消息1101,与规则匹配后,该规则将发送消息0101。
  为方便表示,我们可将规则(分类器)的形式改为: 
          <条件>:<动作>
  在匹配规则时,分类系统采用的是并行激活策略,即所有匹配的规则都执行其动作部分,不存在一般产生式系统中的冲突消解问题。当然,若在实际应用中,已激活规则的应用必须是互斥的,或对输出(作为规则执行的结果)的消息个数有限定,那么可依据规则(分类器)的评价值作出选用决定(见以后说明)。
  执行系统基本上重复执行以下步骤:
    1、将输入的消息放入消息队列中;
    2、将消息队列中的所有消息与所有分类器的条件做比较;
    3、将所有能匹配的分类器所产生的消息放入一个新的消息队列中; 
    4、用新的消息队列取代老的消息队列;
    5、将消息队列中的消息加以解释并输出。
其中2-4步可循环进行,直到没有分类器可与消息队列中的消息匹配为止。
  下面举一例子来说明这种匹配过程,设输入消息为0111,分类器有四个:
   1)01##: 0000
   2)00#0: 1100
   3)11##: 1000
   4)##00: 0001
  首先,该消息与分类器1匹配,产生消息0000。消息0000又与分类器2和4匹配,产生两条消息1100和0001。其中1100与分类器3和4匹配,分别产生1000和0001。最后,消息1000与分类器4匹配产生0001,处理过程结束。
  在传统的产生式系统中,当有多条规则同时能与当前事实匹配时,往往要决定选用哪条已激活规则,即冲突消解。一般的冲突解决方法是对规则的重要性作出区别,且这种区别往往是事先给定的。在分类系统中,虽然可以并行(全部)地执行已激活规则,但为了引入学习机制以不断完善分类规则,就有必要对规则(分类器)在系统运行时的表现做个评价,以支持对它们的选用。
2.  评价系统--组桶式算法
  评价系统的目的是:  给每个分类器在系统运行时对执行结果的贡献作个评价(或打分)。实现评价的方法很多,其中最有名的是组桶式算法(简称BBA)。
  BBA可理解为一个进行情报买卖的交易所,交易人是分类器。分类器作为一个中间商只与"上家"(发送消息使该中间商激活的分类器)和"下家"(其条件部分为该中间商所发)作交易。因此,分类器形成了一条从消息"制造者"(系统输入)到消息"消费者"(系统输出)之间的中间商链。
        作为中间商,分类器的条件获得匹配时,并不马上发送消息,而是与其它几个同样获得匹配的分类器竞争(并非只有一个获胜)。为了表示分类器的竞争力,我们可给每个分类器分配一个参数值以表示它的价值,不妨称之为"力度"(strength)。力度越大的分类器越有竞争性,亦即越有价值。分类器之间的竞争采用竞价体系。每个获得匹配的分类器根据其力度s按某种比例出个价B。一旦该分类器被激活,其力度将被减去B,同时将所出价B付给提供消息的上家。当然若该分类器能进一步激活其它分类器(下家),它也同样能从中得到补偿。
  前面讲过,当有许多分类器能与当前消息匹配时,可并行执行这些激活的分类器。此时,分类器力度的主要作用体现在遗传算法子系统:经遗传操作产生的新的分类器将取代力度最弱的分类器。由于有力度值来衡量分类器的价值,因而也可以不采用并行激活策略。例如,只执行有最强力度的已激活分类器,或根据力度大小决定各分类器的激"程度",然后执行激活程度高的一个(或几个)分类器。
  可以证明,经过足够长的时间(n→∝)后,分类器i的力度将收敛于常数Rs/k,即回报值的k分之一。
3.  执行系统
  尽管BBA算法提供了一种评价和选取竞争分类器的方法,但还须有一种产生新的更好的分类器的方法,以不断增强分类系统的性能。这种方法就是遗传算法。
  由于分类器的条件和动作部分都是固定长度的串,应用遗传算法产生新的分类器就很自然了。设条件和动作串的长度均为L,我们可以将条件和动作串的拼接(代表一个分类器),即长度为2L的串作为GA的操作对象──个体,而当前分类器的集合作为当前群体,  通过GA的三个操作(选择、交换、突变)来产生新的分类器。
        但分类系统中的遗传算法与前面讨论的简单遗传算法(SGA)还略有不同,主要表现在:
        1)  群体的变化。在SGA中,由于我们是寻求问题的最优解,只要求群体能收敛于最优解,因此产生的新一代群体将完全取代上一代群体。而在分类器系统中,我们的目的是要发现有更高性能的分类器集合,因而有必要保留在上一代群体中已有较好性能(力度值较大)的分类器,亦即只要用近期发现的新分类器取代上一代群体中性能较差(力度值较小)的分类器即可。
  2)  个体的适应度。SGA用面向优化的目标函数来评价个体的适应度,而分类系统则用分类器的力度去表示分类器的适应度。对于用交换或变异操作产生的新分类器,力度初始值可有多种计算方法。一种典型的方法是:如果后代从交换中产生,则将两个父代的力度值各减去1/3,同时将被减值之和作为后代的力度值;如果后代从变异中产生,则将父代的力度值减半,并将被减值作为后代力度值。
  3)  突变操作。在SGA中,串的元素是0或1,因而突变操作是在0和1之间转换,而分类器的串是由{0,1,#}三种元素组成,因而某一元素的突变是等概率地被转换为其它两个元素,  即{0→1或#,  1→0或#,  #→0或1}
  在分类系统中,GA仅作为系统的一部分功能,且GA的运行穿插在执行系统的循环中。GA的运行时机可以是确定的(即在执行系统运行t次后,调用一次GA运算)或随机的(即执行系统平均运行t次后,有一次GA调用);也可以是在某些事件发生后再调用GA(如没有分类器可以匹配或系统性能变差)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值