{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Stat479: Machine Learning -- L02: kNN in Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "STAT 479: Machine Learning (Fall 2018) \n", "Instructor: Sebastian Raschka (sraschka@wisc.edu) \n", "Course website: http://pages.stat.wisc.edu/~sraschka/teaching/stat479-fs2018/" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sebastian Raschka \n", "last updated: 2018-09-09 \n", "\n", "CPython 3.6.6\n", "IPython 6.5.0\n", "\n", "numpy 1.15.0\n", "scipy 1.1.0\n", "matplotlib 2.2.2\n", "sklearn 0.19.1\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -d -u -a 'Sebastian Raschka' -v -p numpy,scipy,matplotlib,sklearn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 0 - General Imports" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1 - Load Dataset into a Pandas DataFrame" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IdSepalLength[cm]SepalWidth[cm]PetalLength[cm]PetalWidth[cm]Species
1451466.73.05.22.3Iris-virginica
1461476.32.55.01.9Iris-virginica
1471486.53.05.22.0Iris-virginica
1481496.23.45.42.3Iris-virginica
1491505.93.05.11.8Iris-virginica
\n", "
" ], "text/plain": [ " Id SepalLength[cm] SepalWidth[cm] PetalLength[cm] PetalWidth[cm] \\\n", "145 146 6.7 3.0 5.2 2.3 \n", "146 147 6.3 2.5 5.0 1.9 \n", "147 148 6.5 3.0 5.2 2.0 \n", "148 149 6.2 3.4 5.4 2.3 \n", "149 150 5.9 3.0 5.1 1.8 \n", "\n", " Species \n", "145 Iris-virginica \n", "146 Iris-virginica \n", "147 Iris-virginica \n", "148 Iris-virginica \n", "149 Iris-virginica " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_iris = pd.read_csv('iris.csv')\n", "df_iris.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2 - Get Features into a NumPy Array" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1.4, 0.2],\n", " [1.4, 0.2],\n", " [1.3, 0.2],\n", " [1.5, 0.2],\n", " [1.4, 0.2]])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X = df_iris[['PetalLength[cm]', 'PetalWidth[cm]']].values\n", "X[:5, :]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3 - Get Class Labels into a NumPy Array" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IdSepalLength[cm]SepalWidth[cm]PetalLength[cm]PetalWidth[cm]SpeciesClassLabel
1451466.73.05.22.3Iris-virginica2
1461476.32.55.01.9Iris-virginica2
1471486.53.05.22.0Iris-virginica2
1481496.23.45.42.3Iris-virginica2
1491505.93.05.11.8Iris-virginica2
\n", "
" ], "text/plain": [ " Id SepalLength[cm] SepalWidth[cm] PetalLength[cm] PetalWidth[cm] \\\n", "145 146 6.7 3.0 5.2 2.3 \n", "146 147 6.3 2.5 5.0 1.9 \n", "147 148 6.5 3.0 5.2 2.0 \n", "148 149 6.2 3.4 5.4 2.3 \n", "149 150 5.9 3.0 5.1 1.8 \n", "\n", " Species ClassLabel \n", "145 Iris-virginica 2 \n", "146 Iris-virginica 2 \n", "147 Iris-virginica 2 \n", "148 Iris-virginica 2 \n", "149 Iris-virginica 2 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "label_dict = {'Iris-setosa': 0,\n", " 'Iris-versicolor': 1,\n", " 'Iris-virginica': 2}\n", "\n", "df_iris['ClassLabel'] = df_iris['Species'].map(label_dict)\n", "df_iris.tail()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 0, 0, 0])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = df_iris['ClassLabel'].values\n", "y[:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4 - Shuffle Dataset and Create Training and Test Subsets" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n", " 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\n", " 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,\n", " 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,\n", " 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,\n", " 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,\n", " 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,\n", " 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,\n", " 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,\n", " 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,\n", " 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,\n", " 143, 144, 145, 146, 147, 148, 149])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "indices = np.arange(y.shape[0])\n", "indices" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 72, 112, 132, 88, 37, 138, 87, 42, 8, 90, 141, 33, 59,\n", " 116, 135, 104, 36, 13, 63, 45, 28, 133, 24, 127, 46, 20,\n", " 31, 121, 117, 4, 130, 119, 29, 0, 62, 93, 131, 5, 16,\n", " 82, 60, 35, 143, 145, 142, 114, 136, 53, 19, 38, 110, 23,\n", " 9, 86, 91, 89, 79, 101, 65, 115, 41, 124, 95, 21, 11,\n", " 103, 74, 122, 118, 44, 51, 81, 149, 12, 129, 56, 50, 25,\n", " 128, 146, 43, 1, 71, 54, 100, 14, 6, 80, 26, 70, 139,\n", " 30, 108, 15, 18, 77, 22, 10, 58, 107, 75, 64, 69, 3,\n", " 40, 76, 134, 34, 27, 94, 85, 97, 102, 52, 92, 99, 105,\n", " 7, 48, 61, 120, 137, 125, 147, 39, 84, 2, 67, 55, 49,\n", " 68, 140, 78, 144, 111, 32, 73, 47, 148, 113, 96, 57, 123,\n", " 106, 83, 17, 98, 66, 126, 109])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rnd = np.random.RandomState(123)\n", "shuffled_indices = rnd.permutation(indices)\n", "shuffled_indices" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "X_shuffled, y_shuffled = X[shuffled_indices], y[shuffled_indices]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "X_train, y_train = X_shuffled[:100], y_shuffled[:100]\n", "X_test, y_test = X_shuffled[100:], y_shuffled[100:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5 - Doing Steps 1-4 in Scikit-Learn" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import load_iris\n", "from sklearn.model_selection import train_test_split\n", "\n", "\n", "iris = load_iris()\n", "X, y = iris.data[:, 2:], iris.target\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, \n", " test_size=0.3,\n", " random_state=123,\n", " shuffle=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6 - Plot Dataset" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XuYU9XVx/HvYgCHq4igIqhQtXhhYMBRoCiCWAUviLdWtFXQlmpf7/VeS5HWV7TUarWvPCCoIFW8FdFKsYiiUkUGGUAKiKLCAFWEgqAgMKz3j2TiXJKZM5Nkkkx+n+fJM8nJzjkrEbOyz9lrb3N3REREABqkOgAREUkfSgoiIhKhpCAiIhFKCiIiEqGkICIiEUoKIiISoaQgIiIRSgoiIhKhpCAiIhENUx1ATbVp08Y7duyY6jBERDLKwoULv3T3ttW1y7ik0LFjRwoLC1MdhohIRjGzz4K00+kjERGJUFIQEZEIJQUREYnIuGsK0ezevZvi4mJ27tyZ6lAkhXJzc+nQoQONGjVKdSgiGateJIXi4mJatGhBx44dMbNUhyMp4O5s2rSJ4uJiOnXqlOpwRDJWvTh9tHPnTvbff38lhCxmZuy///7qLYrEqV4kBUAJQfRvQCQBknb6yMwOASYDBwF7gfHu/mCFNv2AF4FPwptecPfRyYpJRDJPr6m9+HrP15W2N2vYjHcvebfWr48m6D7rs2T2FPYAv3L3o4FewP+Y2TFR2r3l7vnhW71KCKNGjWLs2LFJ2ffChQvJy8vjiCOO4NprryXWWtsPPPAAkydPBuDdd9+lZ8+e5Ofnc/TRRzNq1Kgqj1FUVMQrr7yS0Lh37dpF37592bNnT0L3K/VXrC/0oF/0QdvVtG19lbSk4O4b3P398P1twHKgfbKOl22uuuoqxo8fz6pVq1i1ahX/+Mc/KrXZs2cPkyZN4uKLLwbgsssuY/z48RQVFfHBBx/wox/9qMpjJCMpNG7cmAEDBjBt2rSE7ldEEqNOrimYWUegOzA/ytO9zWyxmc00s2NjvH6EmRWaWeHGjRvjjmf6onX0GTOHTrf9nT5j5jB90bq49zl58mS6du1Kt27d+OlPf1rp+QkTJnD88cfTrVs3zj//fL755hsAnn32Wbp06UK3bt3o27cvAMuWLeOEE04gPz+frl27smrVqnL72rBhA1999RW9e/fGzLj00kuZPn16pWPOmTOHHj160LBh6CzhF198Qbt27QDIycnhmGNCHbevv/6ayy+/nOOPP57u3bvz4osvsmvXLkaOHMm0adPIz89n2rRpbN68mSFDhtC1a1d69erFkiVLAJg7dy75+fnk5+fTvXt3tm3bxvbt2xkwYAA9evQgLy+PF198MRLXkCFDmDp1arwfuYgkQdKHpJpZc+B54Hp3/6rC0+8Dh7n7djM7A5gOHFlxH+4+HhgPUFBQEP08SUDTF63j9heWsmN3CQDrtuzg9heWAjCke+06MsuWLePuu+9m3rx5tGnThs2bN1dqc9555/Hzn/8cgDvvvJOJEydyzTXXMHr0aGbNmkX79u3ZsmULAOPGjeO6667jkksuYdeuXZSUlJTb17p16+jQoUPkcYcOHVi3rnJimzdvHscdd1zk8Q033EDnzp3p168fAwcO5LLLLiM3N5e7776bU045hUmTJrFlyxZOOOEETj31VEaPHk1hYSEPP/wwANdccw3du3dn+vTpzJkzh0svvZSioiLGjh3LX/7yF/r06cP27dvJzc0F4G9/+xstW7bkyy+/pFevXgwePBgzo0uXLixYsKBWn7WIJFdSewpm1ohQQpjq7i9UfN7dv3L37eH7rwCNzKxNMmP6w6yVkYRQasfuEv4wa2Wt9zlnzhwuuOAC2rQJhd66detKbT744ANOOukk8vLymDp1KsuWLQOgT58+DBs2jAkTJkS+/Hv37s3//u//cu+99/LZZ5/RpEmTcvuKdv0g2sibDRs20Lbtd5Mijhw5ksLCQk477TT++te/MnDgQABeffVVxowZQ35+Pv369WPnzp2sWbOm0v7efvvtSC/olFNOYdOmTWzdupU+ffpw44038uc//5ktW7bQsGFD3J077riDrl27cuqpp7Ju3To+//xzINRLady4Mdu2bav+wxWROpW0pGChb6mJwHJ3vz9Gm4PC7TCzE8LxbEpWTADrt+yo0fYg3L3a4ZDDhg3j4YcfZunSpfz2t7+NjKcfN24cv//971m7di35+fls2rSJiy++mBkzZtCkSRNOP/105syZU25fHTp0oLi4OPK4uLiYgw8+uNIxmzRpUmnc/uGHH85VV13Fa6+9xuLFi9m0aRPuzvPPP09RURFFRUWsWbOGo48+Our7rMjMuO2223j00UfZsWMHvXr1YsWKFUydOpWNGzeycOFCioqKOPDAA8vF8u2330Z6FCJVadawWY2217ZdTdvWV8k8fdQH+Cmw1MyKwtvuAA4FcPdxwAXAVWa2B9gBXOSxhtEkyMGtmrAuSgI4uFWTKK2DGTBgAOeeey433HAD+++/P5s3b67UW9i2bRvt2rVj9+7dTJ06lfbtQ6eqPv74Y3r27EnPnj156aWXWLt2LVu3buV73/se1157LatXr2bJkiWccsopkX21a9eOFi1aREYTTZ48mWuuuaZSXEcffTQfffRR5PHf//53zjjjDMyMVatWkZOTQ6tWrTj99NN56KGHeOihhzAzFi1aRPfu3WnRokW5X/N9+/Zl6tSp/OY3v+GNN96gTZs2tGzZko8//pi8vDzy8vJ45513WLFiBVu3buWAAw6gUaNGvP7663z22Xez9m7atIm2bdtqOgoJJN4hotk+xLSmkpYU3P1toMqfz+7+MPBwsmKI5ubTO5e7pgDQpFEON5/eudb7PPbYY/n1r3/NySefTE5ODt27d+fxxx8v1+Z3v/sdPXv25LDDDiMvLy/yZXvzzTezatUq3J0BAwbQrVs3xowZw5NPPkmjRo046KCDGDlyZKVjPvLIIwwbNowdO3YwaNAgBg0aVKnNoEGDyl30njJlCjfccANNmzalYcOGTJ06lZycHH7zm99w/fXX07VrV9ydjh078vLLL9O/f//IaaXbb7+dUaNGMXz4cLp27UrTpk154okngNCw19dffz1y8XrQoEFs27aNs88+m4KCAvLz8znqqKMicbz++uucccYZtf68JTXirRcIIu+JvJjPLb1saUKOIVWzJP8wT7iCggKvuMjO8uXLo57uiGX6onX8YdZK1m/ZwcGtmnDz6Z1rfZE53Z177rncd999HHlkpev3KXPeeedxzz330Llz7RNxLDX9tyDB1cUXtpJC8pjZQncvqK5dvZgQr6aGdG9fb5NARWPGjGHDhg1pkxR27drFkCFDkpIQRCR+WZkUsknnzp3T6gu4cePGXHrppakOQ0RiqDcT4omISPyUFEREJEJJQUQCibdeQDKDrimISCB1Md5fI4xSTz2FJErm1Nm//vWvOeSQQ2jevHmV7aZPn87o0aN544036N27d7nn9uzZw4EHHsiGDRviimX9+vVccMEFtXptv379qDjEuDoXXXRRpUkCRSQx1FPIUGeffTZXX311tUNN77vvPmbMmEHr1q0pLi7m008/pWPHjgDMnj2bLl26RGZOrc6ePXsiM66WdfDBB/Pcc8/V+D3URklJCVdddRX33XcfEyZMqJNjSs0kelGbuiiaS0epet/Z21PY9h94sBts+zwhu6vLqbMBevXqVe2X+Ycffsg+++xDmzZtaNCgARdeeGG5dQyefvpphg4dCoSm2xg4cCDHHXccJ510EitWrABCczbdeOON9O/fn1tvvTXqNNmffvopXbp0AUJf2jfddBN5eXl07dqVhx56CIDXXnuN7t27k5eXx+WXX863335bKd6nnnqKvLw8unTpwq233hrZ3rx5c0aOHEnPnj155513OOmkk5g9e7YW6klTiV7UJt5FdjJVqt539iaFuffBljUw9964d1U6dfacOXNYvHgxDz74YKU25513HgsWLGDx4sUcffTRTJw4ESAydfbixYuZMWMG8N3U2UVFRRQWFpabJrsm5s2bR48ePSKPhw4dytNPPw2EJqR75ZVXOP/88wEYMWIEDz30EAsXLmTs2LH88pe/jLzuww8/ZPbs2fzxj3+MTJNdVFTEW2+9VWkG1/Hjx/PJJ5+waNEilixZwiWXXMLOnTsZNmwY06ZNY+nSpezZs4dHHnmk3OvWr1/Prbfeypw5cygqKmLBggWRNSK+/vprunTpwvz58znxxBNp0KABRxxxBIsXL67V5yIisWVnUtj2HyiaCr439DfO3kJdT50dVMWps48//ni2b9/OypUrmTlzJr169WK//fZj+/bt/Otf/+LCCy8kPz+fX/ziF+WuM1x44YXk5ORE4q04TXZZs2fP5sorr4xsb926NStXrqRTp058//vfB0IrwL355pvlXrdgwQL69etH27ZtadiwIZdcckmkTU5OTiR5lTrggANYv359rT4XEYktO5PC3PtCCQFCf+PsLdT11NlBRZs6+6KLLuLpp58ud+po7969tGrVKjJ1dlFREcuXL4+8plmz74YcRpsmu7rPIsj8WlW1yc3NjSSlUjt37qx1shSR2LIvKZT2Ekp2hR6X7Iq7tzBgwACeeeYZNm0KLQURbeW1ilNnlyqdOnv06NG0adOGtWvXsnr16sjU2YMHD44se1lTFafOhtAppCeffJI5c+YwePBgAFq2bEmnTp149tlngdAXdKxTM6XTZN96660UFBRUSgqn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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(X_train[y_train == 0, 0],\n", " X_train[y_train == 0, 1],\n", " marker='o',\n", " label='class 0 (Setosa)')\n", "\n", "plt.scatter(X_train[y_train == 1, 0],\n", " X_train[y_train == 1, 1],\n", " marker='^',\n", " label='class 1 (Versicolor)')\n", "\n", "plt.scatter(X_train[y_train == 2, 0],\n", " X_train[y_train == 2, 1],\n", " marker='s',\n", " label='class 2 (Virginica)')\n", "\n", "plt.xlabel('petal length [cm]')\n", "plt.ylabel('petal width [cm]')\n", "plt.legend(loc='upper left')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7 - Fit k-Nearest Neighbor Model" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", " metric_params=None, n_jobs=1, n_neighbors=3, p=2,\n", " weights='uniform')" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.neighbors import KNeighborsClassifier\n", "\n", "\n", "knn_model = KNeighborsClassifier(n_neighbors=3)\n", "knn_model.fit(X_train, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8 - Use kNN Model to Make Predictions" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "y_pred = knn_model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test set accuracy: 95.56%\n" ] } ], "source": [ "num_correct_predictions = (y_pred == y_test).sum()\n", "accuracy = (num_correct_predictions / y_test.shape[0]) * 100\n", "print('Test set accuracy: %.2f%%' % accuracy)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 9 - Visualize Decision Boundary" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from mlxtend.plotting import plot_decision_regions\n", "\n", "\n", "plot_decision_regions(X_train, y_train, knn_model)\n", "plt.xlabel('petal length [cm]')\n", "plt.ylabel('petal width [cm]')\n", "plt.legend(loc='upper left')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_decision_regions(X_test, y_test, knn_model)\n", "plt.xlabel('petal length [cm]')\n", "plt.ylabel('petal width [cm]')\n", "plt.legend(loc='upper left')\n", "plt.show()" ] } ], "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 }