Neural network Python implementation code of genetic algorithm

From , 3 Years ago, written in Python, viewed 226 times.
URL https://pastebin.vip/view/b635f9e3
  1. ## {{{ http://code.activestate.com/recipes/578241/ (r1)
  2. from operator import itemgetter, attrgetter
  3. import math
  4. import random
  5. import string
  6. import timeit
  7. from timeit import Timer as t
  8. import matplotlib.pyplot as plt
  9. import numpy as np
  10.  
  11. def sigmoid (x):
  12.   return math.tanh(x)
  13.  
  14. def makeMatrix ( I, J, fill=0.0):
  15.   m = []
  16.   for i in range(I):
  17.     m.append([fill]*J)
  18.   return m
  19.  
  20. def randomizeMatrix ( matrix, a, b):
  21.   for i in range ( len (matrix) ):
  22.     for j in range ( len (matrix[0]) ):
  23.       matrix[i][j] = random.uniform(a,b)
  24.  
  25. class NN:
  26.   def __init__(self, NI, NH, NO):
  27.     self.ni = NI
  28.     self.nh = NH
  29.     self.no = NO
  30.     self.ai = [1.0]*self.ni
  31.     self.ah = [1.0]*self.nh
  32.     self.ao = [1.0]*self.no
  33.     self.wi = [ [0.0]*self.nh for i in range(self.ni) ]
  34.     self.wo = [ [0.0]*self.no for j in range(self.nh) ]
  35.     randomizeMatrix ( self.wi, -0.2, 0.2 )
  36.     randomizeMatrix ( self.wo, -2.0, 2.0 )
  37.  
  38.   def runNN (self, inputs):
  39.     if len(inputs) != self.ni:
  40.       print 'incorrect number of inputs'
  41.     for i in range(self.ni):
  42.       self.ai[i] = inputs[i]
  43.     for j in range(self.nh):
  44.       self.ah[j] = sigmoid(sum([ self.ai[i]*self.wi[i][j] for i in range(self.ni) ]))
  45.     for k in range(self.no):
  46.       self.ao[k] = sigmoid(sum([ self.ah[j]*self.wo[j][k] for j in range(self.nh) ]))
  47.     return self.ao
  48.  
  49.   def weights(self):
  50.     print 'Input weights:'
  51.     for i in range(self.ni):
  52.       print self.wi[i]
  53.     print
  54.     print 'Output weights:'
  55.     for j in range(self.nh):
  56.       print self.wo[j]
  57.     print ''
  58.  
  59.   def test(self, patterns):
  60.     results, targets = [], []
  61.     for p in patterns:
  62.       inputs = p[0]
  63.       rounded = [ round(i) for i in self.runNN(inputs) ]
  64.       if rounded == p[1]: result = '+++++'
  65.       else: result = '-----'
  66.       print '%s %s %s %s %s %s %s' %( 'Inputs:', p[0], '-->', str(self.runNN(inputs)).rjust(65), 'Target', p[1], result)
  67.       results+= self.runNN(inputs)
  68.       targets += p[1]
  69.     return results, targets
  70.  
  71.   def sumErrors (self):
  72.     error = 0.0
  73.     for p in pat:
  74.       inputs = p[0]
  75.       targets = p[1]
  76.       self.runNN(inputs)
  77.       error += self.calcError(targets)
  78.     inverr = 1.0/error
  79.     return inverr
  80.  
  81.   def calcError (self, targets):
  82.     error = 0.0
  83.     for k in range(len(targets)):
  84.       error += 0.5 * (targets[k]-self.ao[k])**2
  85.     return error
  86.  
  87.   def assignWeights (self, weights, I):
  88.     io = 0
  89.     for i in range(self.ni):
  90.       for j in range(self.nh):
  91.         self.wi[i][j] = weights[I][io][i][j]
  92.     io = 1
  93.     for j in range(self.nh):
  94.       for k in range(self.no):
  95.         self.wo[j][k] = weights[I][io][j][k]
  96.  
  97.   def testWeights (self, weights, I):
  98.     same = []
  99.     io = 0
  100.     for i in range(self.ni):
  101.       for j in range(self.nh):
  102.         if self.wi[i][j] != weights[I][io][i][j]:
  103.           same.append(('I',i,j, round(self.wi[i][j],2),round(weights[I][io][i][j],2),round(self.wi[i][j] - weights[I][io][i][j],2)))
  104.  
  105.     io = 1
  106.     for j in range(self.nh):
  107.       for k in range(self.no):
  108.         if self.wo[j][k] !=  weights[I][io][j][k]:
  109.           same.append((('O',j,k), round(self.wo[j][k],2),round(weights[I][io][j][k],2),round(self.wo[j][k] - weights[I][io][j][k],2)))
  110.     if same != []:
  111.       print same
  112.  
  113. def roulette (fitnessScores):
  114.   cumalativeFitness = 0.0
  115.   r = random.random()
  116.   for i in range(len(fitnessScores)):
  117.     cumalativeFitness += fitnessScores[i]
  118.     if cumalativeFitness > r:
  119.       return i
  120.      
  121. def calcFit (numbers):  # each fitness is a fraction of the total error
  122.   total, fitnesses = sum(numbers), []
  123.   for i in range(len(numbers)):          
  124.     fitnesses.append(numbers[i]/total)
  125.   return fitnesses
  126.  
  127. # takes a population of NN objects
  128. def pairPop (pop):
  129.   weights, errors = [], []
  130.   for i in range(len(pop)):                 # for each individual
  131.     weights.append([pop[i].wi,pop[i].wo])   # append input & output weights of individual to list of all pop weights
  132.     errors.append(pop[i].sumErrors())       # append 1/sum(MSEs) of individual to list of pop errors
  133.   fitnesses = calcFit(errors)               # fitnesses are a fraction of the total error
  134.   for i in range(int(pop_size*0.15)):
  135.     print str(i).zfill(2), '1/sum(MSEs)', str(errors[i]).rjust(15), str(int(errors[i]*graphical_error_scale)*'-').rjust(20), 'fitness'.rjust(12), str(fitnesses[i]).rjust(17), str(int(fitnesses[i]*1000)*'-').rjust(20)
  136.   del pop
  137.   return zip(weights, errors,fitnesses)            # weights become item[0] and fitnesses[1] in this way fitness is paired with its weight in a tuple
  138.  
  139. def rankPop (newpopW,pop):
  140.   errors, copy = [], []           # a fresh pop of NN's are assigned to a list of len pop_size
  141.   #pop = [NN(ni,nh,no)]*pop_size # this does not work as they are all copies of eachother
  142.   pop = [NN(ni,nh,no) for i in range(pop_size) ]
  143.   for i in range(pop_size): copy.append(newpopW[i])
  144.   for i in range(pop_size):  
  145.     pop[i].assignWeights(newpopW, i)                                    # each individual is assigned the weights generated from previous iteration
  146.     pop[i].testWeights(newpopW, i)
  147.   for i in range(pop_size):  
  148.     pop[i].testWeights(newpopW, i)
  149.   pairedPop = pairPop(pop)                                              # the fitness of these weights is calculated and tupled with the weights
  150.   rankedPop = sorted(pairedPop, key = itemgetter(-1), reverse = True)   # weights are sorted in descending order of fitness (fittest first)
  151.   errors = [ eval(repr(x[1])) for x in rankedPop ]
  152.   return rankedPop, eval(repr(rankedPop[0][1])), float(sum(errors))/float(len(errors))
  153.  
  154. def iteratePop (rankedPop):
  155.   rankedWeights = [ item[0] for item in rankedPop]
  156.   fitnessScores = [ item[-1] for item in rankedPop]
  157.   newpopW = [ eval(repr(x)) for x in rankedWeights[:int(pop_size*0.15)] ]
  158.   while len(newpopW) <= pop_size:                                       # Breed two randomly selected but different chromos until pop_size reached
  159.     ch1, ch2 = [], []
  160.     index1 = roulette(fitnessScores)                                    
  161.     index2 = roulette(fitnessScores)
  162.     while index1 == index2:                                             # ensures different chromos are used for breeeding
  163.       index2 = roulette(fitnessScores)
  164.     #index1, index2 = 3,4
  165.     ch1.extend(eval(repr(rankedWeights[index1])))
  166.     ch2.extend(eval(repr(rankedWeights[index2])))
  167.     if random.random() < crossover_rate:
  168.       ch1, ch2 = crossover(ch1, ch2)
  169.     mutate(ch1)
  170.     mutate(ch2)
  171.     newpopW.append(ch1)
  172.     newpopW.append(ch2)
  173.   return newpopW
  174.  
  175. graphical_error_scale = 100
  176. max_iterations = 4000
  177. pop_size = 100
  178. mutation_rate = 0.1
  179. crossover_rate = 0.8
  180. ni, nh, no = 4,6,1
  181.  
  182. def main ():
  183.   # Rank first random population
  184.   pop = [ NN(ni,nh,no) for i in range(pop_size) ] # fresh pop
  185.   pairedPop = pairPop(pop)
  186.   rankedPop = sorted(pairedPop, key = itemgetter(-1), reverse = True) # THIS IS CORRECT
  187.   # Keep iterating new pops until max_iterations
  188.   iters = 0
  189.   tops, avgs = [], []
  190.   while iters != max_iterations:
  191.     if iters%1 == 0:
  192.       print 'Iteration'.rjust(150), iters
  193.     newpopW = iteratePop(rankedPop)
  194.     rankedPop, toperr, avgerr = rankPop(newpopW,pop)
  195.     tops.append(toperr)
  196.     avgs.append(avgerr)
  197.     iters+=1
  198.  
  199.   # test a NN with the fittest weights
  200.   tester = NN (ni,nh,no)
  201.   fittestWeights = [ x[0] for x in rankedPop ]
  202.   tester.assignWeights(fittestWeights, 0)
  203.   results, targets = tester.test(testpat)
  204.   x = np.arange(0,150)
  205.   title2 = 'Test after '+str(iters)+' iterations'
  206.   plt.title(title2)
  207.   plt.ylabel('Node output')
  208.   plt.xlabel('Instances')
  209.   plt.plot( results, 'xr', linewidth = 0.5)
  210.   plt.plot( targets, 's', color = 'black',linewidth = 3)
  211.   #lines = plt.plot( results, 'sg')
  212.   plt.annotate(s='Target Values', xy = (110, 0),color = 'black', family = 'sans-serif', size  ='small')
  213.   plt.annotate(s='Test Values', xy = (110, 0.5),color = 'red', family = 'sans-serif', size  ='small', weight = 'bold')
  214.   plt.figure(2)
  215.   plt.subplot(121)
  216.   plt.title('Top individual error evolution')
  217.   plt.ylabel('Inverse error')
  218.   plt.xlabel('Iterations')
  219.   plt.plot( tops, '-g', linewidth = 1)
  220.   plt.subplot(122)
  221.   plt.plot( avgs, '-g', linewidth = 1)
  222.   plt.title('Population average error evolution')
  223.   plt.ylabel('Inverse error')
  224.   plt.xlabel('Iterations')
  225.  
  226.   plt.show()
  227.  
  228.   print 'max_iterations',max_iterations,'\tpop_size',pop_size,'pop_size*0.15',int(pop_size*0.15),'\tmutation_rate',mutation_rate,'crossover_rate',crossover_rate,'ni, nh, no',ni, nh, no
  229.  
  230. def crossover (m1, m2):
  231.   r = random.randint(0, (ni*nh)+(nh*no) ) # ni*nh+nh*no  = total weights
  232.   output1 = [ [[0.0]*nh]*ni ,[[0.0]*no]*nh ]
  233.   output2 = [ [[0.0]*nh]*ni ,[[0.0]*no]*nh ]
  234.   for i in range(len(m1)):
  235.     for j in range(len(m1[i])):
  236.       for k in range(len(m1[i][j])):
  237.         if r >= 0:
  238.           output1[i][j][k] = m1[i][j][k]
  239.           output2[i][j][k] = m2[i][j][k]
  240.         elif r < 0:
  241.           output1[i][j][k] = m2[i][j][k]
  242.           output2[i][j][k] = m1[i][j][k]
  243.         r -=1
  244.   return output1, output2
  245.  
  246. def mutate (m):
  247.   # could include a constant to control
  248.   # how much the weight is mutated by
  249.   for i in range(len(m)):
  250.     for j in range(len(m[i])):
  251.       for k in range(len(m[i][j])):
  252.         if random.random() < mutation_rate:
  253.             m[i][j][k] = random.uniform(-2.0,2.0)
  254.  
  255. if __name__ == "__main__":
  256.     main()
  257. pat = [
  258.   [[5.1, 3.5, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  259.   [[4.9, 3.0, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  260.   [[4.7, 3.2, 1.3, 0.2], [-1], ['Iris-setosa']] ,
  261.   [[5.4, 3.9, 1.7, 0.4], [-1], ['Iris-setosa']] ,
  262.   [[4.6, 3.4, 1.4, 0.3], [-1], ['Iris-setosa']] ,
  263.   [[5.0, 3.4, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  264.   [[4.4, 2.9, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  265.   [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
  266.   [[5.4, 3.7, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  267.   [[4.8, 3.4, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  268.   [[4.8, 3.0, 1.4, 0.1], [-1], ['Iris-setosa']] ,
  269.   [[4.3, 3.0, 1.1, 0.1], [-1], ['Iris-setosa']] ,
  270.   [[5.8, 4.0, 1.2, 0.2], [-1], ['Iris-setosa']] ,
  271.   [[5.7, 4.4, 1.5, 0.4], [-1], ['Iris-setosa']] ,
  272.   [[5.4, 3.9, 1.3, 0.4], [-1], ['Iris-setosa']] ,
  273.   [[5.1, 3.5, 1.4, 0.3], [-1], ['Iris-setosa']] ,
  274.   [[5.7, 3.8, 1.7, 0.3], [-1], ['Iris-setosa']] ,
  275.   [[5.1, 3.8, 1.5, 0.3], [-1], ['Iris-setosa']] ,
  276.   [[5.4, 3.4, 1.7, 0.2], [-1], ['Iris-setosa']] ,
  277.   [[5.1, 3.7, 1.5, 0.4], [-1], ['Iris-setosa']] ,
  278.   [[4.6, 3.6, 1.0, 0.2], [-1], ['Iris-setosa']] ,
  279.   [[5.1, 3.3, 1.7, 0.5], [-1], ['Iris-setosa']] ,
  280.   [[4.8, 3.4, 1.9, 0.2], [-1], ['Iris-setosa']] ,
  281.   [[5.0, 3.0, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  282.   [[5.0, 3.4, 1.6, 0.4], [-1], ['Iris-setosa']] ,
  283.   [[5.2, 3.5, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  284.   [[5.2, 3.4, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  285.   [[4.7, 3.2, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  286.   [[4.8, 3.1, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  287.   [[5.4, 3.4, 1.5, 0.4], [-1], ['Iris-setosa']] ,
  288.   [[5.2, 4.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
  289.   [[5.5, 4.2, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  290.   [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
  291.   [[5.0, 3.2, 1.2, 0.2], [-1], ['Iris-setosa']] ,
  292.   [[5.5, 3.5, 1.3, 0.2], [-1], ['Iris-setosa']] ,
  293.   [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
  294.   [[4.4, 3.0, 1.3, 0.2], [-1], ['Iris-setosa']] ,
  295.   [[5.1, 3.4, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  296.   [[5.0, 3.5, 1.3, 0.3], [-1], ['Iris-setosa']] ,
  297.   [[4.5, 2.3, 1.3, 0.3], [-1], ['Iris-setosa']] ,
  298.   [[4.4, 3.2, 1.3, 0.2], [-1], ['Iris-setosa']] ,
  299.   [[5.0, 3.5, 1.6, 0.6], [-1], ['Iris-setosa']] ,
  300.   [[5.1, 3.8, 1.9, 0.4], [-1], ['Iris-setosa']] ,
  301.   [[4.8, 3.0, 1.4, 0.3], [-1], ['Iris-setosa']] ,
  302.   [[5.1, 3.8, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  303.   [[4.6, 3.2, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  304.   [[5.3, 3.7, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  305.   [[5.0, 3.3, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  306.   [[7.0, 3.2, 4.7, 1.4], [0], ['Iris-versicolor']] ,
  307.   [[6.4, 3.2, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  308.   [[6.9, 3.1, 4.9, 1.5], [0], ['Iris-versicolor']] ,
  309.   [[5.5, 2.3, 4.0, 1.3], [0], ['Iris-versicolor']] ,
  310.   [[6.5, 2.8, 4.6, 1.5], [0], ['Iris-versicolor']] ,
  311.   [[5.7, 2.8, 4.5, 1.3], [0], ['Iris-versicolor']] ,
  312.   [[6.3, 3.3, 4.7, 1.6], [0], ['Iris-versicolor']] ,
  313.   [[4.9, 2.4, 3.3, 1.0], [0], ['Iris-versicolor']] ,
  314.   [[6.6, 2.9, 4.6, 1.3], [0], ['Iris-versicolor']] ,
  315.   [[5.2, 2.7, 3.9, 1.4], [0], ['Iris-versicolor']] ,
  316.   [[5.0, 2.0, 3.5, 1.0], [0], ['Iris-versicolor']] ,
  317.   [[5.9, 3.0, 4.2, 1.5], [0], ['Iris-versicolor']] ,
  318.   [[6.0, 2.2, 4.0, 1.0], [0], ['Iris-versicolor']] ,
  319.   [[6.1, 2.9, 4.7, 1.4], [0], ['Iris-versicolor']] ,
  320.   [[5.6, 2.9, 3.6, 1.3], [0], ['Iris-versicolor']] ,
  321.   [[6.7, 3.1, 4.4, 1.4], [0], ['Iris-versicolor']] ,
  322.   [[5.6, 3.0, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  323.   [[5.8, 2.7, 4.1, 1.0], [0], ['Iris-versicolor']] ,
  324.   [[6.2, 2.2, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  325.   [[5.6, 2.5, 3.9, 1.1], [0], ['Iris-versicolor']] ,
  326.   [[5.9, 3.2, 4.8, 1.8], [0], ['Iris-versicolor']] ,
  327.   [[6.1, 2.8, 4.0, 1.3], [0], ['Iris-versicolor']] ,
  328.   [[6.3, 2.5, 4.9, 1.5], [0], ['Iris-versicolor']] ,
  329.   [[6.1, 2.8, 4.7, 1.2], [0], ['Iris-versicolor']] ,
  330.   [[6.4, 2.9, 4.3, 1.3], [0], ['Iris-versicolor']] ,
  331.   [[6.6, 3.0, 4.4, 1.4], [0], ['Iris-versicolor']] ,
  332.   [[6.8, 2.8, 4.8, 1.4], [0], ['Iris-versicolor']] ,
  333.   [[6.7, 3.0, 5.0, 1.7], [0], ['Iris-versicolor']] ,
  334.   [[6.0, 2.9, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  335.   [[5.7, 2.6, 3.5, 1.0], [0], ['Iris-versicolor']] ,
  336.   [[5.5, 2.4, 3.8, 1.1], [0], ['Iris-versicolor']] ,
  337.   [[5.5, 2.4, 3.7, 1.0], [0], ['Iris-versicolor']] ,
  338.   [[5.8, 2.7, 3.9, 1.2], [0], ['Iris-versicolor']] ,
  339.   [[6.0, 2.7, 5.1, 1.6], [0], ['Iris-versicolor']] ,
  340.   [[5.4, 3.0, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  341.   [[6.0, 3.4, 4.5, 1.6], [0], ['Iris-versicolor']] ,
  342.   [[6.7, 3.1, 4.7, 1.5], [0], ['Iris-versicolor']] ,
  343.   [[6.3, 2.3, 4.4, 1.3], [0], ['Iris-versicolor']] ,
  344.   [[5.6, 3.0, 4.1, 1.3], [0], ['Iris-versicolor']] ,
  345.   [[6.1, 3.0, 4.6, 1.4], [0], ['Iris-versicolor']] ,
  346.   [[5.8, 2.6, 4.0, 1.2], [0], ['Iris-versicolor']] ,
  347.   [[5.0, 2.3, 3.3, 1.0], [0], ['Iris-versicolor']] ,
  348.   [[5.6, 2.7, 4.2, 1.3], [0], ['Iris-versicolor']] ,
  349.   [[5.7, 3.0, 4.2, 1.2], [0], ['Iris-versicolor']] ,
  350.   [[5.7, 2.9, 4.2, 1.3], [0], ['Iris-versicolor']] ,
  351.   [[6.2, 2.9, 4.3, 1.3], [0], ['Iris-versicolor']] ,
  352.   [[5.1, 2.5, 3.0, 1.1], [0], ['Iris-versicolor']] ,
  353.   [[5.7, 2.8, 4.1, 1.3], [0], ['Iris-versicolor']] ,
  354.   [[6.3, 3.3, 6.0, 2.5], [1], ['Iris-virginica']] ,
  355.   [[5.8, 2.7, 5.1, 1.9], [1], ['Iris-virginica']] ,
  356.   [[7.1, 3.0, 5.9, 2.1], [1], ['Iris-virginica']] ,
  357.   [[6.3, 2.9, 5.6, 1.8], [1], ['Iris-virginica']] ,
  358.   [[6.5, 3.0, 5.8, 2.2], [1], ['Iris-virginica']] ,
  359.   [[7.6, 3.0, 6.6, 2.1], [1], ['Iris-virginica']] ,
  360.   [[4.9, 2.5, 4.5, 1.7], [1], ['Iris-virginica']] ,
  361.   [[7.3, 2.9, 6.3, 1.8], [1], ['Iris-virginica']] ,
  362.   [[6.7, 2.5, 5.8, 1.8], [1], ['Iris-virginica']] ,
  363.   [[7.2, 3.6, 6.1, 2.5], [1], ['Iris-virginica']] ,
  364.   [[6.5, 3.2, 5.1, 2.0], [1], ['Iris-virginica']] ,
  365.   [[6.4, 2.7, 5.3, 1.9], [1], ['Iris-virginica']] ,
  366.   [[6.8, 3.0, 5.5, 2.1], [1], ['Iris-virginica']] ,
  367.   [[5.7, 2.5, 5.0, 2.0], [1], ['Iris-virginica']] ,
  368.   [[5.8, 2.8, 5.1, 2.4], [1], ['Iris-virginica']] ,
  369.   [[7.7, 3.8, 6.7, 2.2], [1], ['Iris-virginica']] ,
  370.   [[7.7, 2.6, 6.9, 2.3], [1], ['Iris-virginica']] ,
  371.   [[6.0, 2.2, 5.0, 1.5], [1], ['Iris-virginica']] ,
  372.   [[6.9, 3.2, 5.7, 2.3], [1], ['Iris-virginica']] ,
  373.   [[5.6, 2.8, 4.9, 2.0], [1], ['Iris-virginica']] ,
  374.   [[7.7, 2.8, 6.7, 2.0], [1], ['Iris-virginica']] ,
  375.   [[6.3, 2.7, 4.9, 1.8], [1], ['Iris-virginica']] ,
  376.   [[6.7, 3.3, 5.7, 2.1], [1], ['Iris-virginica']] ,
  377.   [[7.2, 3.2, 6.0, 1.8], [1], ['Iris-virginica']] ,
  378.   [[6.2, 2.8, 4.8, 1.8], [1], ['Iris-virginica']] ,
  379.   [[6.1, 3.0, 4.9, 1.8], [1], ['Iris-virginica']] ,
  380.   [[6.4, 2.8, 5.6, 2.1], [1], ['Iris-virginica']] ,
  381.   [[7.2, 3.0, 5.8, 1.6], [1], ['Iris-virginica']] ,
  382.   [[7.4, 2.8, 6.1, 1.9], [1], ['Iris-virginica']] ,
  383.   [[7.9, 3.8, 6.4, 2.0], [1], ['Iris-virginica']] ,
  384.   [[6.4, 2.8, 5.6, 2.2], [1], ['Iris-virginica']] ,
  385.   [[6.3, 2.8, 5.1, 1.5], [1], ['Iris-virginica']] ,
  386.   [[6.1, 2.6, 5.6, 1.4], [1], ['Iris-virginica']] ,
  387.   [[7.7, 3.0, 6.1, 2.3], [1], ['Iris-virginica']] ,
  388.   [[6.3, 3.4, 5.6, 2.4], [1], ['Iris-virginica']] ,
  389.   [[6.4, 3.1, 5.5, 1.8], [1], ['Iris-virginica']] ,
  390.   [[6.0, 3.0, 4.8, 1.8], [1], ['Iris-virginica']] ,
  391.   [[6.9, 3.1, 5.4, 2.1], [1], ['Iris-virginica']] ,
  392.   [[6.7, 3.1, 5.6, 2.4], [1], ['Iris-virginica']] ,
  393.   [[6.9, 3.1, 5.1, 2.3], [1], ['Iris-virginica']] ,
  394.   [[5.8, 2.7, 5.1, 1.9], [1], ['Iris-virginica']] ,
  395.   [[6.8, 3.2, 5.9, 2.3], [1], ['Iris-virginica']] ,
  396.   [[6.7, 3.3, 5.7, 2.5], [1], ['Iris-virginica']] ,
  397.   [[6.7, 3.0, 5.2, 2.3], [1], ['Iris-virginica']] ,
  398.   [[6.3, 2.5, 5.0, 1.9], [1], ['Iris-virginica']] ,
  399.   [[6.5, 3.0, 5.2, 2.0], [1], ['Iris-virginica']] ,
  400.   [[6.2, 3.4, 5.4, 2.3], [1], ['Iris-virginica']] ,
  401.   [[5.9, 3.0, 5.1, 1.8], [1], ['Iris-virginica']]
  402. ]
  403.  
  404. testpat = [
  405.   [[5.1, 3.5, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  406.   [[4.9, 3.0, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  407.   [[4.7, 3.2, 1.3, 0.2], [-1], ['Iris-setosa']] ,
  408.   [[5.4, 3.9, 1.7, 0.4], [-1], ['Iris-setosa']] ,
  409.   [[4.6, 3.4, 1.4, 0.3], [-1], ['Iris-setosa']] ,
  410.   [[5.0, 3.4, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  411.   [[4.4, 2.9, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  412.   [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
  413.   [[5.4, 3.7, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  414.   [[4.8, 3.4, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  415.   [[4.8, 3.0, 1.4, 0.1], [-1], ['Iris-setosa']] ,
  416.   [[4.3, 3.0, 1.1, 0.1], [-1], ['Iris-setosa']] ,
  417.   [[5.8, 4.0, 1.2, 0.2], [-1], ['Iris-setosa']] ,
  418.   [[5.7, 4.4, 1.5, 0.4], [-1], ['Iris-setosa']] ,
  419.   [[5.4, 3.9, 1.3, 0.4], [-1], ['Iris-setosa']] ,
  420.   [[5.1, 3.5, 1.4, 0.3], [-1], ['Iris-setosa']] ,
  421.   [[5.7, 3.8, 1.7, 0.3], [-1], ['Iris-setosa']] ,
  422.   [[5.1, 3.8, 1.5, 0.3], [-1], ['Iris-setosa']] ,
  423.   [[5.4, 3.4, 1.7, 0.2], [-1], ['Iris-setosa']] ,
  424.   [[5.1, 3.7, 1.5, 0.4], [-1], ['Iris-setosa']] ,
  425.   [[4.6, 3.6, 1.0, 0.2], [-1], ['Iris-setosa']] ,
  426.   [[5.1, 3.3, 1.7, 0.5], [-1], ['Iris-setosa']] ,
  427.   [[4.8, 3.4, 1.9, 0.2], [-1], ['Iris-setosa']] ,
  428.   [[5.0, 3.0, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  429.   [[5.0, 3.4, 1.6, 0.4], [-1], ['Iris-setosa']] ,
  430.   [[5.2, 3.5, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  431.   [[5.2, 3.4, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  432.   [[4.7, 3.2, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  433.   [[4.8, 3.1, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  434.   [[5.4, 3.4, 1.5, 0.4], [-1], ['Iris-setosa']] ,
  435.   [[5.2, 4.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
  436.   [[5.5, 4.2, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  437.   [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
  438.   [[5.0, 3.2, 1.2, 0.2], [-1], ['Iris-setosa']] ,
  439.   [[5.5, 3.5, 1.3, 0.2], [-1], ['Iris-setosa']] ,
  440.   [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
  441.   [[4.4, 3.0, 1.3, 0.2], [-1], ['Iris-setosa']] ,
  442.   [[5.1, 3.4, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  443.   [[5.0, 3.5, 1.3, 0.3], [-1], ['Iris-setosa']] ,
  444.   [[4.5, 2.3, 1.3, 0.3], [-1], ['Iris-setosa']] ,
  445.   [[4.4, 3.2, 1.3, 0.2], [-1], ['Iris-setosa']] ,
  446.   [[5.0, 3.5, 1.6, 0.6], [-1], ['Iris-setosa']] ,
  447.   [[5.1, 3.8, 1.9, 0.4], [-1], ['Iris-setosa']] ,
  448.   [[4.8, 3.0, 1.4, 0.3], [-1], ['Iris-setosa']] ,
  449.   [[5.1, 3.8, 1.6, 0.2], [-1], ['Iris-setosa']] ,
  450.   [[4.6, 3.2, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  451.   [[5.3, 3.7, 1.5, 0.2], [-1], ['Iris-setosa']] ,
  452.   [[5.0, 3.3, 1.4, 0.2], [-1], ['Iris-setosa']] ,
  453.   [[7.0, 3.2, 4.7, 1.4], [0], ['Iris-versicolor']] ,
  454.   [[6.4, 3.2, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  455.   [[6.9, 3.1, 4.9, 1.5], [0], ['Iris-versicolor']] ,
  456.   [[5.5, 2.3, 4.0, 1.3], [0], ['Iris-versicolor']] ,
  457.   [[6.5, 2.8, 4.6, 1.5], [0], ['Iris-versicolor']] ,
  458.   [[5.7, 2.8, 4.5, 1.3], [0], ['Iris-versicolor']] ,
  459.   [[6.3, 3.3, 4.7, 1.6], [0], ['Iris-versicolor']] ,
  460.   [[4.9, 2.4, 3.3, 1.0], [0], ['Iris-versicolor']] ,
  461.   [[6.6, 2.9, 4.6, 1.3], [0], ['Iris-versicolor']] ,
  462.   [[5.2, 2.7, 3.9, 1.4], [0], ['Iris-versicolor']] ,
  463.   [[5.0, 2.0, 3.5, 1.0], [0], ['Iris-versicolor']] ,
  464.   [[5.9, 3.0, 4.2, 1.5], [0], ['Iris-versicolor']] ,
  465.   [[6.0, 2.2, 4.0, 1.0], [0], ['Iris-versicolor']] ,
  466.   [[6.1, 2.9, 4.7, 1.4], [0], ['Iris-versicolor']] ,
  467.   [[5.6, 2.9, 3.6, 1.3], [0], ['Iris-versicolor']] ,
  468.   [[6.7, 3.1, 4.4, 1.4], [0], ['Iris-versicolor']] ,
  469.   [[5.6, 3.0, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  470.   [[5.8, 2.7, 4.1, 1.0], [0], ['Iris-versicolor']] ,
  471.   [[6.2, 2.2, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  472.   [[5.6, 2.5, 3.9, 1.1], [0], ['Iris-versicolor']] ,
  473.   [[5.9, 3.2, 4.8, 1.8], [0], ['Iris-versicolor']] ,
  474.   [[6.1, 2.8, 4.0, 1.3], [0], ['Iris-versicolor']] ,
  475.   [[6.3, 2.5, 4.9, 1.5], [0], ['Iris-versicolor']] ,
  476.   [[6.1, 2.8, 4.7, 1.2], [0], ['Iris-versicolor']] ,
  477.   [[6.4, 2.9, 4.3, 1.3], [0], ['Iris-versicolor']] ,
  478.   [[6.6, 3.0, 4.4, 1.4], [0], ['Iris-versicolor']] ,
  479.   [[6.8, 2.8, 4.8, 1.4], [0], ['Iris-versicolor']] ,
  480.   [[6.7, 3.0, 5.0, 1.7], [0], ['Iris-versicolor']] ,
  481.   [[6.0, 2.9, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  482.   [[5.7, 2.6, 3.5, 1.0], [0], ['Iris-versicolor']] ,
  483.   [[5.5, 2.4, 3.8, 1.1], [0], ['Iris-versicolor']] ,
  484.   [[5.5, 2.4, 3.7, 1.0], [0], ['Iris-versicolor']] ,
  485.   [[5.8, 2.7, 3.9, 1.2], [0], ['Iris-versicolor']] ,
  486.   [[6.0, 2.7, 5.1, 1.6], [0], ['Iris-versicolor']] ,
  487.   [[5.4, 3.0, 4.5, 1.5], [0], ['Iris-versicolor']] ,
  488.   [[6.0, 3.4, 4.5, 1.6], [0], ['Iris-versicolor']] ,
  489.   [[6.7, 3.1, 4.7, 1.5], [0], ['Iris-versicolor']] ,
  490.   [[6.3, 2.3, 4.4, 1.3], [0], ['Iris-versicolor']] ,
  491.   [[5.6, 3.0, 4.1, 1.3], [0], ['Iris-versicolor']] ,
  492.   [[6.1, 3.0, 4.6, 1.4], [0], ['Iris-versicolor']] ,
  493.   [[5.8, 2.6, 4.0, 1.2], [0], ['Iris-versicolor']] ,
  494.   [[5.0, 2.3, 3.3, 1.0], [0], ['Iris-versicolor']] ,
  495.   [[5.6, 2.7, 4.2, 1.3], [0], ['Iris-versicolor']] ,
  496.   [[5.7, 3.0, 4.2, 1.2], [0], ['Iris-versicolor']] ,
  497.   [[5.7, 2.9, 4.2, 1.3], [0], ['Iris-versicolor']] ,
  498.   [[6.2, 2.9, 4.3, 1.3], [0], ['Iris-versicolor']] ,
  499.   [[5.1, 2.5, 3.0, 1.1], [0], ['Iris-versicolor']] ,
  500.   [[5.7, 2.8, 4.1, 1.3], [0], ['Iris-versicolor']] ,
  501.   [[6.3, 3.3, 6.0, 2.5], [1], ['Iris-virginica']] ,
  502.   [[5.8, 2.7, 5.1, 1.9], [1], ['Iris-virginica']] ,
  503.   [[7.1, 3.0, 5.9, 2.1], [1], ['Iris-virginica']] ,
  504.   [[6.3, 2.9, 5.6, 1.8], [1], ['Iris-virginica']] ,
  505.   [[6.5, 3.0, 5.8, 2.2], [1], ['Iris-virginica']] ,
  506.   [[7.6, 3.0, 6.6, 2.1], [1], ['Iris-virginica']] ,
  507.   [[4.9, 2.5, 4.5, 1.7], [1], ['Iris-virginica']] ,
  508.   [[7.3, 2.9, 6.3, 1.8], [1], ['Iris-virginica']] ,
  509.   [[6.7, 2.5, 5.8, 1.8], [1], ['Iris-virginica']] ,
  510.   [[7.2, 3.6, 6.1, 2.5], [1], ['Iris-virginica']] ,
  511.   [[6.5, 3.2, 5.1, 2.0], [1], ['Iris-virginica']] ,
  512.   [[6.4, 2.7, 5.3, 1.9], [1], ['Iris-virginica']] ,
  513.   [[6.8, 3.0, 5.5, 2.1], [1], ['Iris-virginica']] ,
  514.   [[5.7, 2.5, 5.0, 2.0], [1], ['Iris-virginica']] ,
  515.   [[5.8, 2.8, 5.1, 2.4], [1], ['Iris-virginica']] ,
  516.   [[7.7, 3.8, 6.7, 2.2], [1], ['Iris-virginica']] ,
  517.   [[7.7, 2.6, 6.9, 2.3], [1], ['Iris-virginica']] ,
  518.   [[6.0, 2.2, 5.0, 1.5], [1], ['Iris-virginica']] ,
  519.   [[6.9, 3.2, 5.7, 2.3], [1], ['Iris-virginica']] ,
  520.   [[5.6, 2.8, 4.9, 2.0], [1], ['Iris-virginica']] ,
  521.   [[7.7, 2.8, 6.7, 2.0], [1], ['Iris-virginica']] ,
  522.   [[6.3, 2.7, 4.9, 1.8], [1], ['Iris-virginica']] ,
  523.   [[6.7, 3.3, 5.7, 2.1], [1], ['Iris-virginica']] ,
  524.   [[7.2, 3.2, 6.0, 1.8], [1], ['Iris-virginica']] ,
  525.   [[6.2, 2.8, 4.8, 1.8], [1], ['Iris-virginica']] ,
  526.   [[6.1, 3.0, 4.9, 1.8], [1], ['Iris-virginica']] ,
  527.   [[6.4, 2.8, 5.6, 2.1], [1], ['Iris-virginica']] ,
  528.   [[7.2, 3.0, 5.8, 1.6], [1], ['Iris-virginica']] ,
  529.   [[7.4, 2.8, 6.1, 1.9], [1], ['Iris-virginica']] ,
  530.   [[7.9, 3.8, 6.4, 2.0], [1], ['Iris-virginica']] ,
  531.   [[6.4, 2.8, 5.6, 2.2], [1], ['Iris-virginica']] ,
  532.   [[6.3, 2.8, 5.1, 1.5], [1], ['Iris-virginica']] ,
  533.   [[6.1, 2.6, 5.6, 1.4], [1], ['Iris-virginica']] ,
  534.   [[7.7, 3.0, 6.1, 2.3], [1], ['Iris-virginica']] ,
  535.   [[6.3, 3.4, 5.6, 2.4], [1], ['Iris-virginica']] ,
  536.   [[6.4, 3.1, 5.5, 1.8], [1], ['Iris-virginica']] ,
  537.   [[6.0, 3.0, 4.8, 1.8], [1], ['Iris-virginica']] ,
  538.   [[6.9, 3.1, 5.4, 2.1], [1], ['Iris-virginica']] ,
  539.   [[6.7, 3.1, 5.6, 2.4], [1], ['Iris-virginica']] ,
  540.   [[6.9, 3.1, 5.1, 2.3], [1], ['Iris-virginica']] ,
  541.   [[5.8, 2.7, 5.1, 1.9], [1], ['Iris-virginica']] ,
  542.   [[6.8, 3.2, 5.9, 2.3], [1], ['Iris-virginica']] ,
  543.   [[6.7, 3.3, 5.7, 2.5], [1], ['Iris-virginica']] ,
  544.   [[6.7, 3.0, 5.2, 2.3], [1], ['Iris-virginica']] ,
  545.   [[6.3, 2.5, 5.0, 1.9], [1], ['Iris-virginica']] ,
  546.   [[6.5, 3.0, 5.2, 2.0], [1], ['Iris-virginica']] ,
  547.   [[6.2, 3.4, 5.4, 2.3], [1], ['Iris-virginica']] ,
  548.   [[5.9, 3.0, 5.1, 1.8], [1], ['Iris-virginica']]
  549. ]
  550. ## end of http://code.activestate.com/recipes/578241/ }}}
  551.  
  552. #//python/4501

Reply to "Neural network Python implementation code of genetic algorithm"

Here you can reply to the paste above

captcha

https://burned.cc - Burn After Reading Website