Praktik Deep Learning dengan Python
[email protected]
MNIST Dataset
• A large database of handwritten digits
that is commonly used for training various image processing systems
• Contains 60,000 training images and 10,000 testing images
28 x 28 pixel
>>> from keras.datasets import mnist
>>> (x_train, y_train), (x_test, y_test) = mnist.load_data()
>>>
>>> print(x_train.shape) (60000, 28, 28)
>>>
Densely Connected Network (or fully connected)
• For recognizing the images of digits
• We should convert every image of the dataset to avector with 784
components
from keras.models import Sequential
from keras.layers.core import Dense, Activation model = Sequential()
model.add(Dense(10, activation='sigmoid', input_shape=(784,))) model.add(Dense(10, activation='softmax'))
x_train = train_images.reshape(60000, 784) x_test = x_test.reshape(10000, 784)
28x28
Deep Learning: Densely Connected Network (Python 7.4)
• 10 nodes in Dense layer. Activation function : sigmoid and ReLu
#contoh deep learning import keras keras.__version__
#--- menyiapkan data training dan testing from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# the data, shuffled and split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data()
#--- x_train = train_images.reshape(60000, 784) x_test = x_test.reshape(10000, 784) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 from keras.utils import to_categorical y_train = keras.utils.to_categorical(y_train, num_classes=10) y_test = keras.utils.to_categorical(y_test, num_classes=10)
#--- model neural network from keras.models import Sequential from keras.layers import Dense from keras.optimizers import sgd model = Sequential()
model.add(Dense(10, activation='sigmoid', input_shape=(784,))) model.add(Dense(10, activation='softmax')) model.summary() batch_size = 100 num_classes = 10 epochs=5 model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=0 )
test_loss, test_acc = model.evaluate(x_test, y_test) print('Test loss:', test_loss) print('Test accuracy:', test_acc)
#contoh deep learning import keras keras.__version__
#--- menyiapkan data training dan testing from keras.datasets import mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# the data, shuffled and split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data()
#--- x_train = train_images.reshape(60000, 784) x_test = x_test.reshape(10000, 784) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 from keras.utils import to_categorical y_train = keras.utils.to_categorical(y_train, num_classes=10) y_test = keras.utils.to_categorical(y_test, num_classes=10)
#--- model neural network : ReLu activation function batch_size = 100 num_classes = 10 epochs=5 model2 = Sequential() model2.add(Dense(10, activation='relu', input_shape=(784,))) model2.add(Dense(10, activation='softmax'))
model2.summary()
model2.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) model2.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=0 )
test_loss, test_acc = model2.evaluate(x_test, y_test) print('Model2 - Test loss:', test_loss) print('Model2 - Test accuracy:', test_acc)
ReLu Actiovation Function
Sigmoid Actiovation Function
Deep Learning: Densely Connected Network (Python 7.4)
• 512 nodes in Dense layer. Activation function : sigmoid and ReLu
#contoh deep learning import keras keras.__version__
#--- menyiapkan data training dan testing from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# the data, shuffled and split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data()
#--- x_train = train_images.reshape(60000, 784) x_test = x_test.reshape(10000, 784) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 from keras.utils import to_categorical y_train = keras.utils.to_categorical(y_train, num_classes=10) y_test = keras.utils.to_categorical(y_test, num_classes=10)
#--- model neural network from keras.models import Sequential from keras.layers import Dense from keras.optimizers import sgd model = Sequential()
model.add(Dense(512, activation='sigmoid', input_shape=(784,))) model.add(Dense(10, activation='softmax')) model.summary() batch_size = 100 num_classes = 10 epochs=5 model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=0 )
test_loss, test_acc = model.evaluate(x_test, y_test) print('Test loss:', test_loss) print('Test accuracy:', test_acc)
#contoh deep learning import keras keras.__version__
#--- menyiapkan data training dan testing from keras.datasets import mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# the data, shuffled and split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data()
#--- x_train = train_images.reshape(60000, 784) x_test = x_test.reshape(10000, 784) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 from keras.utils import to_categorical y_train = keras.utils.to_categorical(y_train, num_classes=10) y_test = keras.utils.to_categorical(y_test, num_classes=10)
#--- model neural network : ReLu activation function batch_size = 100 num_classes = 10 epochs=5 model2 = Sequential()
model2.add(Dense(512, activation='relu', input_shape=(784,))) model2.add(Dense(10, activation='softmax'))
model2.summary()
model2.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) model2.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=0 )
test_loss, test_acc = model2.evaluate(x_test, y_test) print('Model2 - Test loss:', test_loss) print('Model2 - Test accuracy:', test_acc)
ReLu Actiovation Function Sigmoid Actiovation Function
https://github.com/JordiTorresBCN/DEEP-LEARNING-practical-introduction-with-Keras#features
Contoh Deep Learning dengan Iris Dataset
[Membunuh nyamuk dengan meriam
#contoh deep learning ]
import keras keras.__version__
#--- menyiapkan data training dan testing import numpy as np import matplotlib.pyplot as plt import pandas as pd
# Assign colum names to the dataset colnames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
# Read dataset to pandas dataframe irisdata = pd.read_csv("iris-UCI-noheader-num.csv", names=colnames) X = irisdata.drop('Class', axis=1) y = irisdata['Class']
#---
#from sklearn.cross_validation import train_test_split
#from sklearn.model_selection import train_test_split
#X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20)
#--- import numpy as np from random import sample lx = X.shape[0] #length of data fx = int(0.2 * lx) #number of elements you need itest = sample(range(lx),fx) isemua = np.arange(0, lx, 1).tolist() istrain = set(isemua) - set(itest) itrain = list(istrain)
x_train = X.iloc[itrain]
x_test = X.iloc[itest]
y_trainx = y.iloc[itrain]
y_testx = y.iloc[itest]
yy_train = y_trainx xx_train = x_train
from keras.utils import to_categorical y_train = keras.utils.to_categorical(y_trainx, num_classes=3) y_test = keras.utils.to_categorical(y_testx, num_classes=3)
#--- model neural network : ReLu activation function from keras.models import Sequential from keras.layers import Dense from keras.optimizers import sgd batch_size = 100 num_classes = 3 epochs=5 mymodel = Sequential() mymodel.add(Dense(512, activation='relu', input_shape=(4,))) mymodel.add(Dense(3, activation='softmax'))
mymodel.summary()
mymodel.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) mymodel.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=0 )
test_loss, test_acc = mymodel.evaluate(x_test, y_test) print('mymodel - Test loss:', test_loss) print('mymodel - Test accuracy:', test_acc)
5.1,3.5,1.4,0.2,0 4.9,3.0,1.4,0.2,0 4.7,3.2,1.3,0.2,0 4.6,3.1,1.5,0.2,0 5.0,3.6,1.4,0.2,0 5.4,3.9,1.7,0.4,0 4.6,3.4,1.4,0.3,0 5.0,3.4,1.5,0.2,0 4.4,2.9,1.4,0.2,0 4.9,3.1,1.5,0.1,0 5.4,3.7,1.5,0.2,0 4.8,3.4,1.6,0.2,0 4.8,3.0,1.4,0.1,0 4.3,3.0,1.1,0.1,0 5.8,4.0,1.2,0.2,0 5.7,4.4,1.5,0.4,0 5.4,3.9,1.3,0.4,0 5.1,3.5,1.4,0.3,0 5.7,3.8,1.7,0.3,0 5.1,3.8,1.5,0.3,0 5.4,3.4,1.7,0.2,0 5.1,3.7,1.5,0.4,0 4.6,3.6,1.0,0.2,0 5.1,3.3,1.7,0.5,0 4.8,3.4,1.9,0.2,0 5.0,3.0,1.6,0.2,0 5.0,3.4,1.6,0.4,0 5.2,3.5,1.5,0.2,0 5.2,3.4,1.4,0.2,0 4.7,3.2,1.6,0.2,0 4.8,3.1,1.6,0.2,0 5.4,3.4,1.5,0.4,0 5.2,4.1,1.5,0.1,0 5.5,4.2,1.4,0.2,0 4.9,3.1,1.5,0.1,0 5.0,3.2,1.2,0.2,0 5.5,3.5,1.3,0.2,0 4.9,3.1,1.5,0.1,0 4.4,3.0,1.3,0.2,0 5.1,3.4,1.5,0.2,0 5.0,3.5,1.3,0.3,0 4.5,2.3,1.3,0.3,0 4.4,3.2,1.3,0.2,0 5.0,3.5,1.6,0.6,0 5.1,3.8,1.9,0.4,0 4.8,3.0,1.4,0.3,0 5.1,3.8,1.6,0.2,0 4.6,3.2,1.4,0.2,0 5.3,3.7,1.5,0.2,0 5.0,3.3,1.4,0.2,0 7.0,3.2,4.7,1.4,1 6.4,3.2,4.5,1.5,1 6.9,3.1,4.9,1.5,1 5.5,2.3,4.0,1.3,1 6.5,2.8,4.6,1.5,1 5.7,2.8,4.5,1.3,1 6.3,3.3,4.7,1.6,1 4.9,2.4,3.3,1.0,1 6.6,2.9,4.6,1.3,1 5.2,2.7,3.9,1.4,1 5.0,2.0,3.5,1.0,1 5.9,3.0,4.2,1.5,1 6.0,2.2,4.0,1.0,1 6.1,2.9,4.7,1.4,1 5.6,2.9,3.6,1.3,1 6.7,3.1,4.4,1.4,1 5.6,3.0,4.5,1.5,1 5.8,2.7,4.1,1.0,1 6.2,2.2,4.5,1.5,1 5.6,2.5,3.9,1.1,1 5.9,3.2,4.8,1.8,1 6.1,2.8,4.0,1.3,1 6.3,2.5,4.9,1.5,1 6.1,2.8,4.7,1.2,1 6.4,2.9,4.3,1.3,1 6.6,3.0,4.4,1.4,1 6.8,2.8,4.8,1.4,1 6.7,3.0,5.0,1.7,1 6.0,2.9,4.5,1.5,1 5.7,2.6,3.5,1.0,1 5.5,2.4,3.8,1.1,1 5.5,2.4,3.7,1.0,1 5.8,2.7,3.9,1.2,1 6.0,2.7,5.1,1.6,1 5.4,3.0,4.5,1.5,1 6.0,3.4,4.5,1.6,1 6.7,3.1,4.7,1.5,1 6.3,2.3,4.4,1.3,1 5.6,3.0,4.1,1.3,1 5.5,2.5,4.0,1.3,1 5.5,2.6,4.4,1.2,1 6.1,3.0,4.6,1.4,1 5.8,2.6,4.0,1.2,1 5.0,2.3,3.3,1.0,1 5.6,2.7,4.2,1.3,1 5.7,3.0,4.2,1.2,1 5.7,2.9,4.2,1.3,1 6.2,2.9,4.3,1.3,1 5.1,2.5,3.0,1.1,1 5.7,2.8,4.1,1.3,1 6.3,3.3,6.0,2.5,2 5.8,2.7,5.1,1.9,2 7.1,3.0,5.9,2.1,2 6.3,2.9,5.6,1.8,2 6.5,3.0,5.8,2.2,2 7.6,3.0,6.6,2.1,2 4.9,2.5,4.5,1.7,2 7.3,2.9,6.3,1.8,2 6.7,2.5,5.8,1.8,2 7.2,3.6,6.1,2.5,2 6.5,3.2,5.1,2.0,2 6.4,2.7,5.3,1.9,2 6.8,3.0,5.5,2.1,2 5.7,2.5,5.0,2.0,2 5.8,2.8,5.1,2.4,2 6.4,3.2,5.3,2.3,2 6.5,3.0,5.5,1.8,2 7.7,3.8,6.7,2.2,2 7.7,2.6,6.9,2.3,2 6.0,2.2,5.0,1.5,2 6.9,3.2,5.7,2.3,2 5.6,2.8,4.9,2.0,2 7.7,2.8,6.7,2.0,2 6.3,2.7,4.9,1.8,2 6.7,3.3,5.7,2.1,2 7.2,3.2,6.0,1.8,2 6.2,2.8,4.8,1.8,2 6.1,3.0,4.9,1.8,2 6.4,2.8,5.6,2.1,2 7.2,3.0,5.8,1.6,2 7.4,2.8,6.1,1.9,2 7.9,3.8,6.4,2.0,2 6.4,2.8,5.6,2.2,2 6.3,2.8,5.1,1.5,2 6.1,2.6,5.6,1.4,2 7.7,3.0,6.1,2.3,2 6.3,3.4,5.6,2.4,2 6.4,3.1,5.5,1.8,2 6.0,3.0,4.8,1.8,2 6.9,3.1,5.4,2.1,2 6.7,3.1,5.6,2.4,2 6.9,3.1,5.1,2.3,2 5.8,2.7,5.1,1.9,2 6.8,3.2,5.9,2.3,2 6.7,3.3,5.7,2.5,2 6.7,3.0,5.2,2.3,2 6.3,2.5,5.0,1.9,2 6.5,3.0,5.2,2.0,2 6.2,3.4,5.4,2.3,2 5.9,3.0,5.1,1.8,2
Hasilnya masih jelek. Apa yang perlu diperbaiki?
1. Teknik pembagian dataset untuk training & testing hanya menggunakan random 2. ??
Akurasi = 50%
Contoh Deep Learning dengan Iris Dataset
(Pembagian dataset dengan model_selection)
#contoh deep learningimport keras keras.__version__
#--- menyiapkan data training dan testing import numpy as np import matplotlib.pyplot as plt import pandas as pd import os
#Set working directory and load data os.chdir('C:\\myworkspacepython') # C:\\myworkspacepython
# load dataset irisdata = pd.read_csv('iris-UCI-header.csv') iris = pd.read_csv('iris-UCI-header.csv')
#Create numeric classes for species (0,1,2) iris.loc[iris['Species']=='Iris-virginica','Species']=0 iris.loc[iris['Species']=='Iris-versicolor','Species']=1 iris.loc[iris['Species']=='Iris-setosa','Species'] = 2
X = iris.drop('Species', axis=1) y = iris['Species']
#--- from sklearn.model_selection import train_test_split x_train, x_test, y_trainx, y_testx = train_test_split(X, y, test_size = 0.20)
from keras.utils import to_categorical y_train = keras.utils.to_categorical(y_trainx, num_classes=3) y_test = keras.utils.to_categorical(y_testx, num_classes=3)
#--- model neural network : relu or sigmoid activation function from keras.models import Sequential from keras.layers import Dense from keras.optimizers import sgd batch_size = 10 num_classes = 3 epochs=5 mymodel = Sequential() mymodel.add(Dense(512, activation='relu', input_shape=(4,))) mymodel.add(Dense(3, activation='softmax'))
mymodel.summary()
mymodel.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) mymodel.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=0 )
test_loss, test_acc = mymodel.evaluate(x_test, y_test) print('mymodel - Test loss:', test_loss) print('mymodel - Test accuracy:', test_acc)
SepalLength,SepalWidth,PetalLength,PetalWidth,Species 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 4.6,3.1,1.5,0.2,Iris-setosa 5.0,3.6,1.4,0.2,Iris-setosa 5.4,3.9,1.7,0.4,Iris-setosa 4.6,3.4,1.4,0.3,Iris-setosa 5.0,3.4,1.5,0.2,Iris-setosa 4.4,2.9,1.4,0.2,Iris-setosa 4.9,3.1,1.5,0.1,Iris-setosa 5.4,3.7,1.5,0.2,Iris-setosa 4.8,3.4,1.6,0.2,Iris-setosa 4.8,3.0,1.4,0.1,Iris-setosa 4.3,3.0,1.1,0.1,Iris-setosa 5.8,4.0,1.2,0.2,Iris-setosa 5.7,4.4,1.5,0.4,Iris-setosa 5.4,3.9,1.3,0.4,Iris-setosa 5.1,3.5,1.4,0.3,Iris-setosa 5.7,3.8,1.7,0.3,Iris-setosa 5.1,3.8,1.5,0.3,Iris-setosa 5.4,3.4,1.7,0.2,Iris-setosa 5.1,3.7,1.5,0.4,Iris-setosa 4.6,3.6,1.0,0.2,Iris-setosa 5.1,3.3,1.7,0.5,Iris-setosa 4.8,3.4,1.9,0.2,Iris-setosa 5.0,3.0,1.6,0.2,Iris-setosa 5.0,3.4,1.6,0.4,Iris-setosa 5.2,3.5,1.5,0.2,Iris-setosa 5.2,3.4,1.4,0.2,Iris-setosa 4.7,3.2,1.6,0.2,Iris-setosa 4.8,3.1,1.6,0.2,Iris-setosa 5.4,3.4,1.5,0.4,Iris-setosa 5.2,4.1,1.5,0.1,Iris-setosa 5.5,4.2,1.4,0.2,Iris-setosa 4.9,3.1,1.5,0.1,Iris-setosa 5.0,3.2,1.2,0.2,Iris-setosa 5.5,3.5,1.3,0.2,Iris-setosa 4.9,3.1,1.5,0.1,Iris-setosa 4.4,3.0,1.3,0.2,Iris-setosa 5.1,3.4,1.5,0.2,Iris-setosa 5.0,3.5,1.3,0.3,Iris-setosa 4.5,2.3,1.3,0.3,Iris-setosa 4.4,3.2,1.3,0.2,Iris-setosa 5.0,3.5,1.6,0.6,Iris-setosa 5.1,3.8,1.9,0.4,Iris-setosa 4.8,3.0,1.4,0.3,Iris-setosa 5.1,3.8,1.6,0.2,Iris-setosa 4.6,3.2,1.4,0.2,Iris-setosa 5.3,3.7,1.5,0.2,Iris-setosa 5.0,3.3,1.4,0.2,Iris-setosa 7.0,3.2,4.7,1.4,Iris-versicolor 6.4,3.2,4.5,1.5,Iris-versicolor 6.9,3.1,4.9,1.5,Iris-versicolor 5.5,2.3,4.0,1.3,Iris-versicolor 6.5,2.8,4.6,1.5,Iris-versicolor 5.7,2.8,4.5,1.3,Iris-versicolor 6.3,3.3,4.7,1.6,Iris-versicolor 4.9,2.4,3.3,1.0,Iris-versicolor 6.6,2.9,4.6,1.3,Iris-versicolor 5.2,2.7,3.9,1.4,Iris-versicolor 5.0,2.0,3.5,1.0,Iris-versicolor 5.9,3.0,4.2,1.5,Iris-versicolor 6.0,2.2,4.0,1.0,Iris-versicolor 6.1,2.9,4.7,1.4,Iris-versicolor 5.6,2.9,3.6,1.3,Iris-versicolor 6.7,3.1,4.4,1.4,Iris-versicolor 5.6,3.0,4.5,1.5,Iris-versicolor 5.8,2.7,4.1,1.0,Iris-versicolor 6.2,2.2,4.5,1.5,Iris-versicolor 5.6,2.5,3.9,1.1,Iris-versicolor 5.9,3.2,4.8,1.8,Iris-versicolor 6.1,2.8,4.0,1.3,Iris-versicolor 6.3,2.5,4.9,1.5,Iris-versicolor 6.1,2.8,4.7,1.2,Iris-versicolor 6.4,2.9,4.3,1.3,Iris-versicolor 6.6,3.0,4.4,1.4,Iris-versicolor 6.8,2.8,4.8,1.4,Iris-versicolor 6.7,3.0,5.0,1.7,Iris-versicolor 6.0,2.9,4.5,1.5,Iris-versicolor 5.7,2.6,3.5,1.0,Iris-versicolor 5.5,2.4,3.8,1.1,Iris-versicolor 5.5,2.4,3.7,1.0,Iris-versicolor 5.8,2.7,3.9,1.2,Iris-versicolor 6.0,2.7,5.1,1.6,Iris-versicolor 5.4,3.0,4.5,1.5,Iris-versicolor 6.0,3.4,4.5,1.6,Iris-versicolor 6.7,3.1,4.7,1.5,Iris-versicolor 6.3,2.3,4.4,1.3,Iris-versicolor 5.6,3.0,4.1,1.3,Iris-versicolor 5.5,2.5,4.0,1.3,Iris-versicolor 5.5,2.6,4.4,1.2,Iris-versicolor 6.1,3.0,4.6,1.4,Iris-versicolor 5.8,2.6,4.0,1.2,Iris-versicolor 5.0,2.3,3.3,1.0,Iris-versicolor 5.6,2.7,4.2,1.3,Iris-versicolor 5.7,3.0,4.2,1.2,Iris-versicolor 5.7,2.9,4.2,1.3,Iris-versicolor 6.2,2.9,4.3,1.3,Iris-versicolor 5.1,2.5,3.0,1.1,Iris-versicolor 5.7,2.8,4.1,1.3,Iris-versicolor 6.3,3.3,6.0,2.5,Iris-virginica 5.8,2.7,5.1,1.9,Iris-virginica 7.1,3.0,5.9,2.1,Iris-virginica 6.3,2.9,5.6,1.8,Iris-virginica 6.5,3.0,5.8,2.2,Iris-virginica 7.6,3.0,6.6,2.1,Iris-virginica 4.9,2.5,4.5,1.7,Iris-virginica 7.3,2.9,6.3,1.8,Iris-virginica 6.7,2.5,5.8,1.8,Iris-virginica 7.2,3.6,6.1,2.5,Iris-virginica 6.5,3.2,5.1,2.0,Iris-virginica 6.4,2.7,5.3,1.9,Iris-virginica 6.8,3.0,5.5,2.1,Iris-virginica 5.7,2.5,5.0,2.0,Iris-virginica 5.8,2.8,5.1,2.4,Iris-virginica 6.4,3.2,5.3,2.3,Iris-virginica 6.5,3.0,5.5,1.8,Iris-virginica 7.7,3.8,6.7,2.2,Iris-virginica 7.7,2.6,6.9,2.3,Iris-virginica 6.0,2.2,5.0,1.5,Iris-virginica 6.9,3.2,5.7,2.3,Iris-virginica 5.6,2.8,4.9,2.0,Iris-virginica 7.7,2.8,6.7,2.0,Iris-virginica 6.3,2.7,4.9,1.8,Iris-virginica 6.7,3.3,5.7,2.1,Iris-virginica 7.2,3.2,6.0,1.8,Iris-virginica 6.2,2.8,4.8,1.8,Iris-virginica 6.1,3.0,4.9,1.8,Iris-virginica 6.4,2.8,5.6,2.1,Iris-virginica 7.2,3.0,5.8,1.6,Iris-virginica 7.4,2.8,6.1,1.9,Iris-virginica 7.9,3.8,6.4,2.0,Iris-virginica 6.4,2.8,5.6,2.2,Iris-virginica 6.3,2.8,5.1,1.5,Iris-virginica 6.1,2.6,5.6,1.4,Iris-virginica 7.7,3.0,6.1,2.3,Iris-virginica 6.3,3.4,5.6,2.4,Iris-virginica 6.4,3.1,5.5,1.8,Iris-virginica 6.0,3.0,4.8,1.8,Iris-virginica 6.9,3.1,5.4,2.1,Iris-virginica 6.7,3.1,5.6,2.4,Iris-virginica 6.9,3.1,5.1,2.3,Iris-virginica 5.8,2.7,5.1,1.9,Iris-virginica 6.8,3.2,5.9,2.3,Iris-virginica 6.7,3.3,5.7,2.5,Iris-virginica 6.7,3.0,5.2,2.3,Iris-virginica 6.3,2.5,5.0,1.9,Iris-virginica 6.5,3.0,5.2,2.0,Iris-virginica 6.2,3.4,5.4,2.3,Iris-virginica 5.9,3.0,5.1,1.8,Iris-virginica