In this script, I will go through the different steps to classifiy iris flowers among three species

Step 1: Import data

Import the data from the University of California Irvine website

iris <- read.csv(url("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"), 
                 header = FALSE)

Check the import

head(iris)
##    V1  V2  V3  V4          V5
## 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 4.9 3.0 1.4 0.2 Iris-setosa
## 3 4.7 3.2 1.3 0.2 Iris-setosa
## 4 4.6 3.1 1.5 0.2 Iris-setosa
## 5 5.0 3.6 1.4 0.2 Iris-setosa
## 6 5.4 3.9 1.7 0.4 Iris-setosa

Change variable names

names(iris) <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")

Step 2: Explore data

Install ggvis package

install.packages('ggvis', repos="http://cran.us.r-project.org")
## 
## The downloaded binary packages are in
##  /var/folders/yq/f156071x165_9gyhs631wctr0000gn/T//RtmpcQ9Io1/downloaded_packages
library(ggvis)

Create scatterplot

iris %>% ggvis(~Sepal.Length, ~Sepal.Width, fill = ~Species) %>% layer_points()
iris %>% ggvis(~Petal.Length, ~Petal.Width, fill = ~Species) %>% layer_points()

Check correlations

cor(iris$Petal.Length, iris$Petal.Width)
## [1] 0.9627571
cor(iris$Sepal.Length, iris$Sepal.Width)
## [1] -0.1093692

Create correlation matrices

x <-  levels(iris$Species)

cor(iris[iris$Species == x[1], 1:4])
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length    1.0000000   0.7467804    0.2638741   0.2790916
## Sepal.Width     0.7467804   1.0000000    0.1766946   0.2799729
## Petal.Length    0.2638741   0.1766946    1.0000000   0.3063082
## Petal.Width     0.2790916   0.2799729    0.3063082   1.0000000
cor(iris[iris$Species == x[2], 1:4])
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length    1.0000000   0.5259107    0.7540490   0.5464611
## Sepal.Width     0.5259107   1.0000000    0.5605221   0.6639987
## Petal.Length    0.7540490   0.5605221    1.0000000   0.7866681
## Petal.Width     0.5464611   0.6639987    0.7866681   1.0000000
cor(iris[iris$Species == x[3], 1:4])
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length    1.0000000   0.4572278    0.8642247   0.2811077
## Sepal.Width     0.4572278   1.0000000    0.4010446   0.5377280
## Petal.Length    0.8642247   0.4010446    1.0000000   0.3221082
## Petal.Width     0.2811077   0.5377280    0.3221082   1.0000000

Division of species

table(iris$Species)
## 
##     Iris-setosa Iris-versicolor  Iris-virginica 
##              50              50              50

Step 3: Prepare data for modelling

Standardize data - create standardization function

standardize <- function(vec){
  num <- vec - min(vec)
  den <- max(vec) - min(vec)
  return(num/den)
}

Standardize numerical data

iris_norm <- as.data.frame(lapply(iris[,1:4], standardize))
print(iris_norm)
##     Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     0.22222222  0.62500000   0.06779661  0.04166667
## 2     0.16666667  0.41666667   0.06779661  0.04166667
## 3     0.11111111  0.50000000   0.05084746  0.04166667
## 4     0.08333333  0.45833333   0.08474576  0.04166667
## 5     0.19444444  0.66666667   0.06779661  0.04166667
## 6     0.30555556  0.79166667   0.11864407  0.12500000
## 7     0.08333333  0.58333333   0.06779661  0.08333333
## 8     0.19444444  0.58333333   0.08474576  0.04166667
## 9     0.02777778  0.37500000   0.06779661  0.04166667
## 10    0.16666667  0.45833333   0.08474576  0.00000000
## 11    0.30555556  0.70833333   0.08474576  0.04166667
## 12    0.13888889  0.58333333   0.10169492  0.04166667
## 13    0.13888889  0.41666667   0.06779661  0.00000000
## 14    0.00000000  0.41666667   0.01694915  0.00000000
## 15    0.41666667  0.83333333   0.03389831  0.04166667
## 16    0.38888889  1.00000000   0.08474576  0.12500000
## 17    0.30555556  0.79166667   0.05084746  0.12500000
## 18    0.22222222  0.62500000   0.06779661  0.08333333
## 19    0.38888889  0.75000000   0.11864407  0.08333333
## 20    0.22222222  0.75000000   0.08474576  0.08333333
## 21    0.30555556  0.58333333   0.11864407  0.04166667
## 22    0.22222222  0.70833333   0.08474576  0.12500000
## 23    0.08333333  0.66666667   0.00000000  0.04166667
## 24    0.22222222  0.54166667   0.11864407  0.16666667
## 25    0.13888889  0.58333333   0.15254237  0.04166667
## 26    0.19444444  0.41666667   0.10169492  0.04166667
## 27    0.19444444  0.58333333   0.10169492  0.12500000
## 28    0.25000000  0.62500000   0.08474576  0.04166667
## 29    0.25000000  0.58333333   0.06779661  0.04166667
## 30    0.11111111  0.50000000   0.10169492  0.04166667
## 31    0.13888889  0.45833333   0.10169492  0.04166667
## 32    0.30555556  0.58333333   0.08474576  0.12500000
## 33    0.25000000  0.87500000   0.08474576  0.00000000
## 34    0.33333333  0.91666667   0.06779661  0.04166667
## 35    0.16666667  0.45833333   0.08474576  0.00000000
## 36    0.19444444  0.50000000   0.03389831  0.04166667
## 37    0.33333333  0.62500000   0.05084746  0.04166667
## 38    0.16666667  0.45833333   0.08474576  0.00000000
## 39    0.02777778  0.41666667   0.05084746  0.04166667
## 40    0.22222222  0.58333333   0.08474576  0.04166667
## 41    0.19444444  0.62500000   0.05084746  0.08333333
## 42    0.05555556  0.12500000   0.05084746  0.08333333
## 43    0.02777778  0.50000000   0.05084746  0.04166667
## 44    0.19444444  0.62500000   0.10169492  0.20833333
## 45    0.22222222  0.75000000   0.15254237  0.12500000
## 46    0.13888889  0.41666667   0.06779661  0.08333333
## 47    0.22222222  0.75000000   0.10169492  0.04166667
## 48    0.08333333  0.50000000   0.06779661  0.04166667
## 49    0.27777778  0.70833333   0.08474576  0.04166667
## 50    0.19444444  0.54166667   0.06779661  0.04166667
## 51    0.75000000  0.50000000   0.62711864  0.54166667
## 52    0.58333333  0.50000000   0.59322034  0.58333333
## 53    0.72222222  0.45833333   0.66101695  0.58333333
## 54    0.33333333  0.12500000   0.50847458  0.50000000
## 55    0.61111111  0.33333333   0.61016949  0.58333333
## 56    0.38888889  0.33333333   0.59322034  0.50000000
## 57    0.55555556  0.54166667   0.62711864  0.62500000
## 58    0.16666667  0.16666667   0.38983051  0.37500000
## 59    0.63888889  0.37500000   0.61016949  0.50000000
## 60    0.25000000  0.29166667   0.49152542  0.54166667
## 61    0.19444444  0.00000000   0.42372881  0.37500000
## 62    0.44444444  0.41666667   0.54237288  0.58333333
## 63    0.47222222  0.08333333   0.50847458  0.37500000
## 64    0.50000000  0.37500000   0.62711864  0.54166667
## 65    0.36111111  0.37500000   0.44067797  0.50000000
## 66    0.66666667  0.45833333   0.57627119  0.54166667
## 67    0.36111111  0.41666667   0.59322034  0.58333333
## 68    0.41666667  0.29166667   0.52542373  0.37500000
## 69    0.52777778  0.08333333   0.59322034  0.58333333
## 70    0.36111111  0.20833333   0.49152542  0.41666667
## 71    0.44444444  0.50000000   0.64406780  0.70833333
## 72    0.50000000  0.33333333   0.50847458  0.50000000
## 73    0.55555556  0.20833333   0.66101695  0.58333333
## 74    0.50000000  0.33333333   0.62711864  0.45833333
## 75    0.58333333  0.37500000   0.55932203  0.50000000
## 76    0.63888889  0.41666667   0.57627119  0.54166667
## 77    0.69444444  0.33333333   0.64406780  0.54166667
## 78    0.66666667  0.41666667   0.67796610  0.66666667
## 79    0.47222222  0.37500000   0.59322034  0.58333333
## 80    0.38888889  0.25000000   0.42372881  0.37500000
## 81    0.33333333  0.16666667   0.47457627  0.41666667
## 82    0.33333333  0.16666667   0.45762712  0.37500000
## 83    0.41666667  0.29166667   0.49152542  0.45833333
## 84    0.47222222  0.29166667   0.69491525  0.62500000
## 85    0.30555556  0.41666667   0.59322034  0.58333333
## 86    0.47222222  0.58333333   0.59322034  0.62500000
## 87    0.66666667  0.45833333   0.62711864  0.58333333
## 88    0.55555556  0.12500000   0.57627119  0.50000000
## 89    0.36111111  0.41666667   0.52542373  0.50000000
## 90    0.33333333  0.20833333   0.50847458  0.50000000
## 91    0.33333333  0.25000000   0.57627119  0.45833333
## 92    0.50000000  0.41666667   0.61016949  0.54166667
## 93    0.41666667  0.25000000   0.50847458  0.45833333
## 94    0.19444444  0.12500000   0.38983051  0.37500000
## 95    0.36111111  0.29166667   0.54237288  0.50000000
## 96    0.38888889  0.41666667   0.54237288  0.45833333
## 97    0.38888889  0.37500000   0.54237288  0.50000000
## 98    0.52777778  0.37500000   0.55932203  0.50000000
## 99    0.22222222  0.20833333   0.33898305  0.41666667
## 100   0.38888889  0.33333333   0.52542373  0.50000000
## 101   0.55555556  0.54166667   0.84745763  1.00000000
## 102   0.41666667  0.29166667   0.69491525  0.75000000
## 103   0.77777778  0.41666667   0.83050847  0.83333333
## 104   0.55555556  0.37500000   0.77966102  0.70833333
## 105   0.61111111  0.41666667   0.81355932  0.87500000
## 106   0.91666667  0.41666667   0.94915254  0.83333333
## 107   0.16666667  0.20833333   0.59322034  0.66666667
## 108   0.83333333  0.37500000   0.89830508  0.70833333
## 109   0.66666667  0.20833333   0.81355932  0.70833333
## 110   0.80555556  0.66666667   0.86440678  1.00000000
## 111   0.61111111  0.50000000   0.69491525  0.79166667
## 112   0.58333333  0.29166667   0.72881356  0.75000000
## 113   0.69444444  0.41666667   0.76271186  0.83333333
## 114   0.38888889  0.20833333   0.67796610  0.79166667
## 115   0.41666667  0.33333333   0.69491525  0.95833333
## 116   0.58333333  0.50000000   0.72881356  0.91666667
## 117   0.61111111  0.41666667   0.76271186  0.70833333
## 118   0.94444444  0.75000000   0.96610169  0.87500000
## 119   0.94444444  0.25000000   1.00000000  0.91666667
## 120   0.47222222  0.08333333   0.67796610  0.58333333
## 121   0.72222222  0.50000000   0.79661017  0.91666667
## 122   0.36111111  0.33333333   0.66101695  0.79166667
## 123   0.94444444  0.33333333   0.96610169  0.79166667
## 124   0.55555556  0.29166667   0.66101695  0.70833333
## 125   0.66666667  0.54166667   0.79661017  0.83333333
## 126   0.80555556  0.50000000   0.84745763  0.70833333
## 127   0.52777778  0.33333333   0.64406780  0.70833333
## 128   0.50000000  0.41666667   0.66101695  0.70833333
## 129   0.58333333  0.33333333   0.77966102  0.83333333
## 130   0.80555556  0.41666667   0.81355932  0.62500000
## 131   0.86111111  0.33333333   0.86440678  0.75000000
## 132   1.00000000  0.75000000   0.91525424  0.79166667
## 133   0.58333333  0.33333333   0.77966102  0.87500000
## 134   0.55555556  0.33333333   0.69491525  0.58333333
## 135   0.50000000  0.25000000   0.77966102  0.54166667
## 136   0.94444444  0.41666667   0.86440678  0.91666667
## 137   0.55555556  0.58333333   0.77966102  0.95833333
## 138   0.58333333  0.45833333   0.76271186  0.70833333
## 139   0.47222222  0.41666667   0.64406780  0.70833333
## 140   0.72222222  0.45833333   0.74576271  0.83333333
## 141   0.66666667  0.45833333   0.77966102  0.95833333
## 142   0.72222222  0.45833333   0.69491525  0.91666667
## 143   0.41666667  0.29166667   0.69491525  0.75000000
## 144   0.69444444  0.50000000   0.83050847  0.91666667
## 145   0.66666667  0.54166667   0.79661017  1.00000000
## 146   0.66666667  0.41666667   0.71186441  0.91666667
## 147   0.55555556  0.20833333   0.67796610  0.75000000
## 148   0.61111111  0.41666667   0.71186441  0.79166667
## 149   0.52777778  0.58333333   0.74576271  0.91666667
## 150   0.44444444  0.41666667   0.69491525  0.70833333

Add back Species

iris_norm$Species <- iris$Species
print(iris_norm)
##     Sepal.Length Sepal.Width Petal.Length Petal.Width         Species
## 1     0.22222222  0.62500000   0.06779661  0.04166667     Iris-setosa
## 2     0.16666667  0.41666667   0.06779661  0.04166667     Iris-setosa
## 3     0.11111111  0.50000000   0.05084746  0.04166667     Iris-setosa
## 4     0.08333333  0.45833333   0.08474576  0.04166667     Iris-setosa
## 5     0.19444444  0.66666667   0.06779661  0.04166667     Iris-setosa
## 6     0.30555556  0.79166667   0.11864407  0.12500000     Iris-setosa
## 7     0.08333333  0.58333333   0.06779661  0.08333333     Iris-setosa
## 8     0.19444444  0.58333333   0.08474576  0.04166667     Iris-setosa
## 9     0.02777778  0.37500000   0.06779661  0.04166667     Iris-setosa
## 10    0.16666667  0.45833333   0.08474576  0.00000000     Iris-setosa
## 11    0.30555556  0.70833333   0.08474576  0.04166667     Iris-setosa
## 12    0.13888889  0.58333333   0.10169492  0.04166667     Iris-setosa
## 13    0.13888889  0.41666667   0.06779661  0.00000000     Iris-setosa
## 14    0.00000000  0.41666667   0.01694915  0.00000000     Iris-setosa
## 15    0.41666667  0.83333333   0.03389831  0.04166667     Iris-setosa
## 16    0.38888889  1.00000000   0.08474576  0.12500000     Iris-setosa
## 17    0.30555556  0.79166667   0.05084746  0.12500000     Iris-setosa
## 18    0.22222222  0.62500000   0.06779661  0.08333333     Iris-setosa
## 19    0.38888889  0.75000000   0.11864407  0.08333333     Iris-setosa
## 20    0.22222222  0.75000000   0.08474576  0.08333333     Iris-setosa
## 21    0.30555556  0.58333333   0.11864407  0.04166667     Iris-setosa
## 22    0.22222222  0.70833333   0.08474576  0.12500000     Iris-setosa
## 23    0.08333333  0.66666667   0.00000000  0.04166667     Iris-setosa
## 24    0.22222222  0.54166667   0.11864407  0.16666667     Iris-setosa
## 25    0.13888889  0.58333333   0.15254237  0.04166667     Iris-setosa
## 26    0.19444444  0.41666667   0.10169492  0.04166667     Iris-setosa
## 27    0.19444444  0.58333333   0.10169492  0.12500000     Iris-setosa
## 28    0.25000000  0.62500000   0.08474576  0.04166667     Iris-setosa
## 29    0.25000000  0.58333333   0.06779661  0.04166667     Iris-setosa
## 30    0.11111111  0.50000000   0.10169492  0.04166667     Iris-setosa
## 31    0.13888889  0.45833333   0.10169492  0.04166667     Iris-setosa
## 32    0.30555556  0.58333333   0.08474576  0.12500000     Iris-setosa
## 33    0.25000000  0.87500000   0.08474576  0.00000000     Iris-setosa
## 34    0.33333333  0.91666667   0.06779661  0.04166667     Iris-setosa
## 35    0.16666667  0.45833333   0.08474576  0.00000000     Iris-setosa
## 36    0.19444444  0.50000000   0.03389831  0.04166667     Iris-setosa
## 37    0.33333333  0.62500000   0.05084746  0.04166667     Iris-setosa
## 38    0.16666667  0.45833333   0.08474576  0.00000000     Iris-setosa
## 39    0.02777778  0.41666667   0.05084746  0.04166667     Iris-setosa
## 40    0.22222222  0.58333333   0.08474576  0.04166667     Iris-setosa
## 41    0.19444444  0.62500000   0.05084746  0.08333333     Iris-setosa
## 42    0.05555556  0.12500000   0.05084746  0.08333333     Iris-setosa
## 43    0.02777778  0.50000000   0.05084746  0.04166667     Iris-setosa
## 44    0.19444444  0.62500000   0.10169492  0.20833333     Iris-setosa
## 45    0.22222222  0.75000000   0.15254237  0.12500000     Iris-setosa
## 46    0.13888889  0.41666667   0.06779661  0.08333333     Iris-setosa
## 47    0.22222222  0.75000000   0.10169492  0.04166667     Iris-setosa
## 48    0.08333333  0.50000000   0.06779661  0.04166667     Iris-setosa
## 49    0.27777778  0.70833333   0.08474576  0.04166667     Iris-setosa
## 50    0.19444444  0.54166667   0.06779661  0.04166667     Iris-setosa
## 51    0.75000000  0.50000000   0.62711864  0.54166667 Iris-versicolor
## 52    0.58333333  0.50000000   0.59322034  0.58333333 Iris-versicolor
## 53    0.72222222  0.45833333   0.66101695  0.58333333 Iris-versicolor
## 54    0.33333333  0.12500000   0.50847458  0.50000000 Iris-versicolor
## 55    0.61111111  0.33333333   0.61016949  0.58333333 Iris-versicolor
## 56    0.38888889  0.33333333   0.59322034  0.50000000 Iris-versicolor
## 57    0.55555556  0.54166667   0.62711864  0.62500000 Iris-versicolor
## 58    0.16666667  0.16666667   0.38983051  0.37500000 Iris-versicolor
## 59    0.63888889  0.37500000   0.61016949  0.50000000 Iris-versicolor
## 60    0.25000000  0.29166667   0.49152542  0.54166667 Iris-versicolor
## 61    0.19444444  0.00000000   0.42372881  0.37500000 Iris-versicolor
## 62    0.44444444  0.41666667   0.54237288  0.58333333 Iris-versicolor
## 63    0.47222222  0.08333333   0.50847458  0.37500000 Iris-versicolor
## 64    0.50000000  0.37500000   0.62711864  0.54166667 Iris-versicolor
## 65    0.36111111  0.37500000   0.44067797  0.50000000 Iris-versicolor
## 66    0.66666667  0.45833333   0.57627119  0.54166667 Iris-versicolor
## 67    0.36111111  0.41666667   0.59322034  0.58333333 Iris-versicolor
## 68    0.41666667  0.29166667   0.52542373  0.37500000 Iris-versicolor
## 69    0.52777778  0.08333333   0.59322034  0.58333333 Iris-versicolor
## 70    0.36111111  0.20833333   0.49152542  0.41666667 Iris-versicolor
## 71    0.44444444  0.50000000   0.64406780  0.70833333 Iris-versicolor
## 72    0.50000000  0.33333333   0.50847458  0.50000000 Iris-versicolor
## 73    0.55555556  0.20833333   0.66101695  0.58333333 Iris-versicolor
## 74    0.50000000  0.33333333   0.62711864  0.45833333 Iris-versicolor
## 75    0.58333333  0.37500000   0.55932203  0.50000000 Iris-versicolor
## 76    0.63888889  0.41666667   0.57627119  0.54166667 Iris-versicolor
## 77    0.69444444  0.33333333   0.64406780  0.54166667 Iris-versicolor
## 78    0.66666667  0.41666667   0.67796610  0.66666667 Iris-versicolor
## 79    0.47222222  0.37500000   0.59322034  0.58333333 Iris-versicolor
## 80    0.38888889  0.25000000   0.42372881  0.37500000 Iris-versicolor
## 81    0.33333333  0.16666667   0.47457627  0.41666667 Iris-versicolor
## 82    0.33333333  0.16666667   0.45762712  0.37500000 Iris-versicolor
## 83    0.41666667  0.29166667   0.49152542  0.45833333 Iris-versicolor
## 84    0.47222222  0.29166667   0.69491525  0.62500000 Iris-versicolor
## 85    0.30555556  0.41666667   0.59322034  0.58333333 Iris-versicolor
## 86    0.47222222  0.58333333   0.59322034  0.62500000 Iris-versicolor
## 87    0.66666667  0.45833333   0.62711864  0.58333333 Iris-versicolor
## 88    0.55555556  0.12500000   0.57627119  0.50000000 Iris-versicolor
## 89    0.36111111  0.41666667   0.52542373  0.50000000 Iris-versicolor
## 90    0.33333333  0.20833333   0.50847458  0.50000000 Iris-versicolor
## 91    0.33333333  0.25000000   0.57627119  0.45833333 Iris-versicolor
## 92    0.50000000  0.41666667   0.61016949  0.54166667 Iris-versicolor
## 93    0.41666667  0.25000000   0.50847458  0.45833333 Iris-versicolor
## 94    0.19444444  0.12500000   0.38983051  0.37500000 Iris-versicolor
## 95    0.36111111  0.29166667   0.54237288  0.50000000 Iris-versicolor
## 96    0.38888889  0.41666667   0.54237288  0.45833333 Iris-versicolor
## 97    0.38888889  0.37500000   0.54237288  0.50000000 Iris-versicolor
## 98    0.52777778  0.37500000   0.55932203  0.50000000 Iris-versicolor
## 99    0.22222222  0.20833333   0.33898305  0.41666667 Iris-versicolor
## 100   0.38888889  0.33333333   0.52542373  0.50000000 Iris-versicolor
## 101   0.55555556  0.54166667   0.84745763  1.00000000  Iris-virginica
## 102   0.41666667  0.29166667   0.69491525  0.75000000  Iris-virginica
## 103   0.77777778  0.41666667   0.83050847  0.83333333  Iris-virginica
## 104   0.55555556  0.37500000   0.77966102  0.70833333  Iris-virginica
## 105   0.61111111  0.41666667   0.81355932  0.87500000  Iris-virginica
## 106   0.91666667  0.41666667   0.94915254  0.83333333  Iris-virginica
## 107   0.16666667  0.20833333   0.59322034  0.66666667  Iris-virginica
## 108   0.83333333  0.37500000   0.89830508  0.70833333  Iris-virginica
## 109   0.66666667  0.20833333   0.81355932  0.70833333  Iris-virginica
## 110   0.80555556  0.66666667   0.86440678  1.00000000  Iris-virginica
## 111   0.61111111  0.50000000   0.69491525  0.79166667  Iris-virginica
## 112   0.58333333  0.29166667   0.72881356  0.75000000  Iris-virginica
## 113   0.69444444  0.41666667   0.76271186  0.83333333  Iris-virginica
## 114   0.38888889  0.20833333   0.67796610  0.79166667  Iris-virginica
## 115   0.41666667  0.33333333   0.69491525  0.95833333  Iris-virginica
## 116   0.58333333  0.50000000   0.72881356  0.91666667  Iris-virginica
## 117   0.61111111  0.41666667   0.76271186  0.70833333  Iris-virginica
## 118   0.94444444  0.75000000   0.96610169  0.87500000  Iris-virginica
## 119   0.94444444  0.25000000   1.00000000  0.91666667  Iris-virginica
## 120   0.47222222  0.08333333   0.67796610  0.58333333  Iris-virginica
## 121   0.72222222  0.50000000   0.79661017  0.91666667  Iris-virginica
## 122   0.36111111  0.33333333   0.66101695  0.79166667  Iris-virginica
## 123   0.94444444  0.33333333   0.96610169  0.79166667  Iris-virginica
## 124   0.55555556  0.29166667   0.66101695  0.70833333  Iris-virginica
## 125   0.66666667  0.54166667   0.79661017  0.83333333  Iris-virginica
## 126   0.80555556  0.50000000   0.84745763  0.70833333  Iris-virginica
## 127   0.52777778  0.33333333   0.64406780  0.70833333  Iris-virginica
## 128   0.50000000  0.41666667   0.66101695  0.70833333  Iris-virginica
## 129   0.58333333  0.33333333   0.77966102  0.83333333  Iris-virginica
## 130   0.80555556  0.41666667   0.81355932  0.62500000  Iris-virginica
## 131   0.86111111  0.33333333   0.86440678  0.75000000  Iris-virginica
## 132   1.00000000  0.75000000   0.91525424  0.79166667  Iris-virginica
## 133   0.58333333  0.33333333   0.77966102  0.87500000  Iris-virginica
## 134   0.55555556  0.33333333   0.69491525  0.58333333  Iris-virginica
## 135   0.50000000  0.25000000   0.77966102  0.54166667  Iris-virginica
## 136   0.94444444  0.41666667   0.86440678  0.91666667  Iris-virginica
## 137   0.55555556  0.58333333   0.77966102  0.95833333  Iris-virginica
## 138   0.58333333  0.45833333   0.76271186  0.70833333  Iris-virginica
## 139   0.47222222  0.41666667   0.64406780  0.70833333  Iris-virginica
## 140   0.72222222  0.45833333   0.74576271  0.83333333  Iris-virginica
## 141   0.66666667  0.45833333   0.77966102  0.95833333  Iris-virginica
## 142   0.72222222  0.45833333   0.69491525  0.91666667  Iris-virginica
## 143   0.41666667  0.29166667   0.69491525  0.75000000  Iris-virginica
## 144   0.69444444  0.50000000   0.83050847  0.91666667  Iris-virginica
## 145   0.66666667  0.54166667   0.79661017  1.00000000  Iris-virginica
## 146   0.66666667  0.41666667   0.71186441  0.91666667  Iris-virginica
## 147   0.55555556  0.20833333   0.67796610  0.75000000  Iris-virginica
## 148   0.61111111  0.41666667   0.71186441  0.79166667  Iris-virginica
## 149   0.52777778  0.58333333   0.74576271  0.91666667  Iris-virginica
## 150   0.44444444  0.41666667   0.69491525  0.70833333  Iris-virginica

Set seed

set.seed(12345)

Create training set

div <- sample(2, size = nrow(iris_norm), replace = T, prob = c(0.67, 0.33))
print(div)
##   [1] 2 2 2 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1
##  [36] 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2
##  [71] 2 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 2 1 1
## [106] 2 1 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 2 1 2 2 2 1 1 2
## [141] 1 2 1 1 1 2 2 1 2 1
training_set <- iris_norm[div == 1, 1:4]
print(training_set)
##     Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5     0.19444444  0.66666667   0.06779661  0.04166667
## 6     0.30555556  0.79166667   0.11864407  0.12500000
## 7     0.08333333  0.58333333   0.06779661  0.08333333
## 8     0.19444444  0.58333333   0.08474576  0.04166667
## 11    0.30555556  0.70833333   0.08474576  0.04166667
## 12    0.13888889  0.58333333   0.10169492  0.04166667
## 14    0.00000000  0.41666667   0.01694915  0.00000000
## 15    0.41666667  0.83333333   0.03389831  0.04166667
## 16    0.38888889  1.00000000   0.08474576  0.12500000
## 17    0.30555556  0.79166667   0.05084746  0.12500000
## 18    0.22222222  0.62500000   0.06779661  0.08333333
## 19    0.38888889  0.75000000   0.11864407  0.08333333
## 21    0.30555556  0.58333333   0.11864407  0.04166667
## 22    0.22222222  0.70833333   0.08474576  0.12500000
## 25    0.13888889  0.58333333   0.15254237  0.04166667
## 26    0.19444444  0.41666667   0.10169492  0.04166667
## 28    0.25000000  0.62500000   0.08474576  0.04166667
## 29    0.25000000  0.58333333   0.06779661  0.04166667
## 30    0.11111111  0.50000000   0.10169492  0.04166667
## 32    0.30555556  0.58333333   0.08474576  0.12500000
## 33    0.25000000  0.87500000   0.08474576  0.00000000
## 35    0.16666667  0.45833333   0.08474576  0.00000000
## 36    0.19444444  0.50000000   0.03389831  0.04166667
## 39    0.02777778  0.41666667   0.05084746  0.04166667
## 40    0.22222222  0.58333333   0.08474576  0.04166667
## 42    0.05555556  0.12500000   0.05084746  0.08333333
## 45    0.22222222  0.75000000   0.15254237  0.12500000
## 46    0.13888889  0.41666667   0.06779661  0.08333333
## 47    0.22222222  0.75000000   0.10169492  0.04166667
## 48    0.08333333  0.50000000   0.06779661  0.04166667
## 49    0.27777778  0.70833333   0.08474576  0.04166667
## 50    0.19444444  0.54166667   0.06779661  0.04166667
## 53    0.72222222  0.45833333   0.66101695  0.58333333
## 54    0.33333333  0.12500000   0.50847458  0.50000000
## 56    0.38888889  0.33333333   0.59322034  0.50000000
## 58    0.16666667  0.16666667   0.38983051  0.37500000
## 59    0.63888889  0.37500000   0.61016949  0.50000000
## 60    0.25000000  0.29166667   0.49152542  0.54166667
## 62    0.44444444  0.41666667   0.54237288  0.58333333
## 66    0.66666667  0.45833333   0.57627119  0.54166667
## 68    0.41666667  0.29166667   0.52542373  0.37500000
## 69    0.52777778  0.08333333   0.59322034  0.58333333
## 72    0.50000000  0.33333333   0.50847458  0.50000000
## 73    0.55555556  0.20833333   0.66101695  0.58333333
## 74    0.50000000  0.33333333   0.62711864  0.45833333
## 75    0.58333333  0.37500000   0.55932203  0.50000000
## 76    0.63888889  0.41666667   0.57627119  0.54166667
## 78    0.66666667  0.41666667   0.67796610  0.66666667
## 79    0.47222222  0.37500000   0.59322034  0.58333333
## 80    0.38888889  0.25000000   0.42372881  0.37500000
## 82    0.33333333  0.16666667   0.45762712  0.37500000
## 83    0.41666667  0.29166667   0.49152542  0.45833333
## 84    0.47222222  0.29166667   0.69491525  0.62500000
## 85    0.30555556  0.41666667   0.59322034  0.58333333
## 86    0.47222222  0.58333333   0.59322034  0.62500000
## 88    0.55555556  0.12500000   0.57627119  0.50000000
## 90    0.33333333  0.20833333   0.50847458  0.50000000
## 93    0.41666667  0.25000000   0.50847458  0.45833333
## 94    0.19444444  0.12500000   0.38983051  0.37500000
## 96    0.38888889  0.41666667   0.54237288  0.45833333
## 99    0.22222222  0.20833333   0.33898305  0.41666667
## 100   0.38888889  0.33333333   0.52542373  0.50000000
## 101   0.55555556  0.54166667   0.84745763  1.00000000
## 102   0.41666667  0.29166667   0.69491525  0.75000000
## 104   0.55555556  0.37500000   0.77966102  0.70833333
## 105   0.61111111  0.41666667   0.81355932  0.87500000
## 107   0.16666667  0.20833333   0.59322034  0.66666667
## 109   0.66666667  0.20833333   0.81355932  0.70833333
## 110   0.80555556  0.66666667   0.86440678  1.00000000
## 111   0.61111111  0.50000000   0.69491525  0.79166667
## 112   0.58333333  0.29166667   0.72881356  0.75000000
## 114   0.38888889  0.20833333   0.67796610  0.79166667
## 118   0.94444444  0.75000000   0.96610169  0.87500000
## 119   0.94444444  0.25000000   1.00000000  0.91666667
## 120   0.47222222  0.08333333   0.67796610  0.58333333
## 121   0.72222222  0.50000000   0.79661017  0.91666667
## 122   0.36111111  0.33333333   0.66101695  0.79166667
## 123   0.94444444  0.33333333   0.96610169  0.79166667
## 128   0.50000000  0.41666667   0.66101695  0.70833333
## 129   0.58333333  0.33333333   0.77966102  0.83333333
## 131   0.86111111  0.33333333   0.86440678  0.75000000
## 134   0.55555556  0.33333333   0.69491525  0.58333333
## 138   0.58333333  0.45833333   0.76271186  0.70833333
## 139   0.47222222  0.41666667   0.64406780  0.70833333
## 141   0.66666667  0.45833333   0.77966102  0.95833333
## 143   0.41666667  0.29166667   0.69491525  0.75000000
## 144   0.69444444  0.50000000   0.83050847  0.91666667
## 145   0.66666667  0.54166667   0.79661017  1.00000000
## 148   0.61111111  0.41666667   0.71186441  0.79166667
## 150   0.44444444  0.41666667   0.69491525  0.70833333

Create test set

test_set <- iris_norm[div == 2, 1:4]
print(test_set)
##     Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     0.22222222  0.62500000   0.06779661  0.04166667
## 2     0.16666667  0.41666667   0.06779661  0.04166667
## 3     0.11111111  0.50000000   0.05084746  0.04166667
## 4     0.08333333  0.45833333   0.08474576  0.04166667
## 9     0.02777778  0.37500000   0.06779661  0.04166667
## 10    0.16666667  0.45833333   0.08474576  0.00000000
## 13    0.13888889  0.41666667   0.06779661  0.00000000
## 20    0.22222222  0.75000000   0.08474576  0.08333333
## 23    0.08333333  0.66666667   0.00000000  0.04166667
## 24    0.22222222  0.54166667   0.11864407  0.16666667
## 27    0.19444444  0.58333333   0.10169492  0.12500000
## 31    0.13888889  0.45833333   0.10169492  0.04166667
## 34    0.33333333  0.91666667   0.06779661  0.04166667
## 37    0.33333333  0.62500000   0.05084746  0.04166667
## 38    0.16666667  0.45833333   0.08474576  0.00000000
## 41    0.19444444  0.62500000   0.05084746  0.08333333
## 43    0.02777778  0.50000000   0.05084746  0.04166667
## 44    0.19444444  0.62500000   0.10169492  0.20833333
## 51    0.75000000  0.50000000   0.62711864  0.54166667
## 52    0.58333333  0.50000000   0.59322034  0.58333333
## 55    0.61111111  0.33333333   0.61016949  0.58333333
## 57    0.55555556  0.54166667   0.62711864  0.62500000
## 61    0.19444444  0.00000000   0.42372881  0.37500000
## 63    0.47222222  0.08333333   0.50847458  0.37500000
## 64    0.50000000  0.37500000   0.62711864  0.54166667
## 65    0.36111111  0.37500000   0.44067797  0.50000000
## 67    0.36111111  0.41666667   0.59322034  0.58333333
## 70    0.36111111  0.20833333   0.49152542  0.41666667
## 71    0.44444444  0.50000000   0.64406780  0.70833333
## 77    0.69444444  0.33333333   0.64406780  0.54166667
## 81    0.33333333  0.16666667   0.47457627  0.41666667
## 87    0.66666667  0.45833333   0.62711864  0.58333333
## 89    0.36111111  0.41666667   0.52542373  0.50000000
## 91    0.33333333  0.25000000   0.57627119  0.45833333
## 92    0.50000000  0.41666667   0.61016949  0.54166667
## 95    0.36111111  0.29166667   0.54237288  0.50000000
## 97    0.38888889  0.37500000   0.54237288  0.50000000
## 98    0.52777778  0.37500000   0.55932203  0.50000000
## 103   0.77777778  0.41666667   0.83050847  0.83333333
## 106   0.91666667  0.41666667   0.94915254  0.83333333
## 108   0.83333333  0.37500000   0.89830508  0.70833333
## 113   0.69444444  0.41666667   0.76271186  0.83333333
## 115   0.41666667  0.33333333   0.69491525  0.95833333
## 116   0.58333333  0.50000000   0.72881356  0.91666667
## 117   0.61111111  0.41666667   0.76271186  0.70833333
## 124   0.55555556  0.29166667   0.66101695  0.70833333
## 125   0.66666667  0.54166667   0.79661017  0.83333333
## 126   0.80555556  0.50000000   0.84745763  0.70833333
## 127   0.52777778  0.33333333   0.64406780  0.70833333
## 130   0.80555556  0.41666667   0.81355932  0.62500000
## 132   1.00000000  0.75000000   0.91525424  0.79166667
## 133   0.58333333  0.33333333   0.77966102  0.87500000
## 135   0.50000000  0.25000000   0.77966102  0.54166667
## 136   0.94444444  0.41666667   0.86440678  0.91666667
## 137   0.55555556  0.58333333   0.77966102  0.95833333
## 140   0.72222222  0.45833333   0.74576271  0.83333333
## 142   0.72222222  0.45833333   0.69491525  0.91666667
## 146   0.66666667  0.41666667   0.71186441  0.91666667
## 147   0.55555556  0.20833333   0.67796610  0.75000000
## 149   0.52777778  0.58333333   0.74576271  0.91666667

Create training labels

training_labels <- iris_norm[div == 1, 5]
print(training_labels)
##  [1] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
##  [5] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
##  [9] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [13] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [17] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [21] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [25] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [29] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [33] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [37] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [41] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [45] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [49] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [53] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [57] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [61] Iris-versicolor Iris-versicolor Iris-virginica  Iris-virginica 
## [65] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [69] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [73] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [77] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [81] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [85] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [89] Iris-virginica  Iris-virginica 
## Levels: Iris-setosa Iris-versicolor Iris-virginica

Creating test labels

test_labels <- iris_norm[div == 2, 5]
print(test_labels)
##  [1] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
##  [5] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
##  [9] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [13] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [17] Iris-setosa     Iris-setosa     Iris-versicolor Iris-versicolor
## [21] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [25] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [29] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [33] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [37] Iris-versicolor Iris-versicolor Iris-virginica  Iris-virginica 
## [41] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [45] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [49] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [53] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [57] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## Levels: Iris-setosa Iris-versicolor Iris-virginica

Step 4: Create the machine learning model

Install class package for K-means clustering algorithm

install.packages('class', repos="http://cran.us.r-project.org")
## 
## The downloaded binary packages are in
##  /var/folders/yq/f156071x165_9gyhs631wctr0000gn/T//RtmpcQ9Io1/downloaded_packages
library(class)

Build the model

iris_pred <- knn(train = training_set, test = test_set, cl = training_labels, k = 3)

Inspect predictions

print(iris_pred)
##  [1] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
##  [5] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
##  [9] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [13] Iris-setosa     Iris-setosa     Iris-setosa     Iris-setosa    
## [17] Iris-setosa     Iris-setosa     Iris-versicolor Iris-versicolor
## [21] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [25] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [29] Iris-virginica  Iris-versicolor Iris-versicolor Iris-versicolor
## [33] Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
## [37] Iris-versicolor Iris-versicolor Iris-virginica  Iris-virginica 
## [41] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [45] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## [49] Iris-virginica  Iris-versicolor Iris-virginica  Iris-virginica 
## [53] Iris-versicolor Iris-virginica  Iris-virginica  Iris-virginica 
## [57] Iris-virginica  Iris-virginica  Iris-virginica  Iris-virginica 
## Levels: Iris-setosa Iris-versicolor Iris-virginica

Step 5: Evalute the model

Merge predictions and observed values

merge <- data.frame(iris_pred, test_labels) 
names(merge) <- c('Predicted values', 'Obeserved values')

Compare predictions to observed values

print(merge)
##    Predicted values Obeserved values
## 1       Iris-setosa      Iris-setosa
## 2       Iris-setosa      Iris-setosa
## 3       Iris-setosa      Iris-setosa
## 4       Iris-setosa      Iris-setosa
## 5       Iris-setosa      Iris-setosa
## 6       Iris-setosa      Iris-setosa
## 7       Iris-setosa      Iris-setosa
## 8       Iris-setosa      Iris-setosa
## 9       Iris-setosa      Iris-setosa
## 10      Iris-setosa      Iris-setosa
## 11      Iris-setosa      Iris-setosa
## 12      Iris-setosa      Iris-setosa
## 13      Iris-setosa      Iris-setosa
## 14      Iris-setosa      Iris-setosa
## 15      Iris-setosa      Iris-setosa
## 16      Iris-setosa      Iris-setosa
## 17      Iris-setosa      Iris-setosa
## 18      Iris-setosa      Iris-setosa
## 19  Iris-versicolor  Iris-versicolor
## 20  Iris-versicolor  Iris-versicolor
## 21  Iris-versicolor  Iris-versicolor
## 22  Iris-versicolor  Iris-versicolor
## 23  Iris-versicolor  Iris-versicolor
## 24  Iris-versicolor  Iris-versicolor
## 25  Iris-versicolor  Iris-versicolor
## 26  Iris-versicolor  Iris-versicolor
## 27  Iris-versicolor  Iris-versicolor
## 28  Iris-versicolor  Iris-versicolor
## 29   Iris-virginica  Iris-versicolor
## 30  Iris-versicolor  Iris-versicolor
## 31  Iris-versicolor  Iris-versicolor
## 32  Iris-versicolor  Iris-versicolor
## 33  Iris-versicolor  Iris-versicolor
## 34  Iris-versicolor  Iris-versicolor
## 35  Iris-versicolor  Iris-versicolor
## 36  Iris-versicolor  Iris-versicolor
## 37  Iris-versicolor  Iris-versicolor
## 38  Iris-versicolor  Iris-versicolor
## 39   Iris-virginica   Iris-virginica
## 40   Iris-virginica   Iris-virginica
## 41   Iris-virginica   Iris-virginica
## 42   Iris-virginica   Iris-virginica
## 43   Iris-virginica   Iris-virginica
## 44   Iris-virginica   Iris-virginica
## 45   Iris-virginica   Iris-virginica
## 46   Iris-virginica   Iris-virginica
## 47   Iris-virginica   Iris-virginica
## 48   Iris-virginica   Iris-virginica
## 49   Iris-virginica   Iris-virginica
## 50  Iris-versicolor   Iris-virginica
## 51   Iris-virginica   Iris-virginica
## 52   Iris-virginica   Iris-virginica
## 53  Iris-versicolor   Iris-virginica
## 54   Iris-virginica   Iris-virginica
## 55   Iris-virginica   Iris-virginica
## 56   Iris-virginica   Iris-virginica
## 57   Iris-virginica   Iris-virginica
## 58   Iris-virginica   Iris-virginica
## 59   Iris-virginica   Iris-virginica
## 60   Iris-virginica   Iris-virginica

Analyze predictions

install.packages('gmodels', repos="http://cran.us.r-project.org")
## 
## The downloaded binary packages are in
##  /var/folders/yq/f156071x165_9gyhs631wctr0000gn/T//RtmpcQ9Io1/downloaded_packages
library(gmodels)
CrossTable(merge$`Predicted values`, merge$`Obeserved values`, prop.chisq = F)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |           N / Row Total |
## |           N / Col Total |
## |         N / Table Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  60 
## 
##  
##                          | merge$`Obeserved values` 
## merge$`Predicted values` |     Iris-setosa | Iris-versicolor |  Iris-virginica |       Row Total | 
## -------------------------|-----------------|-----------------|-----------------|-----------------|
##              Iris-setosa |              18 |               0 |               0 |              18 | 
##                          |           1.000 |           0.000 |           0.000 |           0.300 | 
##                          |           1.000 |           0.000 |           0.000 |                 | 
##                          |           0.300 |           0.000 |           0.000 |                 | 
## -------------------------|-----------------|-----------------|-----------------|-----------------|
##          Iris-versicolor |               0 |              19 |               2 |              21 | 
##                          |           0.000 |           0.905 |           0.095 |           0.350 | 
##                          |           0.000 |           0.950 |           0.091 |                 | 
##                          |           0.000 |           0.317 |           0.033 |                 | 
## -------------------------|-----------------|-----------------|-----------------|-----------------|
##           Iris-virginica |               0 |               1 |              20 |              21 | 
##                          |           0.000 |           0.048 |           0.952 |           0.350 | 
##                          |           0.000 |           0.050 |           0.909 |                 | 
##                          |           0.000 |           0.017 |           0.333 |                 | 
## -------------------------|-----------------|-----------------|-----------------|-----------------|
##             Column Total |              18 |              20 |              22 |              60 | 
##                          |           0.300 |           0.333 |           0.367 |                 | 
## -------------------------|-----------------|-----------------|-----------------|-----------------|
## 
##