代碼過(guò)程中,把代碼過(guò)程較好的一些代碼段記錄起來(lái)涮较,下邊代碼是關(guān)于遺傳算法的神經(jīng)網(wǎng)絡(luò)python實(shí)現(xiàn)的代碼稠鼻,應(yīng)該對(duì)大伙有一些用處。
from operator import itemgetter, attrgetter
import math
import random
import string
import timeit
from timeit import Timer as t
import matplotlib.pyplot as plt
import numpy as np
def sigmoid (x):
? return math.tanh(x)
def makeMatrix ( I, J, fill=0.0):
? m = []
? for i in range(I):
? return m
def randomizeMatrix ( matrix, a, b):
? for i in range ( len (matrix) ):
? ? for j in range ( len (matrix[0]) ):
? ? ? matrix[i][j] = random.uniform(a,b)
class NN:
? def __init__(self, NI, NH, NO):
? ? self.ni = NI
? ? self.nh = NH
? ? self.no = NO
? ? randomizeMatrix ( self.wi, -0.2, 0.2 )
? ? randomizeMatrix ( self.wo, -2.0, 2.0 )
? def runNN (self, inputs):
? ? if len(inputs) != self.ni:
? ? ? print 'incorrect number of inputs'
? ? for i in range(self.ni):
? ? ? self.ai[i] = inputs[i]
? ? for j in range(self.nh):
? ? for k in range(self.no):
? ? return self.ao
? def weights(self):
? ? print 'Input weights:'
? ? for i in range(self.ni):
? ? ? print self.wi[i]
? ? print 'Output weights:'
? ? for j in range(self.nh):
? ? ? print self.wo[j]
? ? print ''
? def test(self, patterns):
? ? results, targets = [], []
? ? for p in patterns:
? ? ? inputs = p[0]
? ? ? rounded = [ round(i) for i in self.runNN(inputs) ]
? ? ? if rounded == p[1]: result = '+++++'
? ? ? else: result = '-----'
? ? ? print '%s %s %s %s %s %s %s' %( 'Inputs:', p[0], '-->', str(self.runNN(inputs)).rjust(65), 'Target', p[1], result)
? ? ? results+= self.runNN(inputs)
? ? ? targets += p[1]
? ? return results, targets
? def sumErrors (self):
? ? error = 0.0
? ? for p in pat:
? ? ? inputs = p[0]
? ? ? targets = p[1]
? ? ? self.runNN(inputs)
? ? ? error += self.calcError(targets)
? ? inverr = 1.0/error
? ? return inverr
? def calcError (self, targets):
? ? error = 0.0
? ? for k in range(len(targets)):
? ? return error
? def assignWeights (self, weights, I):
? ? io = 0
? ? for i in range(self.ni):
? ? ? for j in range(self.nh):
? ? ? ? self.wi[i][j] = weights[I][io][i][j]
? ? io = 1
? ? for j in range(self.nh):
? ? ? for k in range(self.no):
? ? ? ? self.wo[j][k] = weights[I][io][j][k]
? def testWeights (self, weights, I):
? ? same = []
? ? io = 0
? ? for i in range(self.ni):
? ? ? for j in range(self.nh):
? ? ? ? if self.wi[i][j] != weights[I][io][i][j]:
? ? ? ? ? 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)))
? ? io = 1
? ? for j in range(self.nh):
? ? ? for k in range(self.no):
? ? ? ? if self.wo[j][k] !=? weights[I][io][j][k]:
? ? ? ? ? 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)))
? ? if same != []:
? ? ? print same
def roulette (fitnessScores):
? cumalativeFitness = 0.0
? r = random.random()
? for i in range(len(fitnessScores)):
? ? cumalativeFitness += fitnessScores[i]
? ? if cumalativeFitness > r:
? ? ? return i
def calcFit (numbers):? # each fitness is a fraction of the total error
? total, fitnesses = sum(numbers), []
? for i in range(len(numbers)):? ? ? ? ?
? ? fitnesses.append(numbers[i]/total)
? return fitnesses
# takes a population of NN objects
def pairPop (pop):
? weights, errors = [], []
? for i in range(len(pop)):? ? ? ? ? ? ? ? # for each individual
? ? weights.append([pop[i].wi,pop[i].wo])? # append input & output weights of individual to list of all pop weights
? ? errors.append(pop[i].sumErrors())? ? ? # append 1/sum(MSEs) of individual to list of pop errors
? fitnesses = calcFit(errors)? ? ? ? ? ? ? # fitnesses are a fraction of the total error
? del pop
? return zip(weights, errors,fitnesses)? ? ? ? ? ? # weights become item[0] and fitnesses[1] in this way fitness is paired with its weight in a tuple
def rankPop (newpopW,pop):
? errors, copy = [], []? ? ? ? ? # a fresh pop of NN's are assigned to a list of len pop_size
? pop = [NN(ni,nh,no) for i in range(pop_size) ]
? for i in range(pop_size): copy.append(newpopW[i])
? for i in range(pop_size):?
? ? pop[i].assignWeights(newpopW, i)# each individual is assigned the weights generated from previous iteration
? ? pop[i].testWeights(newpopW, i)
? for i in range(pop_size):?
? ? pop[i].testWeights(newpopW, i)
? pairedPop = pairPop(pop)? ? ? ? ? # the fitness of these weights is calculated and tupled with the weights
? rankedPop = sorted(pairedPop, key = itemgetter(-1), reverse = True)? # weights are sorted in descending order of fitness (fittest first)
? errors = [ eval(repr(x[1])) for x in rankedPop ]
? return rankedPop, eval(repr(rankedPop[0][1])), float(sum(errors))/float(len(errors))
def iteratePop (rankedPop):
? rankedWeights = [ item[0] for item in rankedPop]
? fitnessScores = [ item[-1] for item in rankedPop]
? while len(newpopW) <= pop_size:? # Breed two randomly selected but different chromos until pop_size reached
? ? ch1, ch2 = [], []
? ? index1 = roulette(fitnessScores)
? ? index2 = roulette(fitnessScores)
? ? while index1 == index2:? ? ? ? # ensures different chromos are used for breeeding
? ? ? index2 = roulette(fitnessScores)
? ? #index1, index2 = 3,4
? ? ch1.extend(eval(repr(rankedWeights[index1])))
? ? ch2.extend(eval(repr(rankedWeights[index2])))
? ? if random.random() < crossover_rate:
? ? ? ch1, ch2 = crossover(ch1, ch2)
? ? mutate(ch1)
? ? mutate(ch2)
? ? newpopW.append(ch1)
? ? newpopW.append(ch2)
? return newpopW
graphical_error_scale = 100
max_iterations = 4000
pop_size = 100
mutation_rate = 0.1
crossover_rate = 0.8
ni, nh, no = 4,6,1
def main ():
? # Rank first random population
? pop = [ NN(ni,nh,no) for i in range(pop_size) ] # fresh pop
? pairedPop = pairPop(pop)
? rankedPop = sorted(pairedPop, key = itemgetter(-1), reverse = True) # THIS IS CORRECT
? # Keep iterating new pops until max_iterations
? iters = 0
? tops, avgs = [], []
? while iters != max_iterations:
? ? if iters%1 == 0:
? ? ? print 'Iteration'.rjust(150), iters
? ? newpopW = iteratePop(rankedPop)
? ? rankedPop, toperr, avgerr = rankPop(newpopW,pop)
? ? tops.append(toperr)
? ? avgs.append(avgerr)
? ? iters+=1
? # test a NN with the fittest weights
? tester = NN (ni,nh,no)
? fittestWeights = [ x[0] for x in rankedPop ]
? tester.assignWeights(fittestWeights, 0)
? results, targets = tester.test(testpat)
? x = np.arange(0,150)
? title2 = 'Test after '+str(iters)+' iterations'
? plt.title(title2)
? plt.ylabel('Node output')
? plt.xlabel('Instances')
? plt.plot( results, 'xr', linewidth = 0.5)
? plt.plot( targets, 's', color = 'black',linewidth = 3)
? #lines = plt.plot( results, 'sg')
? plt.annotate(s='Target Values', xy = (110, 0),color = 'black', family = 'sans-serif', size? ='small')
? plt.annotate(s='Test Values', xy = (110, 0.5),color = 'red', family = 'sans-serif', size? ='small', weight = 'bold')
? plt.figure(2)
? plt.subplot(121)
? plt.title('Top individual error evolution')
? plt.ylabel('Inverse error')
? plt.xlabel('Iterations')
? plt.plot( tops, '-g', linewidth = 1)
? plt.subplot(122)
? plt.plot( avgs, '-g', linewidth = 1)
? plt.title('Population average error evolution')
? plt.ylabel('Inverse error')
? plt.xlabel('Iterations')
? plt.show()
def crossover (m1, m2):
? for i in range(len(m1)):
? ? for j in range(len(m1[i])):
? ? ? for k in range(len(m1[i][j])):
? ? ? ? if r >= 0:
? ? ? ? ? output1[i][j][k] = m1[i][j][k]
? ? ? ? ? output2[i][j][k] = m2[i][j][k]
? ? ? ? elif r < 0:
? ? ? ? ? output1[i][j][k] = m2[i][j][k]
? ? ? ? ? output2[i][j][k] = m1[i][j][k]
? ? ? ? r -=1
? return output1, output2
def mutate (m):
? # could include a constant to control
? # how much the weight is mutated by
? for i in range(len(m)):
? ? for j in range(len(m[i])):
? ? ? for k in range(len(m[i][j])):
? ? ? ? if random.random() < mutation_rate:
? ? ? ? ? ? m[i][j][k] = random.uniform(-2.0,2.0)
if __name__ == "__main__":
? ? main()
pat = [
? [[5.1, 3.5, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.9, 3.0, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.7, 3.2, 1.3, 0.2], [-1], ['Iris-setosa']] ,
? [[5.4, 3.9, 1.7, 0.4], [-1], ['Iris-setosa']] ,
? [[4.6, 3.4, 1.4, 0.3], [-1], ['Iris-setosa']] ,
? [[5.0, 3.4, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[4.4, 2.9, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
? [[5.4, 3.7, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[4.8, 3.4, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[4.8, 3.0, 1.4, 0.1], [-1], ['Iris-setosa']] ,
? [[4.3, 3.0, 1.1, 0.1], [-1], ['Iris-setosa']] ,
? [[5.8, 4.0, 1.2, 0.2], [-1], ['Iris-setosa']] ,
? [[5.7, 4.4, 1.5, 0.4], [-1], ['Iris-setosa']] ,
? [[5.4, 3.9, 1.3, 0.4], [-1], ['Iris-setosa']] ,
? [[5.1, 3.5, 1.4, 0.3], [-1], ['Iris-setosa']] ,
? [[5.7, 3.8, 1.7, 0.3], [-1], ['Iris-setosa']] ,
? [[5.1, 3.8, 1.5, 0.3], [-1], ['Iris-setosa']] ,
? [[5.4, 3.4, 1.7, 0.2], [-1], ['Iris-setosa']] ,
? [[5.1, 3.7, 1.5, 0.4], [-1], ['Iris-setosa']] ,
? [[4.6, 3.6, 1.0, 0.2], [-1], ['Iris-setosa']] ,
? [[5.1, 3.3, 1.7, 0.5], [-1], ['Iris-setosa']] ,
? [[4.8, 3.4, 1.9, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.0, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.4, 1.6, 0.4], [-1], ['Iris-setosa']] ,
? [[5.2, 3.5, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[5.2, 3.4, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.7, 3.2, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[4.8, 3.1, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[5.4, 3.4, 1.5, 0.4], [-1], ['Iris-setosa']] ,
? [[5.2, 4.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
? [[5.5, 4.2, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
? [[5.0, 3.2, 1.2, 0.2], [-1], ['Iris-setosa']] ,
? [[5.5, 3.5, 1.3, 0.2], [-1], ['Iris-setosa']] ,
? [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
? [[4.4, 3.0, 1.3, 0.2], [-1], ['Iris-setosa']] ,
? [[5.1, 3.4, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.5, 1.3, 0.3], [-1], ['Iris-setosa']] ,
? [[4.5, 2.3, 1.3, 0.3], [-1], ['Iris-setosa']] ,
? [[4.4, 3.2, 1.3, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.5, 1.6, 0.6], [-1], ['Iris-setosa']] ,
? [[5.1, 3.8, 1.9, 0.4], [-1], ['Iris-setosa']] ,
? [[4.8, 3.0, 1.4, 0.3], [-1], ['Iris-setosa']] ,
? [[5.1, 3.8, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[4.6, 3.2, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[5.3, 3.7, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.3, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[7.0, 3.2, 4.7, 1.4], [0], ['Iris-versicolor']] ,
? [[6.4, 3.2, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[6.9, 3.1, 4.9, 1.5], [0], ['Iris-versicolor']] ,
? [[5.5, 2.3, 4.0, 1.3], [0], ['Iris-versicolor']] ,
? [[6.5, 2.8, 4.6, 1.5], [0], ['Iris-versicolor']] ,
? [[5.7, 2.8, 4.5, 1.3], [0], ['Iris-versicolor']] ,
? [[6.3, 3.3, 4.7, 1.6], [0], ['Iris-versicolor']] ,
? [[4.9, 2.4, 3.3, 1.0], [0], ['Iris-versicolor']] ,
? [[6.6, 2.9, 4.6, 1.3], [0], ['Iris-versicolor']] ,
? [[5.2, 2.7, 3.9, 1.4], [0], ['Iris-versicolor']] ,
? [[5.0, 2.0, 3.5, 1.0], [0], ['Iris-versicolor']] ,
? [[5.9, 3.0, 4.2, 1.5], [0], ['Iris-versicolor']] ,
? [[6.0, 2.2, 4.0, 1.0], [0], ['Iris-versicolor']] ,
? [[6.1, 2.9, 4.7, 1.4], [0], ['Iris-versicolor']] ,
? [[5.6, 2.9, 3.6, 1.3], [0], ['Iris-versicolor']] ,
? [[6.7, 3.1, 4.4, 1.4], [0], ['Iris-versicolor']] ,
? [[5.6, 3.0, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[5.8, 2.7, 4.1, 1.0], [0], ['Iris-versicolor']] ,
? [[6.2, 2.2, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[5.6, 2.5, 3.9, 1.1], [0], ['Iris-versicolor']] ,
? [[5.9, 3.2, 4.8, 1.8], [0], ['Iris-versicolor']] ,
? [[6.1, 2.8, 4.0, 1.3], [0], ['Iris-versicolor']] ,
? [[6.3, 2.5, 4.9, 1.5], [0], ['Iris-versicolor']] ,
? [[6.1, 2.8, 4.7, 1.2], [0], ['Iris-versicolor']] ,
? [[6.4, 2.9, 4.3, 1.3], [0], ['Iris-versicolor']] ,
? [[6.6, 3.0, 4.4, 1.4], [0], ['Iris-versicolor']] ,
? [[6.8, 2.8, 4.8, 1.4], [0], ['Iris-versicolor']] ,
? [[6.7, 3.0, 5.0, 1.7], [0], ['Iris-versicolor']] ,
? [[6.0, 2.9, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[5.7, 2.6, 3.5, 1.0], [0], ['Iris-versicolor']] ,
? [[5.5, 2.4, 3.8, 1.1], [0], ['Iris-versicolor']] ,
? [[5.5, 2.4, 3.7, 1.0], [0], ['Iris-versicolor']] ,
? [[5.8, 2.7, 3.9, 1.2], [0], ['Iris-versicolor']] ,
? [[6.0, 2.7, 5.1, 1.6], [0], ['Iris-versicolor']] ,
? [[5.4, 3.0, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[6.0, 3.4, 4.5, 1.6], [0], ['Iris-versicolor']] ,
? [[6.7, 3.1, 4.7, 1.5], [0], ['Iris-versicolor']] ,
? [[6.3, 2.3, 4.4, 1.3], [0], ['Iris-versicolor']] ,
? [[5.6, 3.0, 4.1, 1.3], [0], ['Iris-versicolor']] ,
? [[6.1, 3.0, 4.6, 1.4], [0], ['Iris-versicolor']] ,
? [[5.8, 2.6, 4.0, 1.2], [0], ['Iris-versicolor']] ,
? [[5.0, 2.3, 3.3, 1.0], [0], ['Iris-versicolor']] ,
? [[5.6, 2.7, 4.2, 1.3], [0], ['Iris-versicolor']] ,
? [[5.7, 3.0, 4.2, 1.2], [0], ['Iris-versicolor']] ,
? [[5.7, 2.9, 4.2, 1.3], [0], ['Iris-versicolor']] ,
? [[6.2, 2.9, 4.3, 1.3], [0], ['Iris-versicolor']] ,
? [[5.1, 2.5, 3.0, 1.1], [0], ['Iris-versicolor']] ,
? [[5.7, 2.8, 4.1, 1.3], [0], ['Iris-versicolor']] ,
? [[6.3, 3.3, 6.0, 2.5], [1], ['Iris-virginica']] ,
? [[5.8, 2.7, 5.1, 1.9], [1], ['Iris-virginica']] ,
? [[7.1, 3.0, 5.9, 2.1], [1], ['Iris-virginica']] ,
? [[6.3, 2.9, 5.6, 1.8], [1], ['Iris-virginica']] ,
? [[6.5, 3.0, 5.8, 2.2], [1], ['Iris-virginica']] ,
? [[7.6, 3.0, 6.6, 2.1], [1], ['Iris-virginica']] ,
? [[4.9, 2.5, 4.5, 1.7], [1], ['Iris-virginica']] ,
? [[7.3, 2.9, 6.3, 1.8], [1], ['Iris-virginica']] ,
? [[6.7, 2.5, 5.8, 1.8], [1], ['Iris-virginica']] ,
? [[7.2, 3.6, 6.1, 2.5], [1], ['Iris-virginica']] ,
? [[6.5, 3.2, 5.1, 2.0], [1], ['Iris-virginica']] ,
? [[6.4, 2.7, 5.3, 1.9], [1], ['Iris-virginica']] ,
? [[6.8, 3.0, 5.5, 2.1], [1], ['Iris-virginica']] ,
? [[5.7, 2.5, 5.0, 2.0], [1], ['Iris-virginica']] ,
? [[5.8, 2.8, 5.1, 2.4], [1], ['Iris-virginica']] ,
? [[7.7, 3.8, 6.7, 2.2], [1], ['Iris-virginica']] ,
? [[7.7, 2.6, 6.9, 2.3], [1], ['Iris-virginica']] ,
? [[6.0, 2.2, 5.0, 1.5], [1], ['Iris-virginica']] ,
? [[6.9, 3.2, 5.7, 2.3], [1], ['Iris-virginica']] ,
? [[5.6, 2.8, 4.9, 2.0], [1], ['Iris-virginica']] ,
? [[7.7, 2.8, 6.7, 2.0], [1], ['Iris-virginica']] ,
? [[6.3, 2.7, 4.9, 1.8], [1], ['Iris-virginica']] ,
? [[6.7, 3.3, 5.7, 2.1], [1], ['Iris-virginica']] ,
? [[7.2, 3.2, 6.0, 1.8], [1], ['Iris-virginica']] ,
? [[6.2, 2.8, 4.8, 1.8], [1], ['Iris-virginica']] ,
? [[6.1, 3.0, 4.9, 1.8], [1], ['Iris-virginica']] ,
? [[6.4, 2.8, 5.6, 2.1], [1], ['Iris-virginica']] ,
? [[7.2, 3.0, 5.8, 1.6], [1], ['Iris-virginica']] ,
? [[7.4, 2.8, 6.1, 1.9], [1], ['Iris-virginica']] ,
? [[7.9, 3.8, 6.4, 2.0], [1], ['Iris-virginica']] ,
? [[6.4, 2.8, 5.6, 2.2], [1], ['Iris-virginica']] ,
? [[6.3, 2.8, 5.1, 1.5], [1], ['Iris-virginica']] ,
? [[6.1, 2.6, 5.6, 1.4], [1], ['Iris-virginica']] ,
? [[7.7, 3.0, 6.1, 2.3], [1], ['Iris-virginica']] ,
? [[6.3, 3.4, 5.6, 2.4], [1], ['Iris-virginica']] ,
? [[6.4, 3.1, 5.5, 1.8], [1], ['Iris-virginica']] ,
? [[6.0, 3.0, 4.8, 1.8], [1], ['Iris-virginica']] ,
? [[6.9, 3.1, 5.4, 2.1], [1], ['Iris-virginica']] ,
? [[6.7, 3.1, 5.6, 2.4], [1], ['Iris-virginica']] ,
? [[6.9, 3.1, 5.1, 2.3], [1], ['Iris-virginica']] ,
? [[5.8, 2.7, 5.1, 1.9], [1], ['Iris-virginica']] ,
? [[6.8, 3.2, 5.9, 2.3], [1], ['Iris-virginica']] ,
? [[6.7, 3.3, 5.7, 2.5], [1], ['Iris-virginica']] ,
? [[6.7, 3.0, 5.2, 2.3], [1], ['Iris-virginica']] ,
? [[6.3, 2.5, 5.0, 1.9], [1], ['Iris-virginica']] ,
? [[6.5, 3.0, 5.2, 2.0], [1], ['Iris-virginica']] ,
? [[6.2, 3.4, 5.4, 2.3], [1], ['Iris-virginica']] ,
? [[5.9, 3.0, 5.1, 1.8], [1], ['Iris-virginica']]
]
testpat = [
? [[5.1, 3.5, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.9, 3.0, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.7, 3.2, 1.3, 0.2], [-1], ['Iris-setosa']] ,
? [[5.4, 3.9, 1.7, 0.4], [-1], ['Iris-setosa']] ,
? [[4.6, 3.4, 1.4, 0.3], [-1], ['Iris-setosa']] ,
? [[5.0, 3.4, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[4.4, 2.9, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
? [[5.4, 3.7, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[4.8, 3.4, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[4.8, 3.0, 1.4, 0.1], [-1], ['Iris-setosa']] ,
? [[4.3, 3.0, 1.1, 0.1], [-1], ['Iris-setosa']] ,
? [[5.8, 4.0, 1.2, 0.2], [-1], ['Iris-setosa']] ,
? [[5.7, 4.4, 1.5, 0.4], [-1], ['Iris-setosa']] ,
? [[5.4, 3.9, 1.3, 0.4], [-1], ['Iris-setosa']] ,
? [[5.1, 3.5, 1.4, 0.3], [-1], ['Iris-setosa']] ,
? [[5.7, 3.8, 1.7, 0.3], [-1], ['Iris-setosa']] ,
? [[5.1, 3.8, 1.5, 0.3], [-1], ['Iris-setosa']] ,
? [[5.4, 3.4, 1.7, 0.2], [-1], ['Iris-setosa']] ,
? [[5.1, 3.7, 1.5, 0.4], [-1], ['Iris-setosa']] ,
? [[4.6, 3.6, 1.0, 0.2], [-1], ['Iris-setosa']] ,
? [[5.1, 3.3, 1.7, 0.5], [-1], ['Iris-setosa']] ,
? [[4.8, 3.4, 1.9, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.0, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.4, 1.6, 0.4], [-1], ['Iris-setosa']] ,
? [[5.2, 3.5, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[5.2, 3.4, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.7, 3.2, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[4.8, 3.1, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[5.4, 3.4, 1.5, 0.4], [-1], ['Iris-setosa']] ,
? [[5.2, 4.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
? [[5.5, 4.2, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
? [[5.0, 3.2, 1.2, 0.2], [-1], ['Iris-setosa']] ,
? [[5.5, 3.5, 1.3, 0.2], [-1], ['Iris-setosa']] ,
? [[4.9, 3.1, 1.5, 0.1], [-1], ['Iris-setosa']] ,
? [[4.4, 3.0, 1.3, 0.2], [-1], ['Iris-setosa']] ,
? [[5.1, 3.4, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.5, 1.3, 0.3], [-1], ['Iris-setosa']] ,
? [[4.5, 2.3, 1.3, 0.3], [-1], ['Iris-setosa']] ,
? [[4.4, 3.2, 1.3, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.5, 1.6, 0.6], [-1], ['Iris-setosa']] ,
? [[5.1, 3.8, 1.9, 0.4], [-1], ['Iris-setosa']] ,
? [[4.8, 3.0, 1.4, 0.3], [-1], ['Iris-setosa']] ,
? [[5.1, 3.8, 1.6, 0.2], [-1], ['Iris-setosa']] ,
? [[4.6, 3.2, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[5.3, 3.7, 1.5, 0.2], [-1], ['Iris-setosa']] ,
? [[5.0, 3.3, 1.4, 0.2], [-1], ['Iris-setosa']] ,
? [[7.0, 3.2, 4.7, 1.4], [0], ['Iris-versicolor']] ,
? [[6.4, 3.2, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[6.9, 3.1, 4.9, 1.5], [0], ['Iris-versicolor']] ,
? [[5.5, 2.3, 4.0, 1.3], [0], ['Iris-versicolor']] ,
? [[6.5, 2.8, 4.6, 1.5], [0], ['Iris-versicolor']] ,
? [[5.7, 2.8, 4.5, 1.3], [0], ['Iris-versicolor']] ,
? [[6.3, 3.3, 4.7, 1.6], [0], ['Iris-versicolor']] ,
? [[4.9, 2.4, 3.3, 1.0], [0], ['Iris-versicolor']] ,
? [[6.6, 2.9, 4.6, 1.3], [0], ['Iris-versicolor']] ,
? [[5.2, 2.7, 3.9, 1.4], [0], ['Iris-versicolor']] ,
? [[5.0, 2.0, 3.5, 1.0], [0], ['Iris-versicolor']] ,
? [[5.9, 3.0, 4.2, 1.5], [0], ['Iris-versicolor']] ,
? [[6.0, 2.2, 4.0, 1.0], [0], ['Iris-versicolor']] ,
? [[6.1, 2.9, 4.7, 1.4], [0], ['Iris-versicolor']] ,
? [[5.6, 2.9, 3.6, 1.3], [0], ['Iris-versicolor']] ,
? [[6.7, 3.1, 4.4, 1.4], [0], ['Iris-versicolor']] ,
? [[5.6, 3.0, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[5.8, 2.7, 4.1, 1.0], [0], ['Iris-versicolor']] ,
? [[6.2, 2.2, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[5.6, 2.5, 3.9, 1.1], [0], ['Iris-versicolor']] ,
? [[5.9, 3.2, 4.8, 1.8], [0], ['Iris-versicolor']] ,
? [[6.1, 2.8, 4.0, 1.3], [0], ['Iris-versicolor']] ,
? [[6.3, 2.5, 4.9, 1.5], [0], ['Iris-versicolor']] ,
? [[6.1, 2.8, 4.7, 1.2], [0], ['Iris-versicolor']] ,
? [[6.4, 2.9, 4.3, 1.3], [0], ['Iris-versicolor']] ,
? [[6.6, 3.0, 4.4, 1.4], [0], ['Iris-versicolor']] ,
? [[6.8, 2.8, 4.8, 1.4], [0], ['Iris-versicolor']] ,
? [[6.7, 3.0, 5.0, 1.7], [0], ['Iris-versicolor']] ,
? [[6.0, 2.9, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[5.7, 2.6, 3.5, 1.0], [0], ['Iris-versicolor']] ,
? [[5.5, 2.4, 3.8, 1.1], [0], ['Iris-versicolor']] ,
? [[5.5, 2.4, 3.7, 1.0], [0], ['Iris-versicolor']] ,
? [[5.8, 2.7, 3.9, 1.2], [0], ['Iris-versicolor']] ,
? [[6.0, 2.7, 5.1, 1.6], [0], ['Iris-versicolor']] ,
? [[5.4, 3.0, 4.5, 1.5], [0], ['Iris-versicolor']] ,
? [[6.0, 3.4, 4.5, 1.6], [0], ['Iris-versicolor']] ,
? [[6.7, 3.1, 4.7, 1.5], [0], ['Iris-versicolor']] ,
? [[6.3, 2.3, 4.4, 1.3], [0], ['Iris-versicolor']] ,
? [[5.6, 3.0, 4.1, 1.3], [0], ['Iris-versicolor']] ,
? [[6.1, 3.0, 4.6, 1.4], [0], ['Iris-versicolor']] ,
? [[5.8, 2.6, 4.0, 1.2], [0], ['Iris-versicolor']] ,
? [[5.0, 2.3, 3.3, 1.0], [0], ['Iris-versicolor']] ,
? [[5.6, 2.7, 4.2, 1.3], [0], ['Iris-versicolor']] ,
? [[5.7, 3.0, 4.2, 1.2], [0], ['Iris-versicolor']] ,
? [[5.7, 2.9, 4.2, 1.3], [0], ['Iris-versicolor']] ,
? [[6.2, 2.9, 4.3, 1.3], [0], ['Iris-versicolor']] ,
? [[5.1, 2.5, 3.0, 1.1], [0], ['Iris-versicolor']] ,
? [[5.7, 2.8, 4.1, 1.3], [0], ['Iris-versicolor']] ,
? [[6.3, 3.3, 6.0, 2.5], [1], ['Iris-virginica']] ,
? [[5.8, 2.7, 5.1, 1.9], [1], ['Iris-virginica']] ,
? [[7.1, 3.0, 5.9, 2.1], [1], ['Iris-virginica']] ,
? [[6.3, 2.9, 5.6, 1.8], [1], ['Iris-virginica']] ,
? [[6.5, 3.0, 5.8, 2.2], [1], ['Iris-virginica']] ,
? [[7.6, 3.0, 6.6, 2.1], [1], ['Iris-virginica']] ,
? [[4.9, 2.5, 4.5, 1.7], [1], ['Iris-virginica']] ,
? [[7.3, 2.9, 6.3, 1.8], [1], ['Iris-virginica']] ,
? [[6.7, 2.5, 5.8, 1.8], [1], ['Iris-virginica']] ,
? [[7.2, 3.6, 6.1, 2.5], [1], ['Iris-virginica']] ,
? [[6.5, 3.2, 5.1, 2.0], [1], ['Iris-virginica']] ,
? [[6.4, 2.7, 5.3, 1.9], [1], ['Iris-virginica']] ,
? [[6.8, 3.0, 5.5, 2.1], [1], ['Iris-virginica']] ,
? [[5.7, 2.5, 5.0, 2.0], [1], ['Iris-virginica']] ,
? [[5.8, 2.8, 5.1, 2.4], [1], ['Iris-virginica']] ,
? [[7.7, 3.8, 6.7, 2.2], [1], ['Iris-virginica']] ,
? [[7.7, 2.6, 6.9, 2.3], [1], ['Iris-virginica']] ,
? [[6.0, 2.2, 5.0, 1.5], [1], ['Iris-virginica']] ,
? [[6.9, 3.2, 5.7, 2.3], [1], ['Iris-virginica']] ,
? [[5.6, 2.8, 4.9, 2.0], [1], ['Iris-virginica']] ,
? [[7.7, 2.8, 6.7, 2.0], [1], ['Iris-virginica']] ,
? [[6.3, 2.7, 4.9, 1.8], [1], ['Iris-virginica']] ,
? [[6.7, 3.3, 5.7, 2.1], [1], ['Iris-virginica']] ,
? [[7.2, 3.2, 6.0, 1.8], [1], ['Iris-virginica']] ,
? [[6.2, 2.8, 4.8, 1.8], [1], ['Iris-virginica']] ,
? [[6.1, 3.0, 4.9, 1.8], [1], ['Iris-virginica']] ,
? [[6.4, 2.8, 5.6, 2.1], [1], ['Iris-virginica']] ,
? [[7.2, 3.0, 5.8, 1.6], [1], ['Iris-virginica']] ,
? [[7.4, 2.8, 6.1, 1.9], [1], ['Iris-virginica']] ,
? [[7.9, 3.8, 6.4, 2.0], [1], ['Iris-virginica']] ,
? [[6.4, 2.8, 5.6, 2.2], [1], ['Iris-virginica']] ,
? [[6.3, 2.8, 5.1, 1.5], [1], ['Iris-virginica']] ,
? [[6.1, 2.6, 5.6, 1.4], [1], ['Iris-virginica']] ,
? [[7.7, 3.0, 6.1, 2.3], [1], ['Iris-virginica']] ,
? [[6.3, 3.4, 5.6, 2.4], [1], ['Iris-virginica']] ,
? [[6.4, 3.1, 5.5, 1.8], [1], ['Iris-virginica']] ,
? [[6.0, 3.0, 4.8, 1.8], [1], ['Iris-virginica']] ,
? [[6.9, 3.1, 5.4, 2.1], [1], ['Iris-virginica']] ,
? [[6.7, 3.1, 5.6, 2.4], [1], ['Iris-virginica']] ,
? [[6.9, 3.1, 5.1, 2.3], [1], ['Iris-virginica']] ,
? [[5.8, 2.7, 5.1, 1.9], [1], ['Iris-virginica']] ,
? [[6.8, 3.2, 5.9, 2.3], [1], ['Iris-virginica']] ,
? [[6.7, 3.3, 5.7, 2.5], [1], ['Iris-virginica']] ,
? [[6.7, 3.0, 5.2, 2.3], [1], ['Iris-virginica']] ,
? [[6.3, 2.5, 5.0, 1.9], [1], ['Iris-virginica']] ,
? [[6.5, 3.0, 5.2, 2.0], [1], ['Iris-virginica']] ,
? [[6.2, 3.4, 5.4, 2.3], [1], ['Iris-virginica']] ,
? [[5.9, 3.0, 5.1, 1.8], [1], ['Iris-virginica']]
]