Genetic Algorithm for Machine learning in Python
In this tutorial, we will learn about the Genetic Algorithm for machine learning in Python. It is an algorithm mostly used in Machine Learning. It is basically on the evolution theory that we learned in our biology textbook. Curious? Let’s find out how. But before that first let us revise the Evolution theory, which gave us the term “Survival of the fittest”.
According, to the evolution theory, the individual who can face the changing environment, as well as biological situation, will survive. Let us find out how to relate them.
Background of the genetic algorithm:
So, in a genetic algorithm what we do is that we simply start with creating a random solution to a given problem (the individual), and provide a fitness score the solution. Now, this fitness score is served as an ability to survive, and we keep on mutating solutions. On continuous mutation, selection, and rejection of solutions, the one with the best fitness score survives (survival of the fittest).
An example use of the above algorithm:
Here, we will use the Genetic Algorithm to develop a given target string after many successful mutations. We will start with random results and will reach the target result. We have used the following terms to understand the algorithm and its implementation better. Here, alphabets and symbols are called as genetic material (Gen_Mat) and string formed are called as Individual.
Here, we have used fitness score as the measure of the characters which are different from the target string.
Python Code: Genetic Algorithm for Machine learning
We have started the code with variables namely, POPULATION_SIZE, GENES, and TARGET to represent no. of individuals in each generation, characters, and our target string to be generated.
import random POPUL_Size = 100 Gen_Mat = '''ABCDEFGHIJKLMNOP QRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1234567890, .-;:_!"#%&/()[email protected]${[]}''' TARGET = "Learn at codespeedy"
Now, we will create a class named “Individual” to represent an individual in the population. Different functions have been generated. We used ‘mutated_genes’ to create random genes for mutation, ‘create_gnome’ for creating chromosome or string of genes, and ‘mate’ to perform mating and producing new offspring. We have also used ‘cal_fitness’ to calculate the fitness score which compares the given chromosome with TARGET string.
In ‘mate’ function, we have used variable child_chromosome to symbolize chromosome of off spring(new string). We have used a probability measure 0.45 as limit for insertion of parent 1 and 0.45 to 0.90 for parent 2 for mating.
class Individual(object): def __init__(self, chromosome): self.chromosome = chromosome self.fitness = self.cal_fitness() @classmethod def mutated_genes(self): global Gen_Mat gene = random.choice(Gen_Mat) return gene @classmethod def create_gnome(self): global TARGET gnome_len = len(TARGET) return [self.mutated_genes() for _ in range(gnome_len)] def mate(self, par2): child_chromosome = [] for gp1, gp2 in zip(self.chromosome, par2.chromosome): prob = random.random() if prob < 0.45: child_chromosome.append(gp1) elif prob < 0.90: child_chromosome.append(gp2) else: child_chromosome.append(self.mutated_genes()) return Individual(child_chromosome) def cal_fitness(self): global TARGET fitness = 0 for gs, gt in zip(self.chromosome, TARGET): if gs != gt: fitness+= 1 return fitness
Now we have created an array named population for storing population (strings). Then using append function inserted the strings.
After it, we have sorted the population(string) in increasing order of their fitness score. Fitness Score=0 is used as the symbol of termination of the loop. Otherwise new population (string) is generated and is appended to the new_generation variable.
We have performed a check, where one with 10% of the fittest population goes to the next generation and 50% of the fittest population will be used for mating.
Then finally we have printed the results.
def main(): global POPUL_Size generation = 1 found = False population = [] for _ in range(POPUL_Size): gnome = Individual.create_gnome() population.append(Individual(gnome)) while not found: population = sorted(population, key = lambda x:x.fitness) if population[0].fitness <= 0: found = True break new_generation = [] s = int((10*POPUL_Size)/100) new_generation.extend(population[:s]) s = int((90*POPUL_Size)/100) for _ in range(s): parent1 = random.choice(population[:50]) parent2 = random.choice(population[:50]) child = parent1.mate(parent2) new_generation.append(child) population = new_generation print("Gen: {}\tSolution: {}\tFitness Score: {}". format(generation, "".join(population[0].chromosome), population[0].fitness)) generation += 1 print("Gen: {}\tSolution: {}\tFitness Score: {}". format(generation, "".join(population[0].chromosome), population[0].fitness)) if __name__ == '__main__': main()
Output:
Gen: 1 Solution: U8 #ZXOt?;a2ys0e9,Q Fitness Score: 16 Gen: 2 Solution: 9Ks)nZYbe"ode88b)y Fitness Score: 15 Gen: 3 Solution: LKsjnOIbV"ode88()e; Fitness Score: 14 Gen: 4 Solution: LKsjnOIbV"ode88()e; Fitness Score: 14 Gen: 5 Solution: L-RjwKIkV"ode$feei0 Fitness Score: 13 Gen: 6 Solution: L0s%wKIb?code80eei4 Fitness Score: 12 Gen: 7 Solution: L!X:n 06 coSe_Cb)dD Fitness Score: 11 Gen: 8 Solution: L!X:n 06 coSe_Cb)dD Fitness Score: 11 Gen: 9 Solution: L!X:n 06 coSe_Cb)dD Fitness Score: 11 Gen: 10 Solution: L-s%n Ik codeo0Qe]4 Fitness Score: 10 Gen: 11 Solution: L0s,n I8 code$0eedb Fitness Score: 8 Gen: 12 Solution: L0s,n I8 code$0eedb Fitness Score: 8 Gen: 13 Solution: L0s,n I8 code$0eedb Fitness Score: 8 Gen: 14 Solution: L0s,n I8 code$0eedb Fitness Score: 8 Gen: 15 Solution: Lpsrn o codeu0eedL Fitness Score: 7 Gen: 16 Solution: Lpsrn o codeu0eedL Fitness Score: 7 Gen: 17 Solution: Lpsrn o codeu0eedL Fitness Score: 7 Gen: 18 Solution: L0!rn I4 code$peed; Fitness Score: 6 Gen: 19 Solution: L0!rn I4 code$peed; Fitness Score: 6 Gen: 20 Solution: LYarn 54 code$peedD Fitness Score: 5 Gen: 21 Solution: LYarn 54 code$peedD Fitness Score: 5 Gen: 22 Solution: LYarn 54 code$peedD Fitness Score: 5 Gen: 23 Solution: LYarn 54 code$peedD Fitness Score: 5 Gen: 24 Solution: LYarn 54 code$peedD Fitness Score: 5 Gen: 25 Solution: LYarn 54 code$peedD Fitness Score: 5 Gen: 26 Solution: Learn I4 codeopRedy Fitness Score: 4 Gen: 27 Solution: Learn I4 codeopRedy Fitness Score: 4 Gen: 28 Solution: L,arn a4 code$peedy Fitness Score: 3 Gen: 29 Solution: L,arn a4 code$peedy Fitness Score: 3 Gen: 30 Solution: L,arn a4 code$peedy Fitness Score: 3 Gen: 31 Solution: L,arn a4 code$peedy Fitness Score: 3 Gen: 32 Solution: L,arn a4 code$peedy Fitness Score: 3 Gen: 33 Solution: L,arn a4 code$peedy Fitness Score: 3 Gen: 34 Solution: L,arn a4 code$peedy Fitness Score: 3 Gen: 35 Solution: L,arn a4 code$peedy Fitness Score: 3 Gen: 36 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 37 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 38 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 39 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 40 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 41 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 42 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 43 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 44 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 45 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 46 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 47 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 48 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 49 Solution: Learn aH code(peedy Fitness Score: 2 Gen: 50 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 51 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 52 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 53 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 54 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 55 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 56 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 57 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 58 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 59 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 60 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 61 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 62 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 63 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 64 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 65 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 66 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 67 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 68 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 69 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 70 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 71 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 72 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 73 Solution: Learn a4 codespeedy Fitness Score: 1 Gen: 74 Solution: Learn at codespeedy Fitness Score: 0
Leave a Reply