~ubuntu-branches/ubuntu/quantal/deap/quantal

« back to all changes in this revision

Viewing changes to examples/gp_spambase.py

  • Committer: Package Import Robot
  • Author(s): Miriam Ruiz, Jakub Wilk, Miriam Ruiz
  • Date: 2011-11-17 11:53:15 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20111117115315-k9lkwpqcbsq8n0q7
Tags: 0.7.1-1
[ Jakub Wilk ]
* Add Vcs-* fields.

[ Miriam Ruiz ]
* New Upstream Release
* Upgraded Standards-Version from 3.9.1 to 3.9.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import csv
21
21
import itertools
22
22
 
23
 
from eap import base
24
 
from eap import creator
25
 
from eap import toolbox
26
 
from eap import gp
27
 
from eap import algorithms
28
 
from eap import halloffame
 
23
from deap import algorithms
 
24
from deap import base
 
25
from deap import creator
 
26
from deap import tools
 
27
from deap import gp
 
28
 
29
29
 
30
30
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
31
31
 
73
73
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
74
74
creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMax, pset=pset)
75
75
 
76
 
tools = toolbox.Toolbox()
77
 
tools.register("expr", gp.generateRamped, pset=pset, type_=pset.ret, min_=1, max_=2)
78
 
tools.register("individual", creator.Individual, content_init=tools.expr)
79
 
tools.register("population", list, content_init=tools.individual, size_init=100)
80
 
tools.register("lambdify", gp.lambdify, pset=pset)
 
76
toolbox = base.Toolbox()
 
77
toolbox.register("expr", gp.genRamped, pset=pset, type_=pset.ret, min_=1, max_=2)
 
78
toolbox.register("individual", tools.initIterate, creator.Individual, toolbox.expr)
 
79
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
 
80
toolbox.register("lambdify", gp.lambdify, pset=pset)
81
81
 
82
82
def evalSpambase(individual):
83
83
    # Transform the tree expression in a callable function
84
 
    func = tools.lambdify(expr=individual)
 
84
    func = toolbox.lambdify(expr=individual)
85
85
    # Randomly sample 400 mails in the spam database
86
86
    spam_samp = random.sample(spam, 400)
87
87
    # Evaluate the sum of correctly identified mail as spam
88
88
    result = sum(bool(func(*mail[:57])) is bool(mail[57]) for mail in spam_samp)
89
89
    return result,
90
90
    
91
 
tools.register("evaluate", evalSpambase)
92
 
tools.register("select", toolbox.selTournament, tournsize=3)
93
 
tools.register("mate", toolbox.cxTypedTreeOnePoint)
94
 
tools.register("expr_mut", gp.generateFull, min_=0, max_=2)
95
 
tools.register("mutate", toolbox.mutTypedTreeUniform, expr=tools.expr_mut)
 
91
toolbox.register("evaluate", evalSpambase)
 
92
toolbox.register("select", tools.selTournament, tournsize=3)
 
93
toolbox.register("mate", gp.cxTypedOnePoint)
 
94
toolbox.register("expr_mut", gp.genFull, min_=0, max_=2)
 
95
toolbox.register("mutate", gp.mutTypedUniform, expr=toolbox.expr_mut)
 
96
 
 
97
def main():
 
98
    pop = toolbox.population(n=100)
 
99
    hof = tools.HallOfFame(1)
 
100
    stats = tools.Statistics(lambda ind: ind.fitness.values)
 
101
    stats.register("Avg", tools.mean)
 
102
    stats.register("Std", tools.std)
 
103
    stats.register("Min", min)
 
104
    stats.register("Max", max)
 
105
    
 
106
    algorithms.eaSimple(toolbox, pop, 0.5, 0.2, 40, stats, halloffame=hof)
 
107
    
 
108
    logging.info("Best individual is %s, %s", gp.evaluate(hof[0]), hof[0].fitness)
 
109
 
 
110
    return pop, stats, hof
96
111
 
97
112
if __name__ == "__main__":
98
 
    pop = tools.population()
99
 
    hof = halloffame.HallOfFame(1)
100
 
    
101
 
    algorithms.eaSimple(tools, pop, 0.5, 0.2, 40, halloffame=hof)
102
 
    
103
 
    logging.info("Best individual is %s, %s", gp.evaluate(hof[0]), hof[0].fitness)
 
113
    main()