Print

Print


Bojan
My Rules are classification rules and have binary classification with
Attributes and Class (positive and negative)
Uday

On Fri, May 24, 2013 at 4:44 AM, Bojan Janisch
<[log in to unmask]> wrote:
> Hey Uday,
>
> thanks to you I got the first version of my GPTree (still not usable). I'm still not used with the representation of a rule as some tree constraints, but I think this is only a matter of usage.
> What do you mean with positive class and negative class?
>
> Greetings
>
> Bojan
>
> ----- Ursprüngliche Mail -----
> Von: "Uday kamath" <[log in to unmask]>
> An: [log in to unmask]
> Gesendet: Freitag, 24. Mai 2013 03:52:40
> Betreff: Re: Postprocessing in ec.gp
>
> Bojan
>
> As i wrote before that my Rules are of condition->action format. The
> action is determined by evaluating the GP Individual where fitness is
> the "rule coverage" for the class.
>
>
> The condition is a GPTree with constraints defined as below
>
> Boolean Functions: AND, OR, NOT takes condition or boolean returns boolean
> Operators: >,<,= takes two nodes attribute and value ranges and
> returns condition
> Attribute: (Set of all attribute values) leaf node with no child
> Value: ERCs or Constants, leaf node with no child
>
> Basically the GPTrees forms complex Rules like
> (Person.age > 45) AND (Person.state = Virginia)
>
> GPIndividual covers positive class in 80% cases and negative class in
> 20%, so the discrimination power of rule and coverage become the
> fitness value.
>
> Hope this helps
> Uday
>
>
> On Thu, May 23, 2013 at 9:40 AM, Bojan Janisch
> <[log in to unmask]> wrote:
>> Hey Uday,
>>
>> I appreciate your help and I'm sorry to bother you further but I don't get the GPTree working.
>> Currently I'm hanging on the problem that a GPTypeSet cannot have a GPTypeSet as it's child,
>> maybe because of the growth.
>>
>> Could you explain me with an example how you represented a rule as a GPTree?
>>
>> Greetings from Germany
>>
>> Bojan
>>
>> ----- Ursprüngliche Mail -----
>> Von: "Uday kamath" <[log in to unmask]>
>> An: [log in to unmask]
>> Gesendet: Donnerstag, 16. Mai 2013 16:45:03
>> Betreff: Re: Postprocessing in ec.gp
>>
>> Bojan
>>
>> You need to give the parameters needed, the manual specifies them and
>> here is the example
>>
>> ***************************************************************************************************
>> pop.subpop.0.species.pipe.source.0=ec.gp.breed.SizeFairCrossoverPipeline
>> gp.breed.size-fair.source.0=ec.select.TournamentSelection
>> gp.breed.size-fair.source.1=same
>> gp.breed.size-fair.ns.0=ec.gp.koza.KozaNodeSelector
>> gp.breed.size-fair.ns.1=ec.gp.koza.KozaNodeSelector
>> gp.breed.size-fair.tries=20
>> gp.breed.size-fair.homologous=true
>> gp.breed.size-fair.maxdepth=25
>> ***********************************************************************************************************
>>
>> Uday
>>
>>
>> On Thu, May 16, 2013 at 10:10 AM, Bojan Janisch
>> <[log in to unmask]> wrote:
>>> Hey Uday,
>>>
>>> I'm trying to get the SizeFairCrossoverPipeline into my BreedingPipeline, but seems that I'm missing an argument or so. I'm getting this error stack:
>>>
>>> Initializing Generation 0
>>> Exception in thread "main" ec.util.ParamClassLoadException:
>>> No class name provided.
>>> PARAMETER: pop.subpop.0.species.pipe.source.0.source.0
>>>      ALSO: gp.breed.size-fair.source.0
>>>         at ec.util.ParameterDatabase.getInstanceForParameter(ParameterDatabase.java:420)
>>>         at ec.BreedingPipeline.setup(BreedingPipeline.java:190)
>>>         at ec.gp.breed.SizeFairCrossoverPipeline.setup(SizeFairCrossoverPipeline.java:160)
>>>         at ec.BreedingPipeline.setup(BreedingPipeline.java:192)
>>>         at ec.breed.MultiBreedingPipeline.setup(MultiBreedingPipeline.java:66)
>>>         at ec.Species.setup(Species.java:218)
>>>         at ec.gp.GPSpecies.setup(GPSpecies.java:45)
>>>         at ec.Subpopulation.setup(Subpopulation.java:166)
>>>         at ec.Population.setup(Population.java:142)
>>>         at ec.simple.SimpleInitializer.setupPopulation(SimpleInitializer.java:55)
>>>         at ec.simple.SimpleInitializer.initialPopulation(SimpleInitializer.java:46)
>>>         at ec.simple.SimpleEvolutionState.startFresh(SimpleEvolutionState.java:54)
>>>         at ec.EvolutionState.run(EvolutionState.java:438)
>>>         at ec.Evolve.main(Evolve.java:750)
>>>
>>> while using these parameters for breeding pipeline:
>>>
>>> op.subpop.0.species.pipe = ec.breed.MultiBreedingPipeline
>>> # Koza's decision here was odd...
>>> pop.subpop.0.species.pipe.generate-max = false
>>> # Subsidiary pipelines:
>>> pop.subpop.0.species.pipe.num-sources = 2
>>> pop.subpop.0.species.pipe.source.0 = ec.gp.breed.SizeFairCrossoverPipeline
>>> pop.subpop.0.species.pipe.source.0.prob = 0.9
>>> pop.subpop.0.species.pipe.source.1 = ec.breed.ReproductionPipeline
>>> pop.subpop.0.species.pipe.source.1.prob = 0.1
>>>
>>> Simply changed the CrossoverPipeline to SizeFairCrossoverPipeline in the koza.params which I'm using as parent params-file. Could you please also explain
>>> how do you managed to get a variable amount of conditions for your rule-tree? Or does every rule has the same amount of conditions?
>>> Currently I'm using 5 different tree constraints where each tree represent a rule with a different amount of children. (I don't know set this to random,
>>> maybe if I know more about the evolution process in detail, but I don't know where I could find such an information)
>>>
>>> Greetings from Germany
>>>
>>> Bojan
>>>
>>> ----- Ursprüngliche Mail -----
>>> Von: "Uday kamath" <[log in to unmask]>
>>> An: [log in to unmask]
>>> Gesendet: Freitag, 26. April 2013 01:14:26
>>> Betreff: Re: AW: Re: Postprocessing in ec.gp
>>>
>>>
>>> Bojan
>>>
>>>
>>> Some of the measures i have in my Rules generation are
>>> 1. Use Homologous Crossover instead of Standard Subtree Crossover, works very effectively in reducing the size or 'bloat' of trees. ECJ now has the Homologous or SizeFair crossover.
>>> 2. As sean mentioned, i have mutation operator that "removes" the subtree in the pipeline. Only thing is if the fitness is not changed or below an epsilon, i accept it. ECJ has bunch of delete or raise mutation for GP trees.
>>> 3. In my final interpreter i have a Simplifier for Boolean Expression, which does logical reduction based on karnaugh maps.
>>>
>>>
>>> With these three mechanism i was able to get meaningful and pruned Rules.
>>> Hope that helps
>>> Uday
>>>
>>>
>>>
>>> On Thu, Apr 25, 2013 at 6:58 PM, Sean Luke < [log in to unmask] > wrote:
>>>
>>>
>>> Pruning will be up to you. But you have two ways you can hook into ECJ to do it.
>>>
>>> 1. You can create a BreedingPipeline which prunes the trees handed it by its children. This is essentially a mutation mechanism during breeding of individuals. You'd probably set this up as the top-level pipeline, with the standard Koza pipeline structure underneath it, so it's the last thing that operates on new individuals.
>>>
>>> 2. Perhaps a better approach would be simply to prune the individual during fitness evaluation prior to testing it.
>>>
>>> Sean
>>>
>>> Begin forwarded message:
>>>
>>>> From: Bojan Janisch < [log in to unmask] >
>>>> Date: April 25, 2013 5:27:32 PM EDT
>>>> To: [log in to unmask]
>>>> Subject: AW: Re: Postprocessing in ec.gp
>>>> Reply-To: ECJ Evolutionary Computation Toolkit < [log in to unmask] >
>>>
>>>
>>>>
>>>> Hi Uday,
>>>> I already have a plan how the represented rule should be evaluated. I'll write an
>>>> API to JBoss Drools, which is a rule-based System. The Output of the System will
>>>> be compared to a goldstandard by a comparator which I have to write. It returns a
>>>> F-Score or something similar to it. The Score goes into the fitness function.
>>>>
>>>> But my problem is the pruning. I need a step where I can check a syntax tree for useless
>>>> part-trees. Otherwise the trees have no limits on how big it can grow. I wanted to check
>>>> while post-processing the tree, but seems that ECJ does not support it.
>>>>
>>>> How did you solve the chunk-condition problem for rules?
>>>>
>>>> Greetings
>>>> Bojan
>>>>
>>>>
>>>> ----- Ursprüngliche Mail -----
>>>> Von: Uday kamath < [log in to unmask] >
>>>> An: [log in to unmask]
>>>> Gesendet: Thu, 25 Apr 2013 17:28:38 +0200 (CEST)
>>>> Betreff: Re: Postprocessing in ec.gp
>>>>
>>>> Bojan
>>>> There are no pre written post processing out of the box as it depends on
>>>> the problem (function set of GP). I will give a short background which you
>>>> may find useful for what you are doing.
>>>> For generating automated Rules to discriminate certain patterns, i had my
>>>> GP have basic terminals and non-terminals required for the Rule. I would
>>>> collect my "exceptional" Rules as a memory pad outside of evolutionary
>>>> runs, everytime i see some well performing ones. Finally i get a Rule set
>>>> and wrote my Custom "interpreter" that can parse the GP Individuals as
>>>> s-expression to evaluate. So ECJ gives you GP and Evolution for free, you
>>>> need to write custom functions and interpreter for them.
>>>> Hope that helps
>>>> Uday
>>>>
>>>>
>>>> On Thu, Apr 25, 2013 at 10:29 AM, Bojan Janisch <
>>>> [log in to unmask] > wrote:
>>>>
>>>>> Hello everyone,
>>>>>
>>>>> is there a post-processing-step in the Genetic Programming algorithm? I've
>>>>> search through the manual,
>>>>> but did not find an explanation about this topic.
>>>>>
>>>>> Thank you and greetings,
>>>>> Bojan
>>>>>