Iris flower data set
Statistics dataset
- 6 min read
- 2 chapters
Related on Lably
Through Data set, Morphology (biology) and Petal
The data set consists of 50 samples from each of three species of Iris (Iris setosa, Iris virginica and Iris versicolor). Four features were measured from each sample: the length and the width of the sepals and petals, in centimeters. Based on the combination of these four features, Fisher developed a linear discriminant model to distinguish each species. Fisher's paper was published in the Annals of Eugenics (today the Annals of Human Genetics).
Use of the data set
Originally used as an example data set on which Fisher's linear discriminant analysis was applied, it became a typical test case for many statistical classification techniques in machine learning such as support vector machines.
The use of this data set in cluster analysis however is not common, since the data set only contains two clusters with rather obvious separation. One of the clusters contains Iris setosa, while the other cluster contains both Iris virginica and Iris versicolor and is not separable without the species information Fisher used. This makes the data set a good example to explain the difference between supervised and unsupervised techniques in data mining: Fisher's linear discriminant model can only be obtained when the object species are known: class labels and clusters are not necessarily the same.
Nevertheless, all three species of Iris are separable in the projection on the nonlinear and branching principal component. The data set is approximated by the closest tree with some penalty for the excessive number of nodes, bending and stretching. Then the so-called "metro map" is constructed. The data points are projected into the closest node. For each node the pie diagram of the projected points is prepared. The area of the pie is proportional to the number of the projected points. It is clear from the diagram (left) that the absolute majority of the samples of the different Iris species belong to the different nodes. Only a small fraction of Iris-virginica is mixed with Iris-versicolor (the mixed blue-green nodes in the diagram). Therefore, the three species of Iris (Iris setosa, Iris virginica and Iris versicolor) are separable by the unsupervising procedures of nonlinear principal component analysis. To discriminate them, it is sufficient just to select the corresponding nodes on the principal tree.
Sign in to keep reading
One more chapter is free with a Lably account.
Data set
The data set contains a set of 150 records under five attributes: sepal length, sepal width, petal length, petal width and species.
The iris data set is widely used as a beginner's data set for machine learning purposes. The data set is included in R base and Python in the machine learning library scikit-learn, so that users can access it without having to find a source for it.
Several versions of the data set have been published.
R code illustrating usage
The example R code shown below reproduce the scatterplot displayed at the top of this article:
<span id="mwBes"></span><span class="c1" id="mwBew"># Show the data set</span> <span class="n" id="mwBe0">iris</span> <span class="c1" id="mwBe4"># Show the help page, with information about the data set</span> <span class="o" id="mwBe8">?</span><span class="n" id="mwBfA">iris</span> <span class="c1" id="mwBfE"># Create scatterplots of all pairwise combination of the 4 variables in the data set</span> <span class="nf" id="mwBfI">pairs</span><span class="p" id="mwBfM">(</span><span class="n" id="mwBfQ">iris</span><span class="p" id="mwBfU">[</span><span class="m" id="mwBfY">1</span><span class="o" id="mwBfc">:</span><span class="m" id="mwBfg">4</span><span class="p" id="mwBfk">],</span><span class="w" id="mwBfo"> </span><span class="n" id="mwBfs">main</span><span class="o" id="mwBfw">=</span><span class="s" id="mwBf0">"Iris Data (red=setosa,green=versicolor,blue=virginica)"</span><span class="p" id="mwBf4">,</span> <span class="w" id="mwBf8"> </span><span class="n" id="mwBgA">pch</span><span class="o" id="mwBgE">=</span><span class="m" id="mwBgI">21</span><span class="p" id="mwBgM">,</span><span class="w" id="mwBgQ"> </span><span class="n" id="mwBgU">bg</span><span class="o" id="mwBgY">=</span><span class="nf" id="mwBgc">c</span><span class="p" id="mwBgg">(</span><span class="s" id="mwBgk">"red"</span><span class="p" id="mwBgo">,</span><span class="s" id="mwBgs">"green3"</span><span class="p" id="mwBgw">,</span><span class="s" id="mwBg0">"blue"</span><span class="p" id="mwBg4">)[</span><span class="nf" id="mwBg8">unclass</span><span class="p" id="mwBhA">(</span><span class="n" id="mwBhE">iris</span><span class="o" id="mwBhI">$</span><span class="n" id="mwBhM">Species</span><span class="p" id="mwBhQ">)])</span> <span class="w" id="mwBhU"> </span> <span class="c1" id="mwBhY"># Alternatively using ggplot and ggally.</span> <span class="nf" id="mwBhc">install.packages</span><span class="p" id="mwBhg">(</span><span class="nf" id="mwBhk">c</span><span class="p" id="mwBho">(</span><span class="s" id="mwBhs">"ggplot2"</span><span class="p" id="mwBhw">,</span><span class="s" id="mwBh0">"GGally"</span><span class="p" id="mwBh4">))</span><span class="w" id="mwBh8"> </span><span class="c1" id="mwBiA"># install packages if you don't have it.</span> <span class="c1" id="mwBiE">#Load libraries.</span> <span class="nf" id="mwBiI">library</span><span class="p" id="mwBiM">(</span><span class="n" id="mwBiQ">ggplot2</span><span class="p" id="mwBiU">)</span> <span class="nf" id="mwBiY">library</span><span class="p" id="mwBic">(</span><span class="n" id="mwBig">GGally</span><span class="p" id="mwBik">)</span> <span class="c1" id="mwBio"># Plot scatter plot matrix for the iris data set</span> <span class="nf" id="mwBis">ggpairs</span><span class="p" id="mwBiw">(</span><span class="n" id="mwBi0">data</span><span class="w" id="mwBi4"> </span><span class="o" id="mwBi8">=</span><span class="w" id="mwBjA"> </span><span class="n" id="mwBjE">iris</span><span class="p" id="mwBjI">,</span><span class="w" id="mwBjM"> </span><span class="c1" id="mwBjQ"># your iris data</span> <span class="w" id="mwBjU"> </span><span class="n" id="mwBjY">columns</span><span class="w" id="mwBjc"> </span><span class="o" id="mwBjg">=</span><span class="w" id="mwBjk"> </span><span class="m" id="mwBjo">1</span><span class="o" id="mwBjs">:</span><span class="m" id="mwBjw">4</span><span class="p" id="mwBj0">,</span><span class="w" id="mwBj4"> </span><span class="c1" id="mwBj8"># columns for the scatter plot </span> <span class="w" id="mwBkA"> </span><span class="n" id="mwBkE">mapping</span><span class="w" id="mwBkI"> </span><span class="o" id="mwBkM">=</span><span class="w" id="mwBkQ"> </span><span class="nf" id="mwBkU">aes</span><span class="p" id="mwBkY">(</span><span class="n" id="mwBkc">colour</span><span class="w" id="mwBkg"> </span><span class="o" id="mwBkk">=</span><span class="w" id="mwBko"> </span><span class="n" id="mwBks">Species</span><span class="p" id="mwBkw">,</span><span class="n" id="mwBk0">fill</span><span class="w" id="mwBk4"> </span><span class="o" id="mwBk8">=</span><span class="w" id="mwBlA"> </span><span class="n" id="mwBlE">Species</span><span class="p" id="mwBlI">),</span> <span class="w" id="mwBlM"> </span><span class="n" id="mwBlQ">title</span><span class="w" id="mwBlU"> </span><span class="o" id="mwBlY">=</span><span class="w" id="mwBlc"> </span><span class="s" id="mwBlg">'Scatter Plot Matrix for Iris Data Set'</span><span class="p" id="mwBlk">,</span> <span class="w" id="mwBlo"> </span><span class="p" id="mwBls">)</span><span class="w" id="mwBlw"> </span><span class="o" id="mwBl0">+</span> <span class="w" id="mwBl4"> </span><span class="nf" id="mwBl8">theme</span><span class="p" id="mwBmA">(</span><span class="n" id="mwBmE">plot.title</span><span class="w" id="mwBmI"> </span><span class="o" id="mwBmM">=</span><span class="w" id="mwBmQ"> </span><span class="nf" id="mwBmU">element_text</span><span class="p" id="mwBmY">(</span><span class="n" id="mwBmc">hjust</span><span class="w" id="mwBmg"> </span><span class="o" id="mwBmk">=</span><span class="w" id="mwBmo"> </span><span class="m" id="mwBms">0.5</span><span class="p" id="mwBmw">,</span><span class="n" id="mwBm0">face</span><span class="w" id="mwBm4"> </span><span class="o" id="mwBm8">=</span><span class="w" id="mwBnA"> </span><span class="s" id="mwBnE">'bold'</span><span class="p" id="mwBnI">))</span><span class="w" id="mwBnM"> </span><span class="o" id="mwBnQ">+</span> <span class="w" id="mwBnU"> </span><span class="nf" id="mwBnY">scale_color_brewer</span><span class="p" id="mwBnc">(</span><span class="n" id="mwBng">palette</span><span class="w" id="mwBnk"> </span><span class="o" id="mwBno">=</span><span class="w" id="mwBns"> </span><span class="s" id="mwBnw">'Set1'</span><span class="p" id="mwBn0">)</span>
Python code illustrating usage
<span id="mwBoI"></span><span class="kn" id="mwBoM">from</span><span class="w" id="mwBoQ"> </span><span class="nn" id="mwBoU">sklearn.datasets</span><span class="w" id="mwBoY"> </span><span class="kn" id="mwBoc">import</span> <span class="n" id="mwBog">load_iris</span> <span class="n" id="mwBok">iris</span> <span class="o" id="mwBoo">=</span> <span class="n" id="mwBos">load_iris</span><span class="p" id="mwBow">()</span> <span class="nb" id="mwBo0">print</span><span class="p" id="mwBo4">(</span><span class="n" id="mwBo8">iris</span><span class="p" id="mwBpA">)</span>
This code gives:
<span id="mwBpQ"></span><span class="p" id="mwBpU">{</span><span class="s1" id="mwBpY">'data'</span><span class="p" id="mwBpc">:</span> <span class="n" id="mwBpg">array</span><span class="p" id="mwBpk">([[</span><span class="mf" id="mwBpo">5.1</span><span class="p" id="mwBps">,</span> <span class="mf" id="mwBpw">3.5</span><span class="p" id="mwBp0">,</span> <span class="mf" id="mwBp4">1.4</span><span class="p" id="mwBp8">,</span> <span class="mf" id="mwBqA">0.2</span><span class="p" id="mwBqE">],</span> <span class="p" id="mwBqI">[</span><span class="mf" id="mwBqM">4.9</span><span class="p" id="mwBqQ">,</span> <span class="mf" id="mwBqU">3.</span><span class="p" id="mwBqY">,</span> <span class="mf" id="mwBqc">1.4</span><span class="p" id="mwBqg">,</span> <span class="mf" id="mwBqk">0.2</span><span class="p" id="mwBqo">],</span> <span class="p" id="mwBqs">[</span><span class="mf" id="mwBqw">4.7</span><span class="p" id="mwBq0">,</span> <span class="mf" id="mwBq4">3.2</span><span class="p" id="mwBq8">,</span> <span class="mf" id="mwBrA">1.3</span><span class="p" id="mwBrE">,</span> <span class="mf" id="mwBrI">0.2</span><span class="p" id="mwBrM">],</span> <span class="p" id="mwBrQ">[</span><span class="mf" id="mwBrU">4.6</span><span class="p" id="mwBrY">,</span> <span class="mf" id="mwBrc">3.1</span><span class="p" id="mwBrg">,</span> <span class="mf" id="mwBrk">1.5</span><span class="p" id="mwBro">,</span> <span class="mf" id="mwBrs">0.2</span><span class="p" id="mwBrw">],</span><span class="o" id="mwBr0">...</span> <span class="s1" id="mwBr4">'target'</span><span class="p" id="mwBr8">:</span> <span class="n" id="mwBsA">array</span><span class="p" id="mwBsE">([</span><span class="mi" id="mwBsI">0</span><span class="p" id="mwBsM">,</span> <span class="mi" id="mwBsQ">0</span><span class="p" id="mwBsU">,</span> <span class="mi" id="mwBsY">0</span><span class="p" id="mwBsc">,</span> <span class="o" id="mwBsg">...</span> <span class="mi" id="mwBsk">1</span><span class="p" id="mwBso">,</span> <span class="mi" id="mwBss">1</span><span class="p" id="mwBsw">,</span> <span class="mi" id="mwBs0">1</span><span class="p" id="mwBs4">,</span> <span class="o" id="mwBs8">...</span> <span class="mi" id="mwBtA">2</span><span class="p" id="mwBtE">,</span> <span class="mi" id="mwBtI">2</span><span class="p" id="mwBtM">,</span> <span class="mi" id="mwBtQ">2</span><span class="p" id="mwBtU">,</span> <span class="o" id="mwBtY">...</span> <span class="s1" id="mwBtc">'target_names'</span><span class="p" id="mwBtg">:</span> <span class="n" id="mwBtk">array</span><span class="p" id="mwBto">([</span><span class="s1" id="mwBts">'setosa'</span><span class="p" id="mwBtw">,</span> <span class="s1" id="mwBt0">'versicolor'</span><span class="p" id="mwBt4">,</span> <span class="s1" id="mwBt8">'virginica'</span><span class="p" id="mwBuA">],</span> <span class="n" id="mwBuE">dtype</span><span class="o" id="mwBuI">=</span><span class="s1" id="mwBuM">'<U10'</span><span class="p" id="mwBuQ">),</span> <span class="o" id="mwBuU">...</span><span class="p" id="mwBuY">}</span>
