{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Homework 5 - Classification of flower petal shapes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This data set consists of 3 different types of irises’ (Setosa, Versicolour, and Virginica) petal and sepal length, stored in a 150x4 numpy.ndarray.\n", "\n", "The rows being the samples and the columns being:\n", "\n", "1. sepal length,\n", "2. sepal width,\n", "3. petal length and\n", "4. petal width." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from sklearn import datasets\n", "iris = datasets.load_iris()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data comes as a dictionary. You can access the predictors using `iris.data` and the classes using `iris.target`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "X = iris.data\n", "y = iris.target" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Task**: How many samples are in the data set." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Solution**:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "150" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Task**: Plot the sepal length on the x-axis and the sepal width on the y-axis. Color each of the three types of irises differently.\n", "Add a legend that gives the correct iris type (0-Setosa, 1-Versicolour, 2-Virginica)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Solution**:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzt3XuUVNWZ9/HvI6Co2BrBRIRAk/EOza0BURxBUcwgQQ24kGVUWl0GUNQQZ0ZzUcYsRzPJGzRvRKNGwMsrZIgaQxIVuXgLQQFBUARJhAgSRFAEAyLhef+oQ9ndVPc5TZ86darr91mrFnXZteupY9u7z9n72Y+5OyIiIgAHFDoAERFJDw0KIiKSpUFBRESyNCiIiEiWBgUREcnSoCAiIlkaFEREJCvvg4KZNTOz181sZo7XRpnZJjNbEtyuync8IiJSt+YJfMb1wAqgrI7Xp7v7tQnEISIiIfI6KJhZe+A84HZgfBx9tmnTxsvLy+PoSkSkZCxatOhDdz8qrF2+zxTuAv4DOKyeNsPM7AxgFfAdd3+vvg7Ly8tZuHBhjCGKiDR9ZrY2Sru8zSmY2RDgA3dfVE+z3wHl7t4VeB6YWkdfV5vZQjNbuGnTpjxEKyIikN+J5n7AUDNbA0wDzjKzR6s3cPfN7v5Z8PABoDJXR+5+v7v3cvdeRx0VevYjIiL7KW+Dgrvf7O7t3b0cuBiY4+7fqt7GzNpWeziUzIS0iIgUSBKrj2ows9uAhe7+NHCdmQ0FdgNbgFFJxyMi+ff555+zbt06du7cWehQmryWLVvSvn17WrRosV/vt2Krp9CrVy/XRLNIcXn33Xc57LDDaN26NWZW6HCaLHdn8+bNbNu2jU6dOtV4zcwWuXuvsD6U0SxNwsRZqwodgtRj586dGhASYGa0bt26UWdkGhSkSbh79juFDkFCaEBIRmOPswYFERHJ0qAgRWvirFWU3/R7ym/6PUD2vi4lSS633347nTt3pmvXrnTv3p0FCxbU2XbKlCm8//77CUaXHomvPhKJy3fOOZ7vnHM8kBkQ1tx5XoEjkrhNnLUq+9+4MebPn8/MmTNZvHgxBx10EB9++CG7du2qs/2UKVPo0qULxxxzTKM/u9joTEFEUiuuuaINGzbQpk0bDjroIADatGnDMcccw6JFi+jfvz+VlZWce+65bNiwgRkzZrBw4UIuueQSunfvzo4dO5g9ezY9evSgoqKCK664gs8+y+Tc3nTTTZx88sl07dqVG2+8EYDf/e53nHLKKfTo0YOzzz6bjRs3xvIdEuPuRXWrrKx0kdp+9tzKQocg9Xjrrbf2630d/3NmLJ+/bds279atmx933HE+ZswYnzdvnu/atctPPfVU/+CDD9zdfdq0aV5VVeXu7v379/fXXnvN3d137Njh7du395UrMz9jl156qU+cONE3b97sxx9/vO/Zs8fd3T/66CN3d9+yZUv2uQceeMDHjx8fy3doiFzHm0x+WOjvWF0+kiYhjksMkg4TZ62qcYawd87o+oHH7fd/51atWrFo0SJeeukl5s6dy4gRI/jBD37A8uXLOeeccwD45z//Sdu2bfd578qVK+nUqRPHH5/57Msvv5x77rmHa6+9lpYtW3LVVVdx3nnnMWTIEADWrVvHiBEj2LBhA7t27donXyDtNCiISKrka66oWbNmDBgwgAEDBlBRUcE999xD586dmT9/fr3v8zoSfJs3b86rr77K7NmzmTZtGr/4xS+YM2cO48aNY/z48QwdOpR58+YxYcKEWOJPiuYURKTJW7lyJe+888XZx5IlSzjppJPYtGlTdlD4/PPPefPNNwE47LDD2LZtGwAnnngia9asYfXq1QA88sgj9O/fn+3bt7N161YGDx7MXXfdxZIlSwDYunUr7dq1A2Dq1JwbP6eazhREJLWuH3hcLP1s376dcePG8fHHH9O8eXOOPfZY7r//fq6++mquu+46tm7dyu7du7nhhhvo3Lkzo0aNYvTo0Rx88MHMnz+fyZMnc9FFF7F792569+7N6NGj2bJlC+effz47d+7E3Zk4cSIAEyZM4KKLLqJdu3b07duXd999N5bvkBTtfSQiebdixQpOOumkQodRMnIdb+19JCIiDaZBQUREsjQoiIhIlgYFERHJ0qAgIiJZGhSk4LSrqUh6aFCQglOBHMm3AQMG8Oyzz9Z47q677mLs2LGN6veWW27h+eefb/D75s2bl90WI200KIhIes29I5ZuRo4cybRp02o8N23aNEaOHBn6Xndnz549OV+77bbbOPvss2OJcX/UF9v+0qAgBaECORLJC3fG0s3w4cOZOXNmdsvrNWvW8P7773P66afzk5/8hN69e9O1a1duvfXW7OsnnXQSY8eOpWfPnrz3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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "for l in range(3):\n", " # Find out indices belonging to class l\n", " idx = (y==l)\n", " plt.plot(X[idx,0],X[idx,1],'+')\n", "plt.xlabel('Sepal length')\n", "plt.ylabel('Sepal width')\n", "plt.legend(['Setosa','Versicolour','Virginica']);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Task**:\n", "Split your data into a training and a test set.\n", "Put the first 40 samples within each class in the training set and the remaining samples in a test data set." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Solution**:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "train_idx = np.hstack([np.arange(0,40),np.arange(50,90),np.arange(100,140)])\n", "test_idx = np.hstack([np.arange(40,50),np.arange(90,100),np.arange(140,150)])\n", "Xtrain, ytrain = X[train_idx,:],y[train_idx]\n", "Xtest , ytest = X[test_idx, :],y[test_idx]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the lecture you've heard about the classification method called\n", "*Linear discriminant analysis (LDA)*.\n", "\n", "**Task**: Find a way using `scikit-learn` to accomplish a linear discriminant analysis.\n", "\n", "Perform an LDA using only the first two predictors, i.e., `sepal length` and `sepal width`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Solution**:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage=None,\n", " solver='svd', store_covariance=False, tol=0.0001)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", "lda = LinearDiscriminantAnalysis()\n", "lda.fit(Xtrain[:,0:2],ytrain)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Task**: What is the proportion of correctly classified irises in the *test* data set." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Solution**:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Proportion of correct classifications: 0.8666666666666667\n" ] } ], "source": [ "prop1 = np.mean(1-np.abs(lda.predict(Xtest[:,0:2])-ytest))\n", "print('Proportion of correct classifications: ', prop1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Task**: Now, incorporate all of the predictors. How does the proportion of correct classifications change?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Solution**:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Proportion of correct classifications: 1.0\n" ] } ], "source": [ "**Solution**:from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", "lda2 = LinearDiscriminantAnalysis()\n", "lda2.fit(Xtrain,ytrain)\n", "prop2 = np.mean(1-np.abs(lda2.predict(Xtest)-ytest))\n", "print('Proportion of correct classifications: ', prop2)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }