{"id":61,"date":"2022-05-19T18:45:08","date_gmt":"2022-05-19T22:45:08","guid":{"rendered":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/chapter\/using_sklearn\/"},"modified":"2023-01-05T13:40:21","modified_gmt":"2023-01-05T18:40:21","slug":"using_sklearn","status":"publish","type":"chapter","link":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/chapter\/using_sklearn\/","title":{"raw":"Using_Sklearn","rendered":"Using_Sklearn"},"content":{"raw":"<div id=\"notebook\" class=\"border-box-sizing\">\r\n<div id=\"notebook-container\" class=\"container\">\r\n<div class=\"cell border-box-sizing text_cell rendered\">\r\n<div class=\"prompt input_prompt\"><em>This page comes from a Jupyter Notebook, located at <a href=\"https:\/\/github.com\/amygoldlist\/BusinessAnalytics\/tree\/main\/AI_management\">https:\/\/github.com\/amygoldlist\/BusinessAnalytics\/tree\/main\/AI_management<\/a>\r\n<\/em><\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h2 id=\"Using-Sklearn\">Using Sklearn<a class=\"anchor-link\" href=\"#Using-Sklearn\">\u00b6<\/a><\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"cell border-box-sizing code_cell rendered\">\r\n<div class=\"input\">\r\n<div class=\"prompt input_prompt\">In\u00a0[1]:<\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"input_area\">\r\n<div class=\"highlight hl-ipython3\">\r\n<pre><span class=\"c1\">##We should start by loading any packages we will need, as well as any data.<\/span>\r\n\r\n<span class=\"c1\">## We can import a full package, but I'm just going to import some:<\/span>\r\n\r\n<span class=\"c1\">## sklearn things we need:<\/span>\r\n<span class=\"c1\">#from sklearn.neighbors import KNeighborsClassifier<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn<\/span> <span class=\"k\">import<\/span> <span class=\"n\">neighbors<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn.neighbors<\/span> <span class=\"k\">import<\/span> <span class=\"o\">*<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn.model_selection<\/span> <span class=\"k\">import<\/span> <span class=\"n\">train_test_split<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn<\/span> <span class=\"k\">import<\/span> <span class=\"n\">datasets<\/span>\r\n\r\n<span class=\"c1\"># numpy and friends<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">numpy<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">np<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">matplotlib.pyplot<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">plt<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">scipy<\/span> <span class=\"k\">import<\/span> <span class=\"n\">stats<\/span>\r\n<span class=\"o\">%<\/span><span class=\"k\">matplotlib<\/span> inline\r\n\r\n<span class=\"c1\">## We don't need all of this, but it's good to get anything I need in the very first block.<\/span>\r\n<\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"cell border-box-sizing code_cell rendered\">\r\n<div class=\"input\">\r\n<div class=\"prompt input_prompt\">In\u00a0[2]:<\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"input_area\">\r\n<div class=\"highlight hl-ipython3\">\r\n<pre><span class=\"c1\">## Let's start with the handwritten numbers that we've seen a lot of:<\/span>\r\n\r\n<span class=\"n\">digits<\/span> <span class=\"o\">=<\/span> <span class=\"n\">datasets<\/span><span class=\"o\">.<\/span><span class=\"n\">load_digits<\/span><span class=\"p\">()<\/span>\r\n\r\n<span class=\"n\">X<\/span> <span class=\"o\">=<\/span> <span class=\"n\">digits<\/span><span class=\"p\">[<\/span><span class=\"s1\">'data'<\/span><span class=\"p\">]<\/span>   <span class=\"c1\"># this is the data with each 8x8 image \"flattened\" into a length-64 vector.<\/span>\r\n<span class=\"n\">Y<\/span> <span class=\"o\">=<\/span> <span class=\"n\">digits<\/span><span class=\"p\">[<\/span><span class=\"s1\">'target'<\/span><span class=\"p\">]<\/span> <span class=\"c1\"># these are the labels (0-9). <\/span>\r\n\r\n<span class=\"c1\">## Let's look at one number:<\/span>\r\n<span class=\"c1\">## I've chosen randomly, but set n to any number under 1000<\/span>\r\n\r\n\r\n<span class=\"n\">n<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">653<\/span>\r\n\r\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">imshow<\/span><span class=\"p\">(<\/span><span class=\"n\">digits<\/span><span class=\"p\">[<\/span><span class=\"s1\">'images'<\/span><span class=\"p\">][<\/span><span class=\"n\">n<\/span><span class=\"p\">],<\/span> <span class=\"n\">cmap<\/span><span class=\"o\">=<\/span><span class=\"s1\">'Greys_r'<\/span><span class=\"p\">)<\/span>\r\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">title<\/span><span class=\"p\">(<\/span><span class=\"s1\">'This is a <\/span><span class=\"si\">%d<\/span><span class=\"s1\">'<\/span> <span class=\"o\">%<\/span> <span class=\"n\">digits<\/span><span class=\"p\">[<\/span><span class=\"s1\">'target'<\/span><span class=\"p\">][<\/span><span class=\"n\">n<\/span><span class=\"p\">])<\/span>\r\n\r\n<span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"The X values are a 64 digit string:\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">X<\/span><span class=\"p\">[<\/span><span class=\"n\">n<\/span><span class=\"p\">])<\/span>\r\n<span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"and the y is the value of the number\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">Y<\/span><span class=\"p\">[<\/span><span class=\"n\">n<\/span><span class=\"p\">])<\/span>\r\n<\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"output_wrapper\">\r\n<div class=\"output\">\r\n<div class=\"output_area\">\r\n<div class=\"prompt\"><\/div>\r\n<div class=\"output_subarea output_stream output_stdout output_text\">\r\n<pre>The X values are a 64 digit string: [ 0.  0.  4. 10. 16. 16.  7.  0.  0.  3. 16. 13. 11. 16.  2.  0.  0.  1.\r\n  3.  0. 10.  9.  0.  0.  0.  0.  5.  8. 14. 15. 13.  0.  0.  0. 15. 16.\r\n 14. 12.  8.  0.  0.  0.  3. 12.  7.  0.  0.  0.  0.  0.  0. 15.  4.  0.\r\n  0.  0.  0.  0.  3. 14.  1.  0.  0.  0.]\r\nand the y is the value of the number 7\r\n<\/pre>\r\n<\/div>\r\n<\/div>\r\n<div class=\"output_area\">\r\n<div class=\"prompt\"><\/div>\r\n<div class=\"output_png output_subarea\"><img src=\"image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPUAAAEICAYAAACHyrIWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAANXElEQVR4nO3de6xl5VnH8e+vw63A4AQBQxkurXYmoElLGTHNUaxDrVSQ9g9DQCi1aYJaaCCaVNoQgyYk+g8piVKdUCrILQVK0jTYSiiTArEIDNgWBoQiwnDpcAnXCgg8\/nH2xCme4ay9z95r7\/Py\/SQn7Mva63lW4Mdae+213jdVhaR2vGvaDUgaL0MtNcZQS40x1FJjDLXUGEMtNcZQLyNJzk1y2du8f0+Sjwy5zt9Icv+Sm9PM2GnaDej\/JHlpu6e7A68Cbwye\/9Fin6+qXx62ZlXdDKwd9nPDSHIy8A\/bvfQu4N3Auqq6c5K134ncU8+Qqtpz2x\/wCPB72712+bT7G1VVXf6Wbfsc8BCwacqtNclQLz+7JLk0yYuDw+11295I8nCSjw4eH5nkjiQvJPlJkvMXWlmSjyTZst3zP0\/y2GD99yc5egefOzbJXYP1P5rk3CG24dPApeXljBNhqJef44GrgFXAN4G\/3cFyFwAXVNVewC8CX19sxUnWAmcAv1pVK4HfAR7eweIvA6cO+jgW+JMkn+xQ42DgKODSxZbVaAz18nNLVV1fVW8A\/wR8YAfL\/Q\/wS0n2qaqXqur7Hdb9BrArcFiSnavq4ar68UILVtXGqvphVb1ZVT8ArgR+s0ONU4Gbq+o\/OyyrERjq5efJ7R7\/FNgtyUInPD8LrAHuS3J7kuMWW3FVPQicBZwLbE1yVZL3LLRskl9LclOSp5I8D\/wxsE+H\/k8FLumwnEZkqBtVVQ9U1UnAfsDfANck2aPD566oql8HDgZq8NmFXMH84f+BVfVzwN8Debt1J5kD3gNc03lDNDRD3agkpyTZt6reBJ4bvPzGIp9Zm2R9kl2BV4D\/fpvPrASerapXkhwJ\/EGHtj4NXFtVL3bbCo3CULfrGOCewW\/fFwAnVtUri3xmV+CvgaeZP8zfD\/jSDpb9HPBXSV4E\/oJFTsQl2Q04AQ+9Jy7+qiC1xT211BhDLTXGUEuNMdRSYyZyl1aSJs++rVq1qtd6++23X2+1Vq5c2VutPj3xxBO91nv88cd7q1VVC14X4K2XQ1i\/fn2v9U4\/\/fTeavW9bX0577zzeq13zjnn9FpvIR5+S40x1FJjDLXUGEMtNcZQS40x1FJjDLXUGEMtNcZQS43pFOokxwyGi30wydmTbkrS6BYNdZIVwN8BHwcOA05KctikG5M0mi576iOBB6vqoap6jfkxpz8x2bYkjapLqA8AHt3u+ZbBaz8jyWmDGSHuGFdzkobX5S6thW7v+n+3VlbVBmADtHvrpbQcdNlTbwEO3O75aqC\/m0YlDaVLqG8H3p\/kvUl2AU5kfhB3STNo0cPvqno9yRnAd4AVwMVVdc\/EO5M0kk4jn1TV9cD1E+5F0hh4RZnUGEMtNcZQS40x1FJjDLXUGEMtNcZQS42ZyPzUfV77PTc311cpbrnllt5qQb9TuPRZa926db3VWrNmTW+1AB544IHeau1o2h331FJjDLXUGEMtNcZQS40x1FJjDLXUGEMtNcZQS40x1FJjDLXUmC4zdFycZGuSH\/XRkKSl6bKn\/kfgmAn3IWlMFg11VX0PeLaHXiSNQafRRLtIchpw2rjWJ2k0Ywu10+5Is8Gz31JjDLXUmC4\/aV0J\/CuwNsmWJJ+dfFuSRtVlLq2T+mhE0nh4+C01xlBLjTHUUmMMtdQYQy01xlBLjTHUUmOW\/bQ7e++9d1+lOPTQQ3urBXDrrbf2VuvGG2\/srdYzzzzTW60TTjiht1p9c9od6R3CUEuNMdRSYwy11BhDLTXGUEuNMdRSYwy11BhDLTXGUEuN6TJG2YFJbkqyOck9Sc7sozFJo+ky7vfrwJ9V1aYkK4E7k9xQVfdOuDdJI+gy7c4TVbVp8PhFYDNwwKQbkzSaoWboSHIIcDhw2wLvOe2ONAM6hzrJnsC1wFlV9cJb33faHWk2dDr7nWRn5gN9eVV9Y7ItSVqKLme\/A3wV2FxV50++JUlL0WVPPQd8Clif5O7B3+9OuC9JI+oy7c4twILDpkiaPV5RJjXGUEuNMdRSYwy11BhDLTXGUEuNMdRSYwy11Jih7tKaRc8++2xvtdasWdNbLYCTTz65t1pHHHFEb7V23XXX3mo99thjvdUCOOCA6d+V7J5aaoyhlhpjqKXGGGqpMYZaaoyhlhpjqKXGGGqpMYZaakyXgQd3S\/JvSf59MO3OX\/bRmKTRdLlM9FVgfVW9NBgq+JYk\/1xV359wb5JG0GXgwQJeGjzdefDnYP3SjOo6mP+KJHcDW4EbqmrBaXeS3JHkjnE3Kam7TqGuqjeq6oPAauDIJL+ywDIbqmpdVa0bd5OSuhvq7HdVPQdsBI6ZSDeSlqzL2e99k6waPH438FHgvkk3Jmk0Xc5+7w9ckmQF8\/8T+HpVfWuybUkaVZez3z9gfk5qScuAV5RJjTHUUmMMtdQYQy01xlBLjTHUUmMMtdQYQy01ZtlPu9OnCy+8sNd6u+22W2+1nn\/++d5qPfLII73VuvHGG3urNSvcU0uNMdRSYwy11BhDLTXGUEuNMdRSYwy11BhDLTXGUEuNMdRSYzqHejCg\/11JHHRQmmHD7KnPBDZPqhFJ49F12p3VwLHARZNtR9JSdd1Tfxn4AvDmjhZwLi1pNnSZoeM4YGtV3fl2yzmXljQbuuyp54DjkzwMXAWsT3LZRLuSNLJFQ11VX6yq1VV1CHAi8N2qOmXinUkaib9TS40ZajijqtrI\/FS2kmaUe2qpMYZaaoyhlhpjqKXGGGqpMYZaaoyhlhqTqhr\/SpPxr3QGzM3N9Vrv4osv7q3W1Vdf3Vutc845p7daLauqLPS6e2qpMYZaaoyhlhpjqKXGGGqpMYZaaoyhlhpjqKXGGGqpMYZaakyn4YwGI4m+CLwBvO4wwNLsGmaMst+qqqcn1omksfDwW2pM11AX8C9J7kxy2kILOO2ONBu6Hn7PVdXjSfYDbkhyX1V9b\/sFqmoDsAHavfVSWg467amr6vHBP7cC1wFHTrIpSaPrMkHeHklWbnsMfAz40aQbkzSaLoffvwBcl2Tb8ldU1bcn2pWkkS0a6qp6CPhAD71IGgN\/0pIaY6ilxhhqqTGGWmqMoZYaY6ilxhhqqTHD3Hr5jnfrrbf2Wu+ggw7qrdamTZt6q6XJck8tNcZQS40x1FJjDLXUGEMtNcZQS40x1FJjDLXUGEMtNcZQS43pFOokq5Jck+S+JJuTfHjSjUkaTddrvy8Avl1Vv59kF2D3CfYkaQkWDXWSvYCjgD8EqKrXgNcm25akUXU5\/H4f8BTwtSR3JbloMP73z3DaHWk2dAn1TsCHgK9U1eHAy8DZb12oqjZU1TqnuZWmq0uotwBbquq2wfNrmA+5pBm0aKir6kng0SRrBy8dDdw70a4kjazr2e\/PA5cPznw\/BHxmci1JWopOoa6quwG\/K0vLgFeUSY0x1FJjDLXUGEMtNcZQS40x1FJjDLXUGEMtNca5tIYwNzfXa71XX321t1obN27srZYmyz211BhDLTXGUEuNMdRSYwy11BhDLTXGUEuNMdRSYwy11JhFQ51kbZK7t\/t7IclZfTQnaXiLXiZaVfcDHwRIsgJ4DLhuwn1JGtGwh99HAz+uqv+aRDOSlm7YGzpOBK5c6I0kpwGnLbkjSUvSeU89GPP7eODqhd532h1pNgxz+P1xYFNV\/WRSzUhaumFCfRI7OPSWNDs6hTrJ7sBvA9+YbDuSlqrrtDs\/BX5+wr1IGgOvKJMaY6ilxhhqqTGGWmqMoZYaY6ilxhhqqTGGWmpMqmr8K02eAoa9PXMf4OmxNzMbWt02t2t6Dq6qfRd6YyKhHkWSO1q9w6vVbXO7ZpOH31JjDLXUmFkK9YZpNzBBrW6b2zWDZuY7taTxmKU9taQxMNRSY2Yi1EmOSXJ\/kgeTnD3tfsYhyYFJbkqyOck9Sc6cdk\/jlGRFkruSfGvavYxTklVJrkly3+Df3Yen3dOwpv6dejBBwH8wP1zSFuB24KSquneqjS1Rkv2B\/atqU5KVwJ3AJ5f7dm2T5E+BdcBeVXXctPsZlySXADdX1UWDEXR3r6rnpt3XMGZhT30k8GBVPVRVrwFXAZ+Yck9LVlVPVNWmweMXgc3AAdPtajySrAaOBS6adi\/jlGQv4CjgqwBV9dpyCzTMRqgPAB7d7vkWGvmPf5skhwCHA7dNt5Ox+TLwBeDNaTcyZu8DngK+NvhqcVGSPabd1LBmIdRZ4LVmfmdLsidwLXBWVb0w7X6WKslxwNaqunPavUzATsCHgK9U1eHAy8CyO8czC6HeAhy43fPVwONT6mWskuzMfKAvr6pWhleeA45P8jDzX5XWJ7lsui2NzRZgS1VtO6K6hvmQLyuzEOrbgfcnee\/gxMSJwDen3NOSJQnz3802V9X50+5nXKrqi1W1uqoOYf7f1Xer6pQptzUWVfUk8GiStYOXjgaW3YnNYSfIG7uqej3JGcB3gBXAxVV1z5TbGoc54FPAD5PcPXjtS1V1\/RR70uI+D1w+2ME8BHxmyv0Mbeo\/aUkar1k4\/JY0RoZaaoyhlhpjqKXGGGqpMYZaaoyhlhrzv8FTa2XdwyLaAAAAAElFTkSuQmCC#fixme\" alt=\"image\" \/><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"cell border-box-sizing code_cell rendered\">\r\n<div class=\"input\">\r\n<div class=\"prompt input_prompt\">In\u00a0[5]:<\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"input_area\">\r\n<div class=\"highlight hl-ipython3\">\r\n<pre><span class=\"c1\">## The first step is to break the data into the training set, and the test set.  <\/span>\r\n<span class=\"c1\">## Luckily, sklearn has you covered:<\/span>\r\n\r\n<span class=\"n\">X_train<\/span><span class=\"p\">,<\/span> <span class=\"n\">X_test<\/span><span class=\"p\">,<\/span> <span class=\"n\">Y_train<\/span><span class=\"p\">,<\/span> <span class=\"n\">Y_test<\/span> <span class=\"o\">=<\/span> <span class=\"n\">train_test_split<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span><span class=\"n\">Y<\/span><span class=\"p\">,<\/span> <span class=\"n\">test_size<\/span><span class=\"o\">=<\/span><span class=\"mf\">0.2<\/span><span class=\"p\">)<\/span>\r\n\r\n<span class=\"c1\">## test_size tells the algrithm that we want to reserve 20% for the test (or validation) set.  Try it!  <\/span>\r\n<span class=\"c1\">## Now redo it with a test set at 30%<\/span>\r\n<\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"cell border-box-sizing text_cell rendered\">\r\n<div class=\"prompt input_prompt\"><\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h2 id=\"Assignment-Questions\">Assignment Questions<a class=\"anchor-link\" href=\"#Assignment-Questions\">\u00b6<\/a><\/h2>\r\n<ol>\r\n \t<li>How big is the full data set? How many numbers in training set? How many are held back in the test set? You should have 30% in your test set.<\/li>\r\n \t<li>What is the L1 distance between <code>X[15]<\/code> and <code>X[25]<\/code>? (Manhattan)<\/li>\r\n \t<li>What is the L2 distance between <code>X[15]<\/code> and <code>X[25]<\/code>? (Euclidean)<\/li>\r\n \t<li>What is the L3 distance between <code>X[15]<\/code> and <code>X[25]<\/code>?<\/li>\r\n<\/ol>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"cell border-box-sizing code_cell rendered\">\r\n<div class=\"input\">\r\n<div class=\"prompt input_prompt\">In\u00a0[1]:<\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"input_area\">\r\n<div class=\"highlight hl-ipython3\">\r\n<pre><span class=\"c1\">## Solutions<\/span>\r\n<\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"cell border-box-sizing code_cell rendered\">\r\n<div class=\"input\">\r\n<div class=\"prompt input_prompt\">In\u00a0[1]:<\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"input_area\">\r\n<div class=\"highlight hl-ipython3\">\r\n<pre><span class=\"c1\">## Lets do it!<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn.neighbors<\/span> <span class=\"k\">import<\/span> <span class=\"o\">*<\/span>\r\n\r\n<span class=\"c1\">## Run this to learn about the function:<\/span>\r\n<span class=\"o\">?<\/span>KNeighborsClassifier\r\n\r\n<span class=\"c1\">## FYI: Minkowski distance means the Lp norm, so we can set p = 2 for Euclidean distance<\/span>\r\n<\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"cell border-box-sizing code_cell rendered\">\r\n<div class=\"input\">\r\n<div class=\"prompt input_prompt\">In\u00a0[7]:<\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"input_area\">\r\n<div class=\"highlight hl-ipython3\">\r\n<pre><span class=\"c1\">## For now, I'm going to set K = 3, and use the Euclidean or L2 norm.  <\/span>\r\n\r\n<span class=\"c1\">#Pick a name for your model -&gt; I'm going to use a random word: cupcake<\/span>\r\n\r\n<span class=\"c1\">#step 1: let python know what algorithm I'm using:<\/span>\r\n<span class=\"n\">cupcake<\/span> <span class=\"o\">=<\/span><span class=\"n\">neighbors<\/span><span class=\"o\">.<\/span><span class=\"n\">KNeighborsClassifier<\/span><span class=\"p\">(<\/span><span class=\"n\">n_neighbors<\/span><span class=\"o\">=<\/span><span class=\"mi\">15<\/span><span class=\"p\">,<\/span> <span class=\"n\">p<\/span> <span class=\"o\">=<\/span><span class=\"mi\">2<\/span> <span class=\"p\">)<\/span>\r\n<span class=\"c1\">#step 2: Train the model on ONLY THE TRAINING DATA (fit!)<\/span>\r\n<span class=\"n\">cupcake<\/span><span class=\"o\">.<\/span><span class=\"n\">fit<\/span><span class=\"p\">(<\/span><span class=\"n\">X_train<\/span><span class=\"p\">,<\/span><span class=\"n\">Y_train<\/span><span class=\"p\">)<\/span>\r\n\r\n\r\n<span class=\"c1\">##Now we have a well trained model!  But is it a good model?<\/span>\r\n<span class=\"c1\">## I'm going to look at the errors in BOTH my training and test sets.  <\/span>\r\n<span class=\"c1\">## We do this by predicting what Y will be for each set, than actually comparing<\/span>\r\n\r\n<span class=\"n\">Y_pred_train<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cupcake<\/span><span class=\"o\">.<\/span><span class=\"n\">predict<\/span><span class=\"p\">(<\/span><span class=\"n\">X_train<\/span><span class=\"p\">)<\/span> \r\n<span class=\"n\">Y_pred<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cupcake<\/span><span class=\"o\">.<\/span><span class=\"n\">predict<\/span><span class=\"p\">(<\/span><span class=\"n\">X_test<\/span><span class=\"p\">)<\/span>\r\n\r\n<span class=\"c1\">##record errors<\/span>\r\n<span class=\"n\">error_train<\/span><span class=\"o\">=<\/span><span class=\"nb\">list<\/span><span class=\"p\">(<\/span><span class=\"n\">Y_train<\/span> <span class=\"o\">==<\/span> <span class=\"n\">Y_pred_train<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">count<\/span><span class=\"p\">(<\/span><span class=\"kc\">False<\/span><span class=\"p\">)<\/span><span class=\"o\">\/<\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">Y_train<\/span><span class=\"p\">)<\/span>\r\n<span class=\"n\">error_test<\/span><span class=\"o\">=<\/span><span class=\"nb\">list<\/span><span class=\"p\">(<\/span><span class=\"n\">Y_test<\/span> <span class=\"o\">==<\/span> <span class=\"n\">Y_pred<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">count<\/span><span class=\"p\">(<\/span><span class=\"kc\">False<\/span><span class=\"p\">)<\/span><span class=\"o\">\/<\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">Y_test<\/span><span class=\"p\">)<\/span>\r\n\r\n<span class=\"c1\">##Look it over:<\/span>\r\n<span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"The training error was: \"<\/span><span class=\"p\">,<\/span> <span class=\"n\">error_train<\/span><span class=\"p\">)<\/span>\r\n<span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"The testing error was: \"<\/span><span class=\"p\">,<\/span> <span class=\"n\">error_test<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"output_wrapper\">\r\n<div class=\"output\">\r\n<div class=\"output_area\">\r\n<div class=\"prompt\"><\/div>\r\n<div class=\"output_subarea output_stream output_stdout output_text\">\r\n<pre>The training error was:  0.016701461377870562\r\nThe testing error was:  0.025\r\n<\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"cell border-box-sizing text_cell rendered\">\r\n<div class=\"prompt input_prompt\"><\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"text_cell_render border-box-sizing rendered_html\">\r\n<h2 id=\"Your-turn:\">Your turn:<a class=\"anchor-link\">\u00b6<\/a><\/h2>\r\nFor this week, we are going to turn a blind eye to the fact that we are experimenting on the test data. Try out different models! Look at different [latex]K[\/latex] values, and different [latex]p[\/latex] values to see if you can find something that works better than others. Can you automate this process using some loops or other tools?\r\n\r\nExplain your best model, and hand it in. Expect that random change may affect different models.\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"cell border-box-sizing code_cell rendered\">\r\n<div class=\"input\">\r\n<div class=\"prompt input_prompt\">In\u00a0[\u00a0]:<\/div>\r\n<div class=\"inner_cell\">\r\n<div class=\"input_area\">\r\n<div class=\"highlight hl-ipython3\">\r\n<pre> \r\n<\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>","rendered":"<div id=\"notebook\" class=\"border-box-sizing\">\n<div id=\"notebook-container\" class=\"container\">\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><em>This page comes from a Jupyter Notebook, located at <a href=\"https:\/\/github.com\/amygoldlist\/BusinessAnalytics\/tree\/main\/AI_management\">https:\/\/github.com\/amygoldlist\/BusinessAnalytics\/tree\/main\/AI_management<\/a><br \/>\n<\/em><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2 id=\"Using-Sklearn\">Using Sklearn<a class=\"anchor-link\" href=\"#Using-Sklearn\">\u00b6<\/a><\/h2>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[1]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight hl-ipython3\">\n<pre><span class=\"c1\">##We should start by loading any packages we will need, as well as any data.<\/span>\r\n\r\n<span class=\"c1\">## We can import a full package, but I'm just going to import some:<\/span>\r\n\r\n<span class=\"c1\">## sklearn things we need:<\/span>\r\n<span class=\"c1\">#from sklearn.neighbors import KNeighborsClassifier<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn<\/span> <span class=\"k\">import<\/span> <span class=\"n\">neighbors<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn.neighbors<\/span> <span class=\"k\">import<\/span> <span class=\"o\">*<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn.model_selection<\/span> <span class=\"k\">import<\/span> <span class=\"n\">train_test_split<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn<\/span> <span class=\"k\">import<\/span> <span class=\"n\">datasets<\/span>\r\n\r\n<span class=\"c1\"># numpy and friends<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">numpy<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">np<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">matplotlib.pyplot<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">plt<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">scipy<\/span> <span class=\"k\">import<\/span> <span class=\"n\">stats<\/span>\r\n<span class=\"o\">%<\/span><span class=\"k\">matplotlib<\/span> inline\r\n\r\n<span class=\"c1\">## We don't need all of this, but it's good to get anything I need in the very first block.<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[2]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight hl-ipython3\">\n<pre><span class=\"c1\">## Let's start with the handwritten numbers that we've seen a lot of:<\/span>\r\n\r\n<span class=\"n\">digits<\/span> <span class=\"o\">=<\/span> <span class=\"n\">datasets<\/span><span class=\"o\">.<\/span><span class=\"n\">load_digits<\/span><span class=\"p\">()<\/span>\r\n\r\n<span class=\"n\">X<\/span> <span class=\"o\">=<\/span> <span class=\"n\">digits<\/span><span class=\"p\">[<\/span><span class=\"s1\">'data'<\/span><span class=\"p\">]<\/span>   <span class=\"c1\"># this is the data with each 8x8 image \"flattened\" into a length-64 vector.<\/span>\r\n<span class=\"n\">Y<\/span> <span class=\"o\">=<\/span> <span class=\"n\">digits<\/span><span class=\"p\">[<\/span><span class=\"s1\">'target'<\/span><span class=\"p\">]<\/span> <span class=\"c1\"># these are the labels (0-9). <\/span>\r\n\r\n<span class=\"c1\">## Let's look at one number:<\/span>\r\n<span class=\"c1\">## I've chosen randomly, but set n to any number under 1000<\/span>\r\n\r\n\r\n<span class=\"n\">n<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">653<\/span>\r\n\r\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">imshow<\/span><span class=\"p\">(<\/span><span class=\"n\">digits<\/span><span class=\"p\">[<\/span><span class=\"s1\">'images'<\/span><span class=\"p\">][<\/span><span class=\"n\">n<\/span><span class=\"p\">],<\/span> <span class=\"n\">cmap<\/span><span class=\"o\">=<\/span><span class=\"s1\">'Greys_r'<\/span><span class=\"p\">)<\/span>\r\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">title<\/span><span class=\"p\">(<\/span><span class=\"s1\">'This is a <\/span><span class=\"si\">%d<\/span><span class=\"s1\">'<\/span> <span class=\"o\">%<\/span> <span class=\"n\">digits<\/span><span class=\"p\">[<\/span><span class=\"s1\">'target'<\/span><span class=\"p\">][<\/span><span class=\"n\">n<\/span><span class=\"p\">])<\/span>\r\n\r\n<span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"The X values are a 64 digit string:\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">X<\/span><span class=\"p\">[<\/span><span class=\"n\">n<\/span><span class=\"p\">])<\/span>\r\n<span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"and the y is the value of the number\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">Y<\/span><span class=\"p\">[<\/span><span class=\"n\">n<\/span><span class=\"p\">])<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"output_wrapper\">\n<div class=\"output\">\n<div class=\"output_area\">\n<div class=\"prompt\"><\/div>\n<div class=\"output_subarea output_stream output_stdout output_text\">\n<pre>The X values are a 64 digit string: [ 0.  0.  4. 10. 16. 16.  7.  0.  0.  3. 16. 13. 11. 16.  2.  0.  0.  1.\r\n  3.  0. 10.  9.  0.  0.  0.  0.  5.  8. 14. 15. 13.  0.  0.  0. 15. 16.\r\n 14. 12.  8.  0.  0.  0.  3. 12.  7.  0.  0.  0.  0.  0.  0. 15.  4.  0.\r\n  0.  0.  0.  0.  3. 14.  1.  0.  0.  0.]\r\nand the y is the value of the number 7\r\n<\/pre>\n<\/div>\n<\/div>\n<div class=\"output_area\">\n<div class=\"prompt\"><\/div>\n<div class=\"output_png output_subarea\"><img decoding=\"async\" src=\"image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPUAAAEICAYAAACHyrIWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAANXElEQVR4nO3de6xl5VnH8e+vw63A4AQBQxkurXYmoElLGTHNUaxDrVSQ9g9DQCi1aYJaaCCaVNoQgyYk+g8piVKdUCrILQVK0jTYSiiTArEIDNgWBoQiwnDpcAnXCgg8\/nH2xCme4ay9z95r7\/Py\/SQn7Mva63lW4Mdae+213jdVhaR2vGvaDUgaL0MtNcZQS40x1FJjDLXUGEMtNcZQLyNJzk1y2du8f0+Sjwy5zt9Icv+Sm9PM2GnaDej\/JHlpu6e7A68Cbwye\/9Fin6+qXx62ZlXdDKwd9nPDSHIy8A\/bvfQu4N3Auqq6c5K134ncU8+Qqtpz2x\/wCPB72712+bT7G1VVXf6Wbfsc8BCwacqtNclQLz+7JLk0yYuDw+11295I8nCSjw4eH5nkjiQvJPlJkvMXWlmSjyTZst3zP0\/y2GD99yc5egefOzbJXYP1P5rk3CG24dPApeXljBNhqJef44GrgFXAN4G\/3cFyFwAXVNVewC8CX19sxUnWAmcAv1pVK4HfAR7eweIvA6cO+jgW+JMkn+xQ42DgKODSxZbVaAz18nNLVV1fVW8A\/wR8YAfL\/Q\/wS0n2qaqXqur7Hdb9BrArcFiSnavq4ar68UILVtXGqvphVb1ZVT8ArgR+s0ONU4Gbq+o\/OyyrERjq5efJ7R7\/FNgtyUInPD8LrAHuS3J7kuMWW3FVPQicBZwLbE1yVZL3LLRskl9LclOSp5I8D\/wxsE+H\/k8FLumwnEZkqBtVVQ9U1UnAfsDfANck2aPD566oql8HDgZq8NmFXMH84f+BVfVzwN8Debt1J5kD3gNc03lDNDRD3agkpyTZt6reBJ4bvPzGIp9Zm2R9kl2BV4D\/fpvPrASerapXkhwJ\/EGHtj4NXFtVL3bbCo3CULfrGOCewW\/fFwAnVtUri3xmV+CvgaeZP8zfD\/jSDpb9HPBXSV4E\/oJFTsQl2Q04AQ+9Jy7+qiC1xT211BhDLTXGUEuNMdRSYyZyl1aSJs++rVq1qtd6++23X2+1Vq5c2VutPj3xxBO91nv88cd7q1VVC14X4K2XQ1i\/fn2v9U4\/\/fTeavW9bX0577zzeq13zjnn9FpvIR5+S40x1FJjDLXUGEMtNcZQS40x1FJjDLXUGEMtNcZQS43pFOokxwyGi30wydmTbkrS6BYNdZIVwN8BHwcOA05KctikG5M0mi576iOBB6vqoap6jfkxpz8x2bYkjapLqA8AHt3u+ZbBaz8jyWmDGSHuGFdzkobX5S6thW7v+n+3VlbVBmADtHvrpbQcdNlTbwEO3O75aqC\/m0YlDaVLqG8H3p\/kvUl2AU5kfhB3STNo0cPvqno9yRnAd4AVwMVVdc\/EO5M0kk4jn1TV9cD1E+5F0hh4RZnUGEMtNcZQS40x1FJjDLXUGEMtNcZQS42ZyPzUfV77PTc311cpbrnllt5qQb9TuPRZa926db3VWrNmTW+1AB544IHeau1o2h331FJjDLXUGEMtNcZQS40x1FJjDLXUGEMtNcZQS40x1FJjDLXUmC4zdFycZGuSH\/XRkKSl6bKn\/kfgmAn3IWlMFg11VX0PeLaHXiSNQafRRLtIchpw2rjWJ2k0Ywu10+5Is8Gz31JjDLXUmC4\/aV0J\/CuwNsmWJJ+dfFuSRtVlLq2T+mhE0nh4+C01xlBLjTHUUmMMtdQYQy01xlBLjTHUUmOW\/bQ7e++9d1+lOPTQQ3urBXDrrbf2VuvGG2\/srdYzzzzTW60TTjiht1p9c9od6R3CUEuNMdRSYwy11BhDLTXGUEuNMdRSYwy11BhDLTXGUEuN6TJG2YFJbkqyOck9Sc7sozFJo+ky7vfrwJ9V1aYkK4E7k9xQVfdOuDdJI+gy7c4TVbVp8PhFYDNwwKQbkzSaoWboSHIIcDhw2wLvOe2ONAM6hzrJnsC1wFlV9cJb33faHWk2dDr7nWRn5gN9eVV9Y7ItSVqKLme\/A3wV2FxV50++JUlL0WVPPQd8Clif5O7B3+9OuC9JI+oy7c4twILDpkiaPV5RJjXGUEuNMdRSYwy11BhDLTXGUEuNMdRSYwy11Jih7tKaRc8++2xvtdasWdNbLYCTTz65t1pHHHFEb7V23XXX3mo99thjvdUCOOCA6d+V7J5aaoyhlhpjqKXGGGqpMYZaaoyhlhpjqKXGGGqpMYZaakyXgQd3S\/JvSf59MO3OX\/bRmKTRdLlM9FVgfVW9NBgq+JYk\/1xV359wb5JG0GXgwQJeGjzdefDnYP3SjOo6mP+KJHcDW4EbqmrBaXeS3JHkjnE3Kam7TqGuqjeq6oPAauDIJL+ywDIbqmpdVa0bd5OSuhvq7HdVPQdsBI6ZSDeSlqzL2e99k6waPH438FHgvkk3Jmk0Xc5+7w9ckmQF8\/8T+HpVfWuybUkaVZez3z9gfk5qScuAV5RJjTHUUmMMtdQYQy01xlBLjTHUUmMMtdQYQy01ZtlPu9OnCy+8sNd6u+22W2+1nn\/++d5qPfLII73VuvHGG3urNSvcU0uNMdRSYwy11BhDLTXGUEuNMdRSYwy11BhDLTXGUEuNMdRSYzqHejCg\/11JHHRQmmHD7KnPBDZPqhFJ49F12p3VwLHARZNtR9JSdd1Tfxn4AvDmjhZwLi1pNnSZoeM4YGtV3fl2yzmXljQbuuyp54DjkzwMXAWsT3LZRLuSNLJFQ11VX6yq1VV1CHAi8N2qOmXinUkaib9TS40ZajijqtrI\/FS2kmaUe2qpMYZaaoyhlhpjqKXGGGqpMYZaaoyhlhqTqhr\/SpPxr3QGzM3N9Vrv4osv7q3W1Vdf3Vutc845p7daLauqLPS6e2qpMYZaaoyhlhpjqKXGGGqpMYZaaoyhlhpjqKXGGGqpMYZaakyn4YwGI4m+CLwBvO4wwNLsGmaMst+qqqcn1omksfDwW2pM11AX8C9J7kxy2kILOO2ONBu6Hn7PVdXjSfYDbkhyX1V9b\/sFqmoDsAHavfVSWg467amr6vHBP7cC1wFHTrIpSaPrMkHeHklWbnsMfAz40aQbkzSaLoffvwBcl2Tb8ldU1bcn2pWkkS0a6qp6CPhAD71IGgN\/0pIaY6ilxhhqqTGGWmqMoZYaY6ilxhhqqTHD3Hr5jnfrrbf2Wu+ggw7qrdamTZt6q6XJck8tNcZQS40x1FJjDLXUGEMtNcZQS40x1FJjDLXUGEMtNcZQS43pFOokq5Jck+S+JJuTfHjSjUkaTddrvy8Avl1Vv59kF2D3CfYkaQkWDXWSvYCjgD8EqKrXgNcm25akUXU5\/H4f8BTwtSR3JbloMP73z3DaHWk2dAn1TsCHgK9U1eHAy8DZb12oqjZU1TqnuZWmq0uotwBbquq2wfNrmA+5pBm0aKir6kng0SRrBy8dDdw70a4kjazr2e\/PA5cPznw\/BHxmci1JWopOoa6quwG\/K0vLgFeUSY0x1FJjDLXUGEMtNcZQS40x1FJjDLXUGEMtNca5tIYwNzfXa71XX321t1obN27srZYmyz211BhDLTXGUEuNMdRSYwy11BhDLTXGUEuNMdRSYwy11JhFQ51kbZK7t\/t7IclZfTQnaXiLXiZaVfcDHwRIsgJ4DLhuwn1JGtGwh99HAz+uqv+aRDOSlm7YGzpOBK5c6I0kpwGnLbkjSUvSeU89GPP7eODqhd532h1pNgxz+P1xYFNV\/WRSzUhaumFCfRI7OPSWNDs6hTrJ7sBvA9+YbDuSlqrrtDs\/BX5+wr1IGgOvKJMaY6ilxhhqqTGGWmqMoZYaY6ilxhhqqTGGWmpMqmr8K02eAoa9PXMf4OmxNzMbWt02t2t6Dq6qfRd6YyKhHkWSO1q9w6vVbXO7ZpOH31JjDLXUmFkK9YZpNzBBrW6b2zWDZuY7taTxmKU9taQxMNRSY2Yi1EmOSXJ\/kgeTnD3tfsYhyYFJbkqyOck9Sc6cdk\/jlGRFkruSfGvavYxTklVJrkly3+Df3Yen3dOwpv6dejBBwH8wP1zSFuB24KSquneqjS1Rkv2B\/atqU5KVwJ3AJ5f7dm2T5E+BdcBeVXXctPsZlySXADdX1UWDEXR3r6rnpt3XMGZhT30k8GBVPVRVrwFXAZ+Yck9LVlVPVNWmweMXgc3AAdPtajySrAaOBS6adi\/jlGQv4CjgqwBV9dpyCzTMRqgPAB7d7vkWGvmPf5skhwCHA7dNt5Ox+TLwBeDNaTcyZu8DngK+NvhqcVGSPabd1LBmIdRZ4LVmfmdLsidwLXBWVb0w7X6WKslxwNaqunPavUzATsCHgK9U1eHAy8CyO8czC6HeAhy43fPVwONT6mWskuzMfKAvr6pWhleeA45P8jDzX5XWJ7lsui2NzRZgS1VtO6K6hvmQLyuzEOrbgfcnee\/gxMSJwDen3NOSJQnz3802V9X50+5nXKrqi1W1uqoOYf7f1Xer6pQptzUWVfUk8GiStYOXjgaW3YnNYSfIG7uqej3JGcB3gBXAxVV1z5TbGoc54FPAD5PcPXjtS1V1\/RR70uI+D1w+2ME8BHxmyv0Mbeo\/aUkar1k4\/JY0RoZaaoyhlhpjqKXGGGqpMYZaaoyhlhrzv8FTa2XdwyLaAAAAAElFTkSuQmCC#fixme\" alt=\"image\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[5]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight hl-ipython3\">\n<pre><span class=\"c1\">## The first step is to break the data into the training set, and the test set.  <\/span>\r\n<span class=\"c1\">## Luckily, sklearn has you covered:<\/span>\r\n\r\n<span class=\"n\">X_train<\/span><span class=\"p\">,<\/span> <span class=\"n\">X_test<\/span><span class=\"p\">,<\/span> <span class=\"n\">Y_train<\/span><span class=\"p\">,<\/span> <span class=\"n\">Y_test<\/span> <span class=\"o\">=<\/span> <span class=\"n\">train_test_split<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span><span class=\"n\">Y<\/span><span class=\"p\">,<\/span> <span class=\"n\">test_size<\/span><span class=\"o\">=<\/span><span class=\"mf\">0.2<\/span><span class=\"p\">)<\/span>\r\n\r\n<span class=\"c1\">## test_size tells the algrithm that we want to reserve 20% for the test (or validation) set.  Try it!  <\/span>\r\n<span class=\"c1\">## Now redo it with a test set at 30%<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2 id=\"Assignment-Questions\">Assignment Questions<a class=\"anchor-link\" href=\"#Assignment-Questions\">\u00b6<\/a><\/h2>\n<ol>\n<li>How big is the full data set? How many numbers in training set? How many are held back in the test set? You should have 30% in your test set.<\/li>\n<li>What is the L1 distance between <code>X[15]<\/code> and <code>X[25]<\/code>? (Manhattan)<\/li>\n<li>What is the L2 distance between <code>X[15]<\/code> and <code>X[25]<\/code>? (Euclidean)<\/li>\n<li>What is the L3 distance between <code>X[15]<\/code> and <code>X[25]<\/code>?<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[1]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight hl-ipython3\">\n<pre><span class=\"c1\">## Solutions<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[1]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight hl-ipython3\">\n<pre><span class=\"c1\">## Lets do it!<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">sklearn.neighbors<\/span> <span class=\"k\">import<\/span> <span class=\"o\">*<\/span>\r\n\r\n<span class=\"c1\">## Run this to learn about the function:<\/span>\r\n<span class=\"o\">?<\/span>KNeighborsClassifier\r\n\r\n<span class=\"c1\">## FYI: Minkowski distance means the Lp norm, so we can set p = 2 for Euclidean distance<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[7]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight hl-ipython3\">\n<pre><span class=\"c1\">## For now, I'm going to set K = 3, and use the Euclidean or L2 norm.  <\/span>\r\n\r\n<span class=\"c1\">#Pick a name for your model -&gt; I'm going to use a random word: cupcake<\/span>\r\n\r\n<span class=\"c1\">#step 1: let python know what algorithm I'm using:<\/span>\r\n<span class=\"n\">cupcake<\/span> <span class=\"o\">=<\/span><span class=\"n\">neighbors<\/span><span class=\"o\">.<\/span><span class=\"n\">KNeighborsClassifier<\/span><span class=\"p\">(<\/span><span class=\"n\">n_neighbors<\/span><span class=\"o\">=<\/span><span class=\"mi\">15<\/span><span class=\"p\">,<\/span> <span class=\"n\">p<\/span> <span class=\"o\">=<\/span><span class=\"mi\">2<\/span> <span class=\"p\">)<\/span>\r\n<span class=\"c1\">#step 2: Train the model on ONLY THE TRAINING DATA (fit!)<\/span>\r\n<span class=\"n\">cupcake<\/span><span class=\"o\">.<\/span><span class=\"n\">fit<\/span><span class=\"p\">(<\/span><span class=\"n\">X_train<\/span><span class=\"p\">,<\/span><span class=\"n\">Y_train<\/span><span class=\"p\">)<\/span>\r\n\r\n\r\n<span class=\"c1\">##Now we have a well trained model!  But is it a good model?<\/span>\r\n<span class=\"c1\">## I'm going to look at the errors in BOTH my training and test sets.  <\/span>\r\n<span class=\"c1\">## We do this by predicting what Y will be for each set, than actually comparing<\/span>\r\n\r\n<span class=\"n\">Y_pred_train<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cupcake<\/span><span class=\"o\">.<\/span><span class=\"n\">predict<\/span><span class=\"p\">(<\/span><span class=\"n\">X_train<\/span><span class=\"p\">)<\/span> \r\n<span class=\"n\">Y_pred<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cupcake<\/span><span class=\"o\">.<\/span><span class=\"n\">predict<\/span><span class=\"p\">(<\/span><span class=\"n\">X_test<\/span><span class=\"p\">)<\/span>\r\n\r\n<span class=\"c1\">##record errors<\/span>\r\n<span class=\"n\">error_train<\/span><span class=\"o\">=<\/span><span class=\"nb\">list<\/span><span class=\"p\">(<\/span><span class=\"n\">Y_train<\/span> <span class=\"o\">==<\/span> <span class=\"n\">Y_pred_train<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">count<\/span><span class=\"p\">(<\/span><span class=\"kc\">False<\/span><span class=\"p\">)<\/span><span class=\"o\">\/<\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">Y_train<\/span><span class=\"p\">)<\/span>\r\n<span class=\"n\">error_test<\/span><span class=\"o\">=<\/span><span class=\"nb\">list<\/span><span class=\"p\">(<\/span><span class=\"n\">Y_test<\/span> <span class=\"o\">==<\/span> <span class=\"n\">Y_pred<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">count<\/span><span class=\"p\">(<\/span><span class=\"kc\">False<\/span><span class=\"p\">)<\/span><span class=\"o\">\/<\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">Y_test<\/span><span class=\"p\">)<\/span>\r\n\r\n<span class=\"c1\">##Look it over:<\/span>\r\n<span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"The training error was: \"<\/span><span class=\"p\">,<\/span> <span class=\"n\">error_train<\/span><span class=\"p\">)<\/span>\r\n<span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"The testing error was: \"<\/span><span class=\"p\">,<\/span> <span class=\"n\">error_test<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"output_wrapper\">\n<div class=\"output\">\n<div class=\"output_area\">\n<div class=\"prompt\"><\/div>\n<div class=\"output_subarea output_stream output_stdout output_text\">\n<pre>The training error was:  0.016701461377870562\r\nThe testing error was:  0.025\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h2 id=\"Your-turn:\">Your turn:<a class=\"anchor-link\">\u00b6<\/a><\/h2>\n<p>For this week, we are going to turn a blind eye to the fact that we are experimenting on the test data. Try out different models! Look at different [latex]K[\/latex] values, and different [latex]p[\/latex] values to see if you can find something that works better than others. Can you automate this process using some loops or other tools?<\/p>\n<p>Explain your best model, and hand it in. Expect that random change may affect different models.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[\u00a0]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight hl-ipython3\">\n<pre> \r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":883,"menu_order":2,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-61","chapter","type-chapter","status-publish","hentry"],"part":64,"_links":{"self":[{"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/pressbooks\/v2\/chapters\/61","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/wp\/v2\/users\/883"}],"version-history":[{"count":5,"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/pressbooks\/v2\/chapters\/61\/revisions"}],"predecessor-version":[{"id":82,"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/pressbooks\/v2\/chapters\/61\/revisions\/82"}],"part":[{"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/pressbooks\/v2\/parts\/64"}],"metadata":[{"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/pressbooks\/v2\/chapters\/61\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/wp\/v2\/media?parent=61"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/pressbooks\/v2\/chapter-type?post=61"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/wp\/v2\/contributor?post=61"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/pressbooks.bccampus.ca\/businessanalytics\/wp-json\/wp\/v2\/license?post=61"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}