73
73
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
74
74
creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMax, pset=pset)
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)
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)
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)
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)
106
algorithms.eaSimple(toolbox, pop, 0.5, 0.2, 40, stats, halloffame=hof)
108
logging.info("Best individual is %s, %s", gp.evaluate(hof[0]), hof[0].fitness)
110
return pop, stats, hof
97
112
if __name__ == "__main__":
98
pop = tools.population()
99
hof = halloffame.HallOfFame(1)
101
algorithms.eaSimple(tools, pop, 0.5, 0.2, 40, halloffame=hof)
103
logging.info("Best individual is %s, %s", gp.evaluate(hof[0]), hof[0].fitness)