{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A hands-on Machine Learning Introduction in Python with scikit-learn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What is Machine Learning\n", "\n", "\n", "Machine learning is the process of **extracting knowledge from data** automatically.\n", "\n", "The goals usually include making predictions on new, unseen data or simply understanding given data better by finding patterns.\n", "\n", "Central to machine learning is the concept of **automating decision making** from data **without the user specifying explicit rules** how this decision should be made.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Examples\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3 Types of Machine Learning\n", "\n", "\n", "\n", "- **Supervised** (focus of this notebook): Each entry in the dataset comes with a \"label\". Examples are a list of emails where spam mail is already marked as such or a sample of handwritten digits. The goal is to use the historic data to make predictions.\n", "\n", "- **Unsupervised**: There is no desired output associated with a data entry. In a sense, one can think of unsupervised learning as a means of discovering labels from the data itself. A popular example is the clustering of customer data.\n", "\n", "- **Reinforcement**: Conceptually, this can be seen as \"learning by doing\". Some kind of \"reward function\" tells how good a predicted outcome is. For example, chess computers are typically programmed with this approach." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2 Types of Supervised Learning\n", "\n", "\n", "\n", "- **In classification, the label is discrete**, such as \"spam\" or \"no spam\" for emails.\n", "Furthermore, labels are nominal (e.g., colors of something), not ordinal (e.g., T-shirt sizes in S, M, or L).\n", "\n", "\n", "- **In regression, the labels are continuous**. For example, given a person's age, education, and position, infer his/her salary." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Case study: Iris flower classification\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python for scientific computing\n", "\n", "Python itself does not come with any scientific algorithms implemented it. However, over time, many open source libraries emerged that are useful to build machine learning applications.\n", "\n", "Among the popular ones are numpy (numerical computations, linear algebra), pandas (data processing), matplotlib (visualisations), and scikit-learn (machine learning algorithms).\n", "\n", "First, import the libraries:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following line is needed so that this Jupyter notebook creates the visiualizations in the notebook and not in a new window. This has nothing to do with Python." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "% matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Standard Python can do basic arithmetic operations ..." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = 1\n", "b = 2\n", "c = a + b\n", "c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... and provides some simple **data structures**, such as a list of values." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 2, 3, 4]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l = [a, b, c, 4]\n", "l" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy provides a data structure called an **n-dimensional array**. This may sound fancy at first but when used with only 1 or 2 dimensions, it basically represents vectors and matrices. Arrays allow for much faster computations as they use very low level functions modern computers provide." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create an array, use the **array()** function from the imported **np** module and provide it with a list of values." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v1 = np.array([1, 2, 3])\n", "v1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A vector can be multiplied with a scalar." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([3, 6, 9])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v2 = v1 * 3\n", "v2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create a matrix, just use a list of (row) list of values instead." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3],\n", " [4, 5, 6]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m1 = np.array([\n", " [1, 2, 3],\n", " [4, 5, 6],\n", "])\n", "m1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use numpy to multiply a matrix with a vector to obtain a new vector ..." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([14, 32])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v3 = np.dot(m1, v1)\n", "v3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... or simply transpose it." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 4],\n", " [2, 5],\n", " [3, 6]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m1.T" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The rules from maths still apply and it makes a difference if a vector is multiplied from the left or the right by a matrix. The following operation will fail." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "shapes (3,) and (2,3) not aligned: 3 (dim 0) != 2 (dim 0)", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mm1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mValueError\u001b[0m: shapes (3,) and (2,3) not aligned: 3 (dim 0) != 2 (dim 0)" ] } ], "source": [ "np.dot(v1, m1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to retrieve only a slice (= subset) of an array's data, we can \"index\" into it. For example, the first row of the matrix is ..." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m1[0, :]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... while the second column is:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2, 5])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m1[:, 1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To acces the lowest element in the right column, two indices can be used." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m1[1, 2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy also provides various other functions and constants, such as sinus or pi. To further illustrate the concept of **vectorization**, let us calculate the sinus curve over a range of values." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-9.42477796, -9.23437841, -9.04397885, -8.8535793 , -8.66317974,\n", " -8.47278019, -8.28238063, -8.09198108, -7.90158152, -7.71118197,\n", " -7.52078241, -7.33038286, -7.1399833 , -6.94958375, -6.75918419,\n", " -6.56878464, -6.37838508, -6.18798553, -5.99758598, -5.80718642,\n", " -5.61678687, -5.42638731, -5.23598776, -5.0455882 , -4.85518865,\n", " -4.66478909, -4.47438954, -4.28398998, -4.09359043, -3.90319087,\n", " -3.71279132, -3.52239176, -3.33199221, -3.14159265, -2.9511931 ,\n", " -2.76079354, -2.57039399, -2.37999443, -2.18959488, -1.99919533,\n", " -1.80879577, -1.61839622, -1.42799666, -1.23759711, -1.04719755,\n", " -0.856798 , -0.66639844, -0.47599889, -0.28559933, -0.09519978,\n", " 0.09519978, 0.28559933, 0.47599889, 0.66639844, 0.856798 ,\n", " 1.04719755, 1.23759711, 1.42799666, 1.61839622, 1.80879577,\n", " 1.99919533, 2.18959488, 2.37999443, 2.57039399, 2.76079354,\n", " 2.9511931 , 3.14159265, 3.33199221, 3.52239176, 3.71279132,\n", " 3.90319087, 4.09359043, 4.28398998, 4.47438954, 4.66478909,\n", " 4.85518865, 5.0455882 , 5.23598776, 5.42638731, 5.61678687,\n", " 5.80718642, 5.99758598, 6.18798553, 6.37838508, 6.56878464,\n", " 6.75918419, 6.94958375, 7.1399833 , 7.33038286, 7.52078241,\n", " 7.71118197, 7.90158152, 8.09198108, 8.28238063, 8.47278019,\n", " 8.66317974, 8.8535793 , 9.04397885, 9.23437841, 9.42477796])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.linspace(-3*np.pi, 3*np.pi, 100)\n", "x" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-3.67394040e-16, -1.89251244e-01, -3.71662456e-01, -5.40640817e-01,\n", " -6.90079011e-01, -8.14575952e-01, -9.09631995e-01, -9.71811568e-01,\n", " -9.98867339e-01, -9.89821442e-01, -9.45000819e-01, -8.66025404e-01,\n", " -7.55749574e-01, -6.18158986e-01, -4.58226522e-01, -2.81732557e-01,\n", " -9.50560433e-02, 9.50560433e-02, 2.81732557e-01, 4.58226522e-01,\n", " 6.18158986e-01, 7.55749574e-01, 8.66025404e-01, 9.45000819e-01,\n", " 9.89821442e-01, 9.98867339e-01, 9.71811568e-01, 9.09631995e-01,\n", " 8.14575952e-01, 6.90079011e-01, 5.40640817e-01, 3.71662456e-01,\n", " 1.89251244e-01, -1.22464680e-16, -1.89251244e-01, -3.71662456e-01,\n", " -5.40640817e-01, -6.90079011e-01, -8.14575952e-01, -9.09631995e-01,\n", " -9.71811568e-01, -9.98867339e-01, -9.89821442e-01, -9.45000819e-01,\n", " -8.66025404e-01, -7.55749574e-01, -6.18158986e-01, -4.58226522e-01,\n", " -2.81732557e-01, -9.50560433e-02, 9.50560433e-02, 2.81732557e-01,\n", " 4.58226522e-01, 6.18158986e-01, 7.55749574e-01, 8.66025404e-01,\n", " 9.45000819e-01, 9.89821442e-01, 9.98867339e-01, 9.71811568e-01,\n", " 9.09631995e-01, 8.14575952e-01, 6.90079011e-01, 5.40640817e-01,\n", " 3.71662456e-01, 1.89251244e-01, 1.22464680e-16, -1.89251244e-01,\n", " -3.71662456e-01, -5.40640817e-01, -6.90079011e-01, -8.14575952e-01,\n", " -9.09631995e-01, -9.71811568e-01, -9.98867339e-01, -9.89821442e-01,\n", " -9.45000819e-01, -8.66025404e-01, -7.55749574e-01, -6.18158986e-01,\n", " -4.58226522e-01, -2.81732557e-01, -9.50560433e-02, 9.50560433e-02,\n", " 2.81732557e-01, 4.58226522e-01, 6.18158986e-01, 7.55749574e-01,\n", " 8.66025404e-01, 9.45000819e-01, 9.89821442e-01, 9.98867339e-01,\n", " 9.71811568e-01, 9.09631995e-01, 8.14575952e-01, 6.90079011e-01,\n", " 5.40640817e-01, 3.71662456e-01, 1.89251244e-01, 3.67394040e-16])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = np.sin(x)\n", "y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With matplotlib's **plot()** function we can visualize the sinus curve." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us quickly generate some random data and draw a scatter plot." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.random.normal(42, 3, 100)\n", "y = np.random.gamma(7, 1, 100)\n", "plt.scatter(x, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Case study: importing the Iris data\n", "\n", "The sklearn library provides several sample datasets, among which is also the Iris dataset.\n", "\n", "As a table, the dataset would look like:\n", "\n", "\n", "However, the data object imported from sklearn is organized slightly different. In particular, the so-called **features** are seperated from the **labels**." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import load_iris\n", "iris = load_iris()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using Python's **dir()** function we can inspect the data object, i.e. find out what **attributes** it has." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['DESCR', 'data', 'feature_names', 'target', 'target_names']" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir(iris)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "iris.data provides us with a Numpy array, where the first dimension equals the number of observed flowers (**instances**) and the second dimension lists the various features of a flower." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[5.1, 3.5, 1.4, 0.2],\n", " [4.9, 3. , 1.4, 0.2],\n", " [4.7, 3.2, 1.3, 0.2],\n", " [4.6, 3.1, 1.5, 0.2],\n", " [5. , 3.6, 1.4, 0.2],\n", " [5.4, 3.9, 1.7, 0.4],\n", " [4.6, 3.4, 1.4, 0.3],\n", " [5. , 3.4, 1.5, 0.2],\n", " [4.4, 2.9, 1.4, 0.2],\n", " [4.9, 3.1, 1.5, 0.1],\n", " [5.4, 3.7, 1.5, 0.2],\n", " [4.8, 3.4, 1.6, 0.2],\n", " [4.8, 3. , 1.4, 0.1],\n", " [4.3, 3. , 1.1, 0.1],\n", " [5.8, 4. , 1.2, 0.2],\n", " [5.7, 4.4, 1.5, 0.4],\n", " [5.4, 3.9, 1.3, 0.4],\n", " [5.1, 3.5, 1.4, 0.3],\n", " [5.7, 3.8, 1.7, 0.3],\n", " [5.1, 3.8, 1.5, 0.3],\n", " [5.4, 3.4, 1.7, 0.2],\n", " [5.1, 3.7, 1.5, 0.4],\n", " [4.6, 3.6, 1. , 0.2],\n", " [5.1, 3.3, 1.7, 0.5],\n", " [4.8, 3.4, 1.9, 0.2],\n", " [5. , 3. , 1.6, 0.2],\n", " [5. , 3.4, 1.6, 0.4],\n", " [5.2, 3.5, 1.5, 0.2],\n", " [5.2, 3.4, 1.4, 0.2],\n", " [4.7, 3.2, 1.6, 0.2],\n", " [4.8, 3.1, 1.6, 0.2],\n", " [5.4, 3.4, 1.5, 0.4],\n", " [5.2, 4.1, 1.5, 0.1],\n", " [5.5, 4.2, 1.4, 0.2],\n", " [4.9, 3.1, 1.5, 0.1],\n", " [5. , 3.2, 1.2, 0.2],\n", " [5.5, 3.5, 1.3, 0.2],\n", " [4.9, 3.1, 1.5, 0.1],\n", " [4.4, 3. , 1.3, 0.2],\n", " [5.1, 3.4, 1.5, 0.2],\n", " [5. , 3.5, 1.3, 0.3],\n", " [4.5, 2.3, 1.3, 0.3],\n", " [4.4, 3.2, 1.3, 0.2],\n", " [5. , 3.5, 1.6, 0.6],\n", " [5.1, 3.8, 1.9, 0.4],\n", " [4.8, 3. , 1.4, 0.3],\n", " [5.1, 3.8, 1.6, 0.2],\n", " [4.6, 3.2, 1.4, 0.2],\n", " [5.3, 3.7, 1.5, 0.2],\n", " [5. , 3.3, 1.4, 0.2],\n", " [7. , 3.2, 4.7, 1.4],\n", " [6.4, 3.2, 4.5, 1.5],\n", " [6.9, 3.1, 4.9, 1.5],\n", " [5.5, 2.3, 4. , 1.3],\n", " [6.5, 2.8, 4.6, 1.5],\n", " [5.7, 2.8, 4.5, 1.3],\n", " [6.3, 3.3, 4.7, 1.6],\n", " [4.9, 2.4, 3.3, 1. ],\n", " [6.6, 2.9, 4.6, 1.3],\n", " [5.2, 2.7, 3.9, 1.4],\n", " [5. , 2. , 3.5, 1. ],\n", " [5.9, 3. , 4.2, 1.5],\n", " [6. , 2.2, 4. , 1. ],\n", " [6.1, 2.9, 4.7, 1.4],\n", " [5.6, 2.9, 3.6, 1.3],\n", " [6.7, 3.1, 4.4, 1.4],\n", " [5.6, 3. , 4.5, 1.5],\n", " [5.8, 2.7, 4.1, 1. ],\n", " [6.2, 2.2, 4.5, 1.5],\n", " [5.6, 2.5, 3.9, 1.1],\n", " [5.9, 3.2, 4.8, 1.8],\n", " [6.1, 2.8, 4. , 1.3],\n", " [6.3, 2.5, 4.9, 1.5],\n", " [6.1, 2.8, 4.7, 1.2],\n", " [6.4, 2.9, 4.3, 1.3],\n", " [6.6, 3. , 4.4, 1.4],\n", " [6.8, 2.8, 4.8, 1.4],\n", " [6.7, 3. , 5. , 1.7],\n", " [6. , 2.9, 4.5, 1.5],\n", " [5.7, 2.6, 3.5, 1. ],\n", " [5.5, 2.4, 3.8, 1.1],\n", " [5.5, 2.4, 3.7, 1. ],\n", " [5.8, 2.7, 3.9, 1.2],\n", " [6. , 2.7, 5.1, 1.6],\n", " [5.4, 3. , 4.5, 1.5],\n", " [6. , 3.4, 4.5, 1.6],\n", " [6.7, 3.1, 4.7, 1.5],\n", " [6.3, 2.3, 4.4, 1.3],\n", " [5.6, 3. , 4.1, 1.3],\n", " [5.5, 2.5, 4. , 1.3],\n", " [5.5, 2.6, 4.4, 1.2],\n", " [6.1, 3. , 4.6, 1.4],\n", " [5.8, 2.6, 4. , 1.2],\n", " [5. , 2.3, 3.3, 1. ],\n", " [5.6, 2.7, 4.2, 1.3],\n", " [5.7, 3. , 4.2, 1.2],\n", " [5.7, 2.9, 4.2, 1.3],\n", " [6.2, 2.9, 4.3, 1.3],\n", " [5.1, 2.5, 3. , 1.1],\n", " [5.7, 2.8, 4.1, 1.3],\n", " [6.3, 3.3, 6. , 2.5],\n", " [5.8, 2.7, 5.1, 1.9],\n", " [7.1, 3. , 5.9, 2.1],\n", " [6.3, 2.9, 5.6, 1.8],\n", " [6.5, 3. , 5.8, 2.2],\n", " [7.6, 3. , 6.6, 2.1],\n", " [4.9, 2.5, 4.5, 1.7],\n", " [7.3, 2.9, 6.3, 1.8],\n", " [6.7, 2.5, 5.8, 1.8],\n", " [7.2, 3.6, 6.1, 2.5],\n", " [6.5, 3.2, 5.1, 2. ],\n", " [6.4, 2.7, 5.3, 1.9],\n", " [6.8, 3. , 5.5, 2.1],\n", " [5.7, 2.5, 5. , 2. ],\n", " [5.8, 2.8, 5.1, 2.4],\n", " [6.4, 3.2, 5.3, 2.3],\n", " [6.5, 3. , 5.5, 1.8],\n", " [7.7, 3.8, 6.7, 2.2],\n", " [7.7, 2.6, 6.9, 2.3],\n", " [6. , 2.2, 5. , 1.5],\n", " [6.9, 3.2, 5.7, 2.3],\n", " [5.6, 2.8, 4.9, 2. ],\n", " [7.7, 2.8, 6.7, 2. ],\n", " [6.3, 2.7, 4.9, 1.8],\n", " [6.7, 3.3, 5.7, 2.1],\n", " [7.2, 3.2, 6. , 1.8],\n", " [6.2, 2.8, 4.8, 1.8],\n", " [6.1, 3. , 4.9, 1.8],\n", " [6.4, 2.8, 5.6, 2.1],\n", " [7.2, 3. , 5.8, 1.6],\n", " [7.4, 2.8, 6.1, 1.9],\n", " [7.9, 3.8, 6.4, 2. ],\n", " [6.4, 2.8, 5.6, 2.2],\n", " [6.3, 2.8, 5.1, 1.5],\n", " [6.1, 2.6, 5.6, 1.4],\n", " [7.7, 3. , 6.1, 2.3],\n", " [6.3, 3.4, 5.6, 2.4],\n", " [6.4, 3.1, 5.5, 1.8],\n", " [6. , 3. , 4.8, 1.8],\n", " [6.9, 3.1, 5.4, 2.1],\n", " [6.7, 3.1, 5.6, 2.4],\n", " [6.9, 3.1, 5.1, 2.3],\n", " [5.8, 2.7, 5.1, 1.9],\n", " [6.8, 3.2, 5.9, 2.3],\n", " [6.7, 3.3, 5.7, 2.5],\n", " [6.7, 3. , 5.2, 2.3],\n", " [6.3, 2.5, 5. , 1.9],\n", " [6.5, 3. , 5.2, 2. ],\n", " [6.2, 3.4, 5.4, 2.3],\n", " [5.9, 3. , 5.1, 1.8]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iris.data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To find out what the four features are, we can list them:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['sepal length (cm)',\n", " 'sepal width (cm)',\n", " 'petal length (cm)',\n", " 'petal width (cm)']" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iris.feature_names" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly, we can also print the flowers' labels (a.k.a. targets):" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iris.target" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The three flower classes are encoded with integers. Let's show the corresponding names:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['setosa', 'versicolor', 'virginica'], dtype='" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "feature_index = 2\n", "colors = ['blue', 'red', 'green']\n", "\n", "for label, color in zip(range(len(iris.target_names)), colors):\n", " plt.hist(iris.data[iris.target==label, feature_index], \n", " label=iris.target_names[label],\n", " color=color)\n", "\n", "plt.xlabel(iris.feature_names[feature_index])\n", "plt.legend(loc='upper right')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Also, we can draw scatter plots of two features." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEKCAYAAAAW8vJGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xt8FPW98PHPN5tQCCiich4pmEROK1YIdy9IW6nBo/WCp4/y4HmiIurJQ1L1WGvVlh6gtmlPa49aa0FjW7UmR21RWy9tT4VqvZ4qUC6KRakSBKwCahSCSsj3+WMmkN3sbnYmu7Ozs9/36zWvZH47l9/MJPll5vub709UFWOMMaZLSb4rYIwxJlysYTDGGBPHGgZjjDFxrGEwxhgTxxoGY4wxcaxhMMYYE8caBmOMMXGsYTDGGBPHGgZjjDFxSvNdAa8OPfRQraqqync1jDGmoKxYsWK7qg7NZNmCaxiqqqpYvnx5vqthjDEFRURaM13WHiUZY4yJk9OGQUS+IiIviciLInKPiPRP+PwTInKfiGwQkT+LSFUu62OMMaZ3OWsYRGQ4cDkwWVXHADHg3ITFLgbeVdVPATcC389VfYwxxmQm1zGGUmCAiOwByoGtCZ+fBSx0v18C3CIioh5zge/Zs4fNmzfz4Ycf9rW+Bujfvz8jRoygrKws31UxxuRBzhoGVd0iIj8ENgG7gT+o6h8SFhsOvOEu3yEibcAhwHYv+9q8eTMHHHAAVVVViEgWal+8VJUdO3awefNmjjjiiHxXxxiTB7l8lDQE547gCOCTwEAROc/ntupEZLmILN+2bVuPzz/88EMOOeQQaxSyQEQ45JBD7O7LmCKWy+DzdOB1Vd2mqnuAB4ATEpbZAhwOICKlwGBgR+KGVLVJVSer6uShQ5N3w7VGIXvsXBpT3HLZMGwCjheRcnH+0tQALycs8xAw2/3+HOCPXuMLxpjC07K2haqbqij5VglVN1XRsrYl31Uy3eSsYVDVP+MElFcCa919NYnIdSIyw13sZ8AhIrIBuBK4Nlf1CZM777yTrVsT4/DGFIeWtS3UPVxHa1sritLa1krdw3XWOIRITt9jUNUFqnqUqo5R1fNV9SNVna+qD7mff6iqM1X1U6p6rKq+lsv6hIU1DKaYzVs2j/Y97XFl7XvambdsXp5qZBIV5ZvPLS1QVQUlJc7Xliz8o7Jr1y5OP/10xo0bx5gxY7jvvvtYsWIFJ554IpMmTeKUU07hzTffZMmSJSxfvpza2lrGjx/P7t27WbZsGRMmTKC6upqLLrqIjz76CIBrr72Wo48+mrFjx3LVVVcB8PDDD3PccccxYcIEpk+fzltvvdX3yhsToE1tmzyVmzxQ1YKaJk2apInWrVvXoyyV5mbV8nJV2D+VlzvlfbFkyRK95JJL9s2/9957OmXKFH377bdVVfXee+/VOXPmqKrqiSeeqC+88IKqqu7evVtHjBih69evV1XV888/X2+88Ubdvn27HnnkkdrZ2amqqu+++66qqr7zzjv7ym6//Xa98sor+1bxFLycU2O8qLyxUllIj6nyxsp8Vy3SgOWa4d/ZortjmDcP2uPvYmlvd8r7orq6mscee4xrrrmGp556ijfeeIMXX3yRk08+mfHjx/Od73yHzZs391hv/fr1HHHEERx55JEAzJ49myeffJLBgwfTv39/Lr74Yh544AHKy8sB552NU045herqaq6//npeeumlvlXcmIA11jRSXlYeV1ZeVk5jTWOeamQSFV3DsCnF3Wqq8kwdeeSRrFy5kurqar75zW9y//33M3r0aFatWsWqVatYu3Ytf/hD4vt9qZWWlvL8889zzjnn8Mgjj3DqqacCcNlll3HppZeydu1abrvtNnvfwBSc2upams5sonJwJYJQObiSpjObqK2uzXfVjKvg0m73VUUFtCZJPltR0bftbt26lYMPPpjzzjuPgw46iEWLFrFt2zaee+45pkyZwp49e3jllVcYPXo0BxxwAB988AEAo0aNYuPGjWzYsIFPfepT3H333Zx44ons3LmT9vZ2TjvtNKZOncrIkSMBaGtrY/jw4QDcddddfau0MXlSW11rDUGIFV3D0NgIdXXxj5PKy53yvli7di1f+9rXKCkpoaysjMWLF1NaWsrll19OW1sbHR0dXHHFFYwePZoLL7yQuXPnMmDAAJ577jnuuOMOZs6cSUdHB8cccwxz587lnXfe4ayzzuLDDz9EVbnhhhsAWLhwITNnzmTIkCGcdNJJvP76632ruDHGJBAtsPfJJk+erIkD9bz88st85jOfyXgbLS1OTGHTJudOobERau2flzhez6kxJtxEZIWqTs5k2aK7YwCnEbCGwBhjkiu64LPJXBBpC6KyD+ON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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "first_feature_index = 1\n", "second_feature_index = 0\n", "\n", "colors = ['blue', 'red', 'green']\n", "\n", "for label, color in zip(range(len(iris.target_names)), colors):\n", " plt.scatter(iris.data[iris.target==label, first_feature_index], \n", " iris.data[iris.target==label, second_feature_index],\n", " label=iris.target_names[label],\n", " c=color)\n", "\n", "plt.xlabel(iris.feature_names[first_feature_index])\n", "plt.ylabel(iris.feature_names[second_feature_index])\n", "plt.legend(loc='upper left')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the higher level library pandas, one can easily create a so-called **scatterplot matrix**." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/webartifex/Projects/cscm-workshop-intro-machine-learning/venv/lib/python3.5/site-packages/ipykernel_launcher.py:2: FutureWarning: 'pandas.tools.plotting.scatter_matrix' is deprecated, import 'pandas.plotting.scatter_matrix' instead.\n", " \n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)\n", "pd.tools.plotting.scatter_matrix(iris_df, figsize=(8, 8));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Concept of Generalization\n", "\n", "The goal of a supervised machine learning model is to make predictions on new (i.e., previously unseen) data.\n", "\n", "In a real-world application, we are not interested in marking an already labeled email as spam or not. Instead, we want to make the user's life easier by automatically classifying new incoming mail.\n", "\n", "In order to get an idea of how good a model generalizes, a best practice is to split the available data into a training and a test set. Only the former is used to train the model. Then predictions are made on the test data and the predictions can be compared with the actual labels.\n", "\n", "Common splits are 75/25 or 60/40.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Case study: Train/Test split for the Iris data\n", "\n", "It is common practice to refer to the feature matrix as X and the vector of labels as y." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "X, y = iris.data, iris.target" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A naive splitting approach could be to use array slicing." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = X[0:100, :], X[100:150, :], y[0:100], y[100:150]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, this would lead to unbalanced label distributions. For example, the test set would only be made up of flowers of the same type." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_test" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 0, 50])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.bincount(y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "sklearn provides a function that not only randomizes the split but also ensures that the resulting label distribution is proportionate to the overall distribution (called **stratification**)." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/webartifex/Projects/cscm-workshop-intro-machine-learning/venv/lib/python3.5/site-packages/sklearn/model_selection/_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n", " FutureWarning)\n" ] }, { "data": { "text/plain": [ "array([0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 0,\n", " 0, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, 0, 0, 0, 0, 2, 0, 2, 1, 2,\n", " 1])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, stratify=y)\n", "y_test" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([15, 15, 15])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.bincount(y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A simple classification model: k-Nearest Neighbors\n", "\n", "To predict the label for any observation, just determine the k \"nearest\" observations in the training set (e.g., by Euclidean distance) and use a simple majority vote.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Case study: train and predict the Iris data\n", "\n", "sklearn provides a uniform interface for all its classification models. They all have a **fit()** and a **predict()** method that abstract away the actual machine learning algorithm." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "from sklearn.neighbors import KNeighborsClassifier\n", "\n", "knn = KNeighborsClassifier(n_neighbors=5)\n", "\n", "knn.fit(X_train, y_train)\n", "\n", "y_pred = knn.predict(X_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us list the labels predicted for the test set ..." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 0,\n", " 0, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, 0, 0, 0, 0, 2, 0, 1, 1, 2,\n", " 1])" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_pred" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... and compare them with the actual labels." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 0,\n", " 0, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, 0, 0, 0, 0, 2, 0, 2, 1, 2,\n", " 1])" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy can show us the indices where the predictions are wrong." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([41]),)" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.where(y_pred != y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, we can calculate the fraction of correctly predicted flowers." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9777777777777777" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(y_pred == y_test) / len(y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is important to mention that we can also \"predict\" the training set. Surprisingly, the model does not get the training set 100% correct." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9714285714285714" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train_pred = knn.predict(X_train)\n", "np.sum(y_train_pred == y_train) / len(y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A visualization reveals that the misclassified flowers are right \"at the borderline\" between two neighboring clusters of flower classes." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "first_feature_index = 3\n", "second_feature_index = 0\n", "\n", "correct_idx = np.where(y_pred == y_test)[0]\n", "incorrect_idx = np.where(y_pred != y_test)[0]\n", "\n", "colors = [\"darkblue\", \"darkgreen\", \"gray\"]\n", "\n", "for n, color in enumerate(colors):\n", " idx = np.where(y_test == n)[0]\n", " plt.scatter(X_test[idx, first_feature_index], X_test[idx, second_feature_index], color=color,\n", " label=iris.target_names[n])\n", "\n", "plt.scatter(X_test[incorrect_idx, first_feature_index], X_test[incorrect_idx, second_feature_index],\n", " color=\"darkred\", label='misclassified')\n", "\n", "plt.xlabel('sepal width [cm]')\n", "plt.ylabel('petal length [cm]')\n", "plt.legend(loc='best')\n", "plt.title(\"Iris Classification results\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In practice, the number of neighbors is to chosen before the model is trained. Therefore, it is possible to \"optimize\" it. This process is referred to as **hyper-parameter** tuning. For the Iris dataset this does not make much of a difference." ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 0.9555555555555556\n", "2 0.9111111111111111\n", "3 0.9555555555555556\n", "4 0.9555555555555556\n", "5 0.9777777777777777\n", "6 0.9777777777777777\n", "7 0.9777777777777777\n", "8 0.9555555555555556\n", "9 0.9555555555555556\n", "10 0.9555555555555556\n", "11 0.9777777777777777\n", "12 0.9777777777777777\n", "13 0.9777777777777777\n", "14 0.9777777777777777\n", "15 0.9777777777777777\n", "16 0.9777777777777777\n", "17 0.9777777777777777\n", "18 0.9777777777777777\n", "19 0.9777777777777777\n", "20 0.9777777777777777\n", "21 0.9777777777777777\n", "22 0.9555555555555556\n", "23 0.9555555555555556\n", "24 0.9555555555555556\n", "25 0.9555555555555556\n", "26 0.9333333333333333\n", "27 0.9555555555555556\n", "28 0.9333333333333333\n", "29 0.9777777777777777\n", "30 0.9333333333333333\n" ] } ], "source": [ "for i in range(1, 31):\n", " knn = KNeighborsClassifier(n_neighbors=i)\n", " knn.fit(X_train, y_train)\n", " y_pred = knn.predict(X_test)\n", " correct = np.sum(y_pred == y_test) / len(y_test)\n", " print(i, correct)\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Literature\n", "\n", "Depending on the programming language one chooses, the following books are recommended.\n", "\n", "- Python\n", "\n", "\n", "\n", "\n", "\n", "- R\n", "\n", "" ] } ], "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.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }