{ "cells": [ { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "# Lecture 4: Class demo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports, Announcements, LOs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "# import the libraries\n", "import os\n", "import sys\n", "sys.path.append(os.path.join(os.path.abspath(\"../\"), \"code\"))\n", "from plotting_functions import *\n", "from utils import *\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "\n", "%matplotlib inline\n", "\n", "pd.set_option(\"display.max_colwidth\", 200)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do you recall [the restaurants survey](https://ubc.ca1.qualtrics.com/jfe/form/SV_73VuZiuwM1eDVrw) you completed at the start of the course?\n", "\n", "Let's use that data for this demo. You'll find a [wrangled version](https://github.ubc.ca/MDS-2023-24/DSCI_571_sup-learn-1_students/blob/master/lectures/data/cleaned_restaurant_data.csv) in the course repository." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('../data/cleaned_restaurant_data.csv')" ] }, { "cell_type": "code", "execution_count": 3, "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", " \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", " \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", "
north_americaeat_out_freqagen_peoplepricefood_typenoise_levelgood_servercommentsrestaurant_nametarget
0Yes3.02910.0120.0ItalianmediumYesAmbienceNaNdislike
1Yes2.0233.020.0Canadian/Americanno musicNofood tastes badNaNdislike
2Yes2.02120.015.0ChinesemediumYesbad foodNaNdislike
3No2.02414.018.0OthermediumNoOverall vibe on the restaurantNaNdislike
4Yes5.02330.020.0ChinesemediumYesA bad dayNaNdislike
....................................
959No10.022NaNNaNNaNNaNNaNNaNNaNlike
960Yes1.020NaNNaNNaNNaNNaNNaNNaNlike
961No1.02240.050.0ChinesemediumYesThe self service sauce table is very clean and the sauces were always filled up.Haidilaolike
962Yes3.021NaNNaNNaNNaNNaNNaNNaNlike
963Yes3.02720.022.0OthermediumYesLots of meat that was very soft and tasty. Hearty and amazing broth. Good noodle thickness and consistencyUno Beef Noodlelike
\n", "

964 rows × 11 columns

\n", "
" ], "text/plain": [ " north_america eat_out_freq age n_people price food_type \\\n", "0 Yes 3.0 29 10.0 120.0 Italian \n", "1 Yes 2.0 23 3.0 20.0 Canadian/American \n", "2 Yes 2.0 21 20.0 15.0 Chinese \n", "3 No 2.0 24 14.0 18.0 Other \n", "4 Yes 5.0 23 30.0 20.0 Chinese \n", ".. ... ... ... ... ... ... \n", "959 No 10.0 22 NaN NaN NaN \n", "960 Yes 1.0 20 NaN NaN NaN \n", "961 No 1.0 22 40.0 50.0 Chinese \n", "962 Yes 3.0 21 NaN NaN NaN \n", "963 Yes 3.0 27 20.0 22.0 Other \n", "\n", " noise_level good_server \\\n", "0 medium Yes \n", "1 no music No \n", "2 medium Yes \n", "3 medium No \n", "4 medium Yes \n", ".. ... ... \n", "959 NaN NaN \n", "960 NaN NaN \n", "961 medium Yes \n", "962 NaN NaN \n", "963 medium Yes \n", "\n", " comments \\\n", "0 Ambience \n", "1 food tastes bad \n", "2 bad food \n", "3 Overall vibe on the restaurant \n", "4 A bad day \n", ".. ... \n", "959 NaN \n", "960 NaN \n", "961 The self service sauce table is very clean and the sauces were always filled up. \n", "962 NaN \n", "963 Lots of meat that was very soft and tasty. Hearty and amazing broth. Good noodle thickness and consistency \n", "\n", " restaurant_name target \n", "0 NaN dislike \n", "1 NaN dislike \n", "2 NaN dislike \n", "3 NaN dislike \n", "4 NaN dislike \n", ".. ... ... \n", "959 NaN like \n", "960 NaN like \n", "961 Haidilao like \n", "962 NaN like \n", "963 Uno Beef Noodle like \n", "\n", "[964 rows x 11 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 4, "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", " \n", " \n", " \n", "
eat_out_freqagen_peopleprice
count964.000000964.0000006.960000e+02696.000000
mean2.58518723.9751041.439254e+041472.179152
std2.2464864.5567163.790481e+0537903.575636
min0.00000010.000000-2.000000e+000.000000
25%1.00000021.0000001.000000e+0118.000000
50%2.00000022.0000002.000000e+0125.000000
75%3.00000026.0000003.000000e+0140.000000
max15.00000046.0000001.000000e+071000000.000000
\n", "
" ], "text/plain": [ " eat_out_freq age n_people price\n", "count 964.000000 964.000000 6.960000e+02 696.000000\n", "mean 2.585187 23.975104 1.439254e+04 1472.179152\n", "std 2.246486 4.556716 3.790481e+05 37903.575636\n", "min 0.000000 10.000000 -2.000000e+00 0.000000\n", "25% 1.000000 21.000000 1.000000e+01 18.000000\n", "50% 2.000000 22.000000 2.000000e+01 25.000000\n", "75% 3.000000 26.000000 3.000000e+01 40.000000\n", "max 15.000000 46.000000 1.000000e+07 1000000.000000" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Are there any unusual values in this data that you notice?\n", "Let's get rid of these outliers. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(942, 11)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "upperbound_price = 200\n", "lowerbound_people = 1\n", "df = df[~(df['price'] > 200)]\n", "restaurant_df = df[~(df['n_people'] < lowerbound_people)]\n", "restaurant_df.shape" ] }, { "cell_type": "code", "execution_count": 6, "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", " \n", " \n", " \n", "
eat_out_freqagen_peopleprice
count942.000000942.000000674.000000674.000000
mean2.59805723.99256924.97329434.023279
std2.2577874.58257022.01666029.018622
min0.00000010.0000001.0000000.000000
25%1.00000021.00000010.00000018.000000
50%2.00000022.00000020.00000025.000000
75%3.00000026.00000030.00000040.000000
max15.00000046.000000200.000000200.000000
\n", "
" ], "text/plain": [ " eat_out_freq age n_people price\n", "count 942.000000 942.000000 674.000000 674.000000\n", "mean 2.598057 23.992569 24.973294 34.023279\n", "std 2.257787 4.582570 22.016660 29.018622\n", "min 0.000000 10.000000 1.000000 0.000000\n", "25% 1.000000 21.000000 10.000000 18.000000\n", "50% 2.000000 22.000000 20.000000 25.000000\n", "75% 3.000000 26.000000 30.000000 40.000000\n", "max 15.000000 46.000000 200.000000 200.000000" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "restaurant_df.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data splitting \n", "\n", "We aim to predict whether a restaurant is liked or disliked." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Separate `X` and `y`. \n", "\n", "X = restaurant_df.drop(columns=['target'])\n", "y = restaurant_df['target']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below I'm perturbing this data just to demonstrate a few concepts. Don't do it in real life. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "X.at[459, 'food_type'] = 'Quebecois'\n", "X['price'] = X['price'] * 100" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Split the data\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### EDA " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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eubvnfYJAADV6fTp09q+fbsk6a9//asmTJjgtJyz8YiKfp9W9vuwaB2HDx/Wr371qzs1GUAlcWUfphQaGup4X54uarf7+uuvJUm/+c1vnCb6kopd2Xe34OBgSdKxY8fKLFf0Pn17jJ23t7ckKScnp9T4H374oXINrGEaN26sZs2aSarc8SD9z/Y7depUmfcN2u9lBACgJrKf40hyDFLsjLPznHbt2jneF+2O70xp8+/2HA1A+ZHsw5QeeeQRWa1WSbdGoq8oe5f+goKCUsv8v//3/8qsw9PT8451VFbfvn0l3RqI0H4vujOffPKJJKlJkyaOQW7s/P39Jcnp/XR227ZtK7MdVbmOrhYZGSlJ2rRpk65du1bhePtowTdv3tTWrVtLLbdhw4bKNRAAADcoettiad/f6enp+uc//1liepMmTRxj02zatKnUZaSlpZX643dYWJjatGkjSfr444/L3W4AFUeyD1Py9fXVCy+8IElatWqVVq1aVWb53NzcYoPO2Ad7++yzz5wO0Pe3v/1NO3fuLLPO5s2bS1KZyXhlxcTESLr1JT1x4kSnbdywYYOjm15MTEyJHgoPPfSQpFuj1Du7gn/x4kW9+eabZbajKtfR1WJjYyVJWVlZio6OLnay48ztVyQef/xxx/q+9tprTsdASEpK0vr1613UYgAAXK/ogLbOEnabzaYXXnih1B8C7I/bO3TokP7+97+XmF9YWKg//vGPpS7fYrE4vpP37Nmj+fPnl9negoICnTx5sswyAJwj2Ydp/elPf1Lnzp1lGIb+4z/+Q//f//f/6YsvvtClS5eUmZmp06dPKyEhQX/4wx8UFBSktWvXOmLtj6z78ssvNWbMGB06dEgZGRn69ttvFRsbq5iYmDuOum5/CsCnn36q3bt365dfflF+fr7y8/Pv+pn3Xbt2ddxjt379ekVFRSk5OVkZGRk6efKk3nzzTY0ZM0aSFBgYqNdff71EHePGjZOHh4dycnL06KOPKjExUdeuXdP58+e1YsUK9erVq8xB74qu4549e/Tpp58qKyvLZevoat27d9drr70mSUpISFD37t21YsUKnTp1StevX9fFixeVnJys+Ph49ejRo8QIwVarVQsXLpR0q6v+I488ou3bt+vq1as6d+6c/vznP+uJJ54ocbsEAAA1Sffu3R0J/8svv6ylS5fq1KlTunLlirZv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cnJKLTN//nzNnj27xPQdO3a45JF9c7oX3nUdNdXWrVtdUs/Cni6ppto529eu2kaoWRITE6u7CXCDu93PN27ccFFLAAAAXKtauvHfzsvLS3PmzNHgwYO1e/duZWZmqkmTJvL29pYk3bx5s9RY+xV7Hx+fUstMnz5dsbGxjs9ZWVkKDAxUZGSkfH19K91um82mxMREvXGwnvIKnfc8qO2Oxg12ST1d4j53ST3VxVrP0JzuhU73tau2EWoG+//riIgIeXp6VndzUEVctZ/tPcUAAABqmhqR7EvSww8/LEkqLCzU6dOnFR4e7uiif/36dRmG4bQrv737vr2sM1ar1dEDoChPT0+XnMznFVpKPHvdLFyV7Jhl+zjb1ySE5uSqvw+o2e52P3OMAACAmqrGPHqv6AlTfn6+JKljx46Sbl29v3DhgtO406dPFysLAAAAAEBdV2OS/WPHjjnet23bVpIUFBSk1q1bS5KSk5Odxtmn9+rVq4pbCAAAAABA7VBjkv23335bktSpUycFBARIkiwWi4YPHy5J+uijj0rE7N27V8ePH5enp6eeeOIJ9zUWAAAAAIAazG3JfmJioqZPn64zZ84Um/7TTz9p4sSJWr16tSRp5syZxeZPnjxZXl5e2rFjh+Lj42UYtx59du7cOY0fP16S9Pzzzzt6AAAAAAAAUNe5Ldn/5ZdftGDBAoWEhKht27bq2bOnHnzwQbVs2VJ//etfZbFYNGvWLD3zzDPF4tq3b69ly5apXr16mjJligIDA9WtWzd17NhRJ06cUHh4uOLj4921GgAAwA2io6NlsVjKfNkf0Xu7ffv2adiwYWrRooV8fHx0//33a86cOaWWBwDAjNw2Gn94eLhef/117du3TydPntTRo0dlGIYCAgLUt29fvfTSS6Xedz927Fh16NBB8+fP1969e/Xdd98pJCREzzzzjKZOnep4RB8AADCXjh07qmXLlk7n1atX8prFypUrNW7cOBUUFCggIECBgYE6evSoZs6cqYSEBO3evVsNGjSo6mYDAFDt3JbsBwYGau7cuZWO7927txISElzYIgAAUNO99tprio6OLlfZs2fPKiYmRgUFBVq4cKEmTZoki8Wic+fOafDgwTpw4ICmTJmid955p2obDQBADVBjBugDAAC4G/Hx8crLy1NkZKQmT54si8UiSWrXrp2WL18uSfrggw90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9jfHyLr2ZZaHK9YRAACzmDZtmtNBgpOSkrR+/XpJ0n/8x39UaLT88nrllVckSenp6Y7v5tLk5+c73t97772KioqSJC1atEi7d+8uMzYrK0sXL168q7YCZkWyD9RCLVq0UL9+/bR8+XJduHBBly9f1rp16/TrX//a8Zi/pUuXloibOHGi45m0r732mh5//HFt3rxZP/zwg65fv65z587p888/19SpUxUSEqK//OUvxeK7du2qCRMmSJLWr1+vqKgoJScnKyMjQydPntSbb76pMWPGSLr1XN3XX3+91HUIDg7W559/riFDhuirr75SRkaGvv/+e82cOVMvvPCCJKlDhw6aOHFihbbN3a4jAABmEBAQoO+++06PPPKIPv/8c129elXnzp3Tn//8Zz3xxBMyDENNmzZVXFxclSx/1KhRGjVqlCTpv/7rvxQZGaktW7bo4sWLjkfzvv/+++rdu3exRwVL0nvvvadWrVopLy9PkZGR+sMf/qDk5GT9+OOPunbtmr7//nutW7dO48ePV9u2bZWcnFwl6wDUdjx6D6iF/vGPf2jw4MFOr3rXq1dPf/nLXxQREVFinqenpz777DONHz9e69at0+bNm7V58+ZSl2O1WktMW7JkibKysrRq1Spt3bpVW7duLVEmODhY27Ztk5+fX6l19+vXT88++6z+9Kc/Oe1m2KZNG23evFk+Pj6l1uGMK9YRAIDarkOHDnrjjTf00ksv6dFHHy0x39fXVwkJCeW+Va4y/t//+3/y8vLSqlWrlJiYWOZtBUW1bdtWX331lUaOHKkjR47onXfe0TvvvFNqeb7LAee4sg/UQj169FBKSopefPFFtWvXTlarVS1atNDw4cO1Z88e/eEPfyg1tlGjRlq7dq2++uorjR8/Xvfee68aNmwoDw8PNWvWTL169dKUKVO0b98+LVq0qES8l5eXVq5cqa1bt2rEiBFq06aNPD095efnp4cfflgLFy7UsWPH1KlTpzuux9y5c7Vp0yZFRESoefPmslqt6tChgyZPnqyjR4/qvvvuq9T2udt1BADADF588UUlJSXpySefVOvWreXl5aV27dppwoQJOnbsWLHb/aqCt7e3Vq5cqV27dunZZ59Vu3bt5O3tLV9fX3Xu3FmjR4/Whg0bnLajY8eOOnz4sFauXKnhw4erbdu2slqt8vLyUps2bTRw4EAtXLhQ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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X_train.hist(bins=20, figsize=(12, 8));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do you see anything interesting in these plots? " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "food_type\n", "Other 189\n", "Canadian/American 131\n", "Chinese 102\n", "Indian 36\n", "Italian 32\n", "Thai 20\n", "Fusion 18\n", "Mexican 17\n", "fusion 3\n", "Quebecois 1\n", "Name: count, dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train['food_type'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Error in data collection? Probably \"Fusion\" and \"fusion\" categories should be combined?" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "X_train['food_type'] = X_train['food_type'].replace(\"fusion\", \"Fusion\")\n", "X_test['food_type'] = X_test['food_type'].replace(\"fusion\", \"Fusion\")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "food_type\n", "Other 189\n", "Canadian/American 131\n", "Chinese 102\n", "Indian 36\n", "Italian 32\n", "Fusion 21\n", "Thai 20\n", "Mexican 17\n", "Quebecois 1\n", "Name: count, dtype: int64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train['food_type'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, usually we should spend lots of time in EDA, but let's stop here so that we have time to learn about transformers and pipelines. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dummy Classifier" ] }, { "cell_type": "code", "execution_count": 14, "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", "
fit_timescore_timetest_scoretrain_score
00.0007780.0005740.5165560.514950
10.0006500.0004690.5165560.514950
20.0005930.0005350.5165560.514950
30.0006070.0003950.5133330.515755
40.0005120.0003680.5133330.515755
\n", "
" ], "text/plain": [ " fit_time score_time test_score train_score\n", "0 0.000778 0.000574 0.516556 0.514950\n", "1 0.000650 0.000469 0.516556 0.514950\n", "2 0.000593 0.000535 0.516556 0.514950\n", "3 0.000607 0.000395 0.513333 0.515755\n", "4 0.000512 0.000368 0.513333 0.515755" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.dummy import DummyClassifier\n", "\n", "dummy = DummyClassifier()\n", "scores = cross_validate(dummy, X_train, y_train, return_train_score=True)\n", "pd.DataFrame(scores)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have a relatively balanced distribution of both 'like' and 'dislike' classes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's try KNN on this data\n", "\n", "Do you think KNN would work directly on `X_train` and `y_train`?" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# Preprocessing and pipeline\n", "from sklearn.neighbors import KNeighborsClassifier\n", "\n", "knn = KNeighborsClassifier()\n", "# knn.fit(X_train, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to preprocess the data before passing it to ML models. What are the different types of features in the data? " ] }, { "cell_type": "code", "execution_count": 16, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
north_americaeat_out_freqagen_peoplepricefood_typenoise_levelgood_servercommentsrestaurant_name
80No2.02130.02200.0ChinesehighNoThe environment was very not clean. The food tasted awful.NaN
934Yes4.02130.03000.0Canadian/AmericanlowYesThe building and the room gave a very comfy feeling. Immediately after sitting down it felt like we were right at home.NaN
911No4.02040.02500.0Canadian/AmericanmediumYesI was hungryChambar
459Yes5.021NaNNaNQuebecoisNaNNaNNaNNaN
62Yes2.02420.03000.0IndianhighYesbad tasteeast is east
\n", "
" ], "text/plain": [ " north_america eat_out_freq age n_people price food_type \\\n", "80 No 2.0 21 30.0 2200.0 Chinese \n", "934 Yes 4.0 21 30.0 3000.0 Canadian/American \n", "911 No 4.0 20 40.0 2500.0 Canadian/American \n", "459 Yes 5.0 21 NaN NaN Quebecois \n", "62 Yes 2.0 24 20.0 3000.0 Indian \n", "\n", " noise_level good_server \\\n", "80 high No \n", "934 low Yes \n", "911 medium Yes \n", "459 NaN NaN \n", "62 high Yes \n", "\n", " comments \\\n", "80 The environment was very not clean. The food tasted awful. \n", "934 The building and the room gave a very comfy feeling. Immediately after sitting down it felt like we were right at home. \n", "911 I was hungry \n", "459 NaN \n", "62 bad taste \n", "\n", " restaurant_name \n", "80 NaN \n", "934 NaN \n", "911 Chambar \n", "459 NaN \n", "62 east is east " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- What all transformations we need to apply before training a machine learning model? \n", "- Can we group features based on what type of transformations we would like to apply?" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['north_america', 'eat_out_freq', 'age', 'n_people', 'price',\n", " 'food_type', 'noise_level', 'good_server', 'comments',\n", " 'restaurant_name'],\n", " dtype='object')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.columns" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "good_server\n", "Yes 396\n", "No 148\n", "Name: count, dtype: int64" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train['good_server'].value_counts()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "noise_level\n", "medium 232\n", "low 186\n", "high 75\n", "no music 37\n", "crazy loud 18\n", "Name: count, dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train['noise_level'].value_counts()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "numeric_feats = ['age', 'n_people', 'price'] # Continuous and quantitative features\n", "categorical_feats = ['north_america', 'food_type'] # Discrete and qualitative features\n", "binary_feats = ['good_server'] # Categorical features with only two possible values \n", "ordinal_feats = ['noise_level'] # Some natural ordering in the categories \n", "noise_cats = ['no music', 'low', 'medium', 'high', 'crazy loud']\n", "drop_feats = ['comments', 'restaurant_name', 'eat_out_freq'] # Dropping text feats and `eat_out_freq` because it's not that useful" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's begin with numeric features. What if we just use numeric features to train a KNN model? Would it work? " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "X_train_num = X_train[numeric_feats]\n", "X_test_num = X_test[numeric_feats]\n", "# knn.fit(X_train_num, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to deal with NaN values. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### sklearn's `SimpleImputer` " ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# Impute numeric features using SimpleImputer\n", "from sklearn.impute import SimpleImputer\n", "\n", "imputer = SimpleImputer(strategy='median')\n", "imputer.fit(X_train_num)\n", "X_train_num_imp = imputer.transform(X_train_num)\n", "X_test_num_imp = imputer.transform(X_test_num)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
KNeighborsClassifier()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "KNeighborsClassifier()" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "knn.fit(X_train_num_imp, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "No more errors. It worked! Let's try cross validation. " ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6706507304116865" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "knn.score(X_train_num_imp, y_train)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.49206349206349204" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "knn.score(X_test_num_imp, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have slightly improved results in comparison to the dummy model. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Discussion questions \n", "\n", "- What's the difference between sklearn estimators and transformers? \n", "- Can you think of a better way to impute missing values? \n", "\n", "



" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do we need to scale the data? " ] }, { "cell_type": "code", "execution_count": 26, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
agen_peopleprice
802130.02200.0
9342130.03000.0
9112040.02500.0
45921NaNNaN
622420.03000.0
............
1062710.01500.0
3332412.0800.0
393205.01500.0
37620NaNNaN
5252050.03000.0
\n", "

753 rows × 3 columns

\n", "
" ], "text/plain": [ " age n_people price\n", "80 21 30.0 2200.0\n", "934 21 30.0 3000.0\n", "911 20 40.0 2500.0\n", "459 21 NaN NaN\n", "62 24 20.0 3000.0\n", ".. ... ... ...\n", "106 27 10.0 1500.0\n", "333 24 12.0 800.0\n", "393 20 5.0 1500.0\n", "376 20 NaN NaN\n", "525 20 50.0 3000.0\n", "\n", "[753 rows x 3 columns]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train[numeric_feats]" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "# Scale the imputed data \n", "\n", "from sklearn.preprocessing import StandardScaler\n", "scaler = StandardScaler()\n", "scaler.fit(X_train_num_imp)\n", "X_train_num_imp_scaled = scaler.transform(X_train_num_imp)\n", "X_test_num_imp_scaled = scaler.transform(X_test_num_imp)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### What are some alternative methods for scaling?\n", "- [MinMaxScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html): Transform each feature to a desired range\n", "- [RobustScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.RobustScaler.html): Scale features using median and quantiles. Robust to outliers. \n", "- [Normalizer](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Normalizer.html): Works on rows rather than columns. Normalize examples individually to unit norm.\n", "- [MaxAbsScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MaxAbsScaler.html): A scaler that scales each feature by its maximum absolute value.\n", " - What would happen when you apply `StandardScaler` to sparse data? \n", "- You can also apply custom scaling on columns using [`FunctionTransformer`](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.FunctionTransformer.html). For example, when a column follows the power law distribution (a handful of your values have many data points whereas most other values have few data points) log scaling is helpful. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- For now, let's focus on `StandardScaler`. Let's carry out cross-validation" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.55629139, 0.49006623, 0.56953642, 0.54 , 0.53333333])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cross_val_score(knn, X_train_num_imp_scaled, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, we don't see a big difference with `StandardScaler`. But usually, scaling is a good idea. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- This worked but are we doing anything wrong here? \n", "- What's the problem with calling `cross_val_score` with preprocessed data? \n", "- How would you do it properly?\n", "



" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ4AAANBCAYAAACh3HSeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC1cklEQVR4nOzdd3gU1dvG8XsDIQmhE4L0oiARAog0aaFIVwFFEOmCKE1AUcFCKCL2AkixQEDAggLSmxTpVSDUn9J7CKGHFjLvH/vubsJu+g5ZwvdzXbkMU86cZ7PunNyZOWMxDMMQAAAAAAAA4GZe6d0BAAAAAAAAZEwETwAAAAAAADAFwRMAAAAAAABMQfAEAAAAAAAAUxA8AQAAAAAAwBQETwAAAAAAADAFwRMAAAAAAABMQfAEAAAAAAAAUxA8AQAAAAAAwBQETwAAeLiIiAh98cUXatKkiYoXLy5/f3/5+fmpUKFCatKkiUaNGqWjR4+mdzdxl+LFi8tisWjo0KFO64YOHSqLxaLixYunun13tOEOntIPAADgmQieAADwULGxsRo2bJhKliypgQMHasmSJTp69Kiio6N148YNnTp1SkuWLNG7776rkiVLqmvXrrp8+XJ6dxsZhMVikcViUVhYWHp3BQAA3McIngAA8EA3b95Uy5YtNXToUF27dk2FChXSyJEjtWnTJp06dUoRERHauXOnxo4dq5o1ayo2NlZhYWE6dOhQencdAAAAsCN4AgDAAw0YMEDz5s2TJL300kv6999/9e6776pq1aoqUKCA8uXLp/Lly6t3795au3atFi9erEKFCqVzr5FcQ4cOlWEYOnLkSHp3Jc0yUi0AAMD9Mqd3BwAAQHxr1qzR+PHjJUkNGjTQtGnTZLFYEt2ncePG2r59e5LbAQAAAPcSVzwBAOBhPvnkE0nWOXbGjx+f7DApMDBQ+fLli7cs7jw9d+7c0YQJE1S7dm3ly5dPXl5eThNfnz9/Xh988IEqVaqkXLlyydfXV8WLF1enTp20efPmRI9/7do1ffrpp6pRo4by5Mkjb29v5cuXT4899pheeOEFff/997p27ZrTfpGRkfrggw/0xBNPKGfOnPL29lb+/PlVrlw5derUSdOmTVNMTEyyXgNJ+u677+x1J3Xr4dGjR+Xl5SWLxaKxY8fGW3fkyBF99tlnatasmYKCgpQjRw5lzZpVJUuWVKdOnbRp06Zk9+luyZmQ+8aNG/roo48UHBysrFmzKm/evAoJCdG0adOSdYw9e/Zo2LBheuqpp1SqVCn5+/srW7ZsKlOmjF577TXt27fP5X5169aN957r2rWr/fV0Ne9TcmoxDEM///yzmjdvroceekhZsmRRvnz51KBBA3333XeJ/nzvnqR9/vz5atKkiQIDA+Xr66uHH35YAwYM0Llz55L1ugAAgHvMAAAAHuPq1atG5syZDUlGvXr10tyeJEOSMWHCBKNu3br2f9u+QkND7duuXr3ayJ07t9M2cb8GDRrk8jinTp0ySpUqlei+kowtW7bE22/Pnj1GYGBgkvudO3cu2TVfuHDB8PHxMSQZw4YNS3TbDz/80JBkeHt7Ox0jV65cifbJYrEYH330UYJtFytWzOk1tgkNDTUkGcWKFXO5b0REhBEcHJzgsTt37pxoGxcvXkzyNfX29jamTp3qtG9ISEiS+06ePDnZtVy6dMmoX79+ou09/vjjxqlTp5J8Hd94440E2yhevHiCbQAAgPTDFU8AAHiQDRs22K/+qFOnjtvaHTFihP7++28NGDBAO3bs0Pnz57Vnzx41b95cknTw4EE1b95cFy5cUI4cOfTVV1/p0KFDioiI0JIlS1SlShVJ0scff6wvv/zSqf23335b//77r7y8vPTuu+/qn3/+UUREhI4ePap169bp66+/VuXKlZ2u3nr11VcVEREhPz8/ffrpp9qzZ48iIyN16NAhrV69WiNHjlRQUFCKas2VK5eeeeYZSdJPP/2U6LbTp0+XJDVp0kQBAQHx1pUsWVIDBgzQggULtGvXLp07d06HDx/WkiVL9Pzzz8swDL377rtavHhxivqXFMMw1KZNG4WHh0uSXnvtNe3cuVORkZHatGmTXnjhBU2ZMkVTp05NtJ2yZcvqvffe09KlS+2v67///qs5c+aoQYMGun37trp3724/js2iRYt05coV+78nTJigK1euxPvq0KFDsut58cUXtWLFCklS+/bttXnzZkVGRio8PFz9+vWTxWLRP//8o2eeeUa3b99OsJ1p06bpyy+/VJcuXbRx40adP39e//33nwYPHiyLxaIjR47orbfeSna/AADAPZLeyRcAAHD47rvv7Fdw/PLLL2luT3GuCBk3blyC27Vs2dJ+FczGjRud1kdHRxtVq1Y1JBm+vr5OVwflyZPHkGT0798/2X27dOmSvW9ff/118otKhj///NPe9oYNG1xus2XLFvs2M2fOTPEx3n77bUOSUadOHZfrU3vF0x9//GHv1+DBg1223bFjR/s2CV1plJS2bdsakoxOnTq5XG9rP+7VTa4kVsucOXPs7fTt29fl/l988YV9mzFjxjitt72OkoyhQ4e6bKNXr16GJCNLlizG5cuXE+0vAAC4t7jiCQAADxIVFWX/PleuXG5rNygoSD179nS5LiIiQnPnzpUkdevWTdWqVXPaxs/PT6NHj5ZknXvo7iuJbFdpFS5cONl9unPnjv37lOyXHE2bNrVfwZTQnEi25XGvkEqJzp07S5LWrVun6OjoVPbU2aRJkyRJ+fLlU2hoqMttvvzyS2XJkiVNx+nUqZMkadmyZWlqJzE//PCDJClPnjz6+OOPXW4zYMAAPfbYY5Kk77//PsG2ChcurPfee8/lupdfflmSdOvWLe3YsSMNPQYAAO5G8AQAwAOgWbNmCa5bv369YmNjJUkvvPBCgttVq1ZNxYoVk2R98l5cFStWlCR9/vnnWrJkib29xOTOnVtFixaVJL3//vvasGFDkvskl7e3t1588UVJ0i+//OJ0C9edO3f0yy+/SLLW7OPj47KdrVu36rXXXlP58uWVM2dOZcqUyT7BdtmyZe1tHTx40C39NgxD69atk2T9mSXUr4CAAIWEhCTZ3ooVK9S5c2eVKVNG2bNnt0+kbrFY7LdZnj59Ot6tde4St5bmzZsra9asLrezWCz29114eLguXrzocruGDRsqc2bXD2SOezvmmTNn0tBrAADgbgRPAAB4kDx58ti/T+gX8NQoWbJkguuOHj1q/94WpiTEtv7IkSPxln/88cfKkiWLzpw5oyZNmqhAgQJ64YUX9NVXX2nXrl0JtvfFF1/IYrFo//79qlGjhooWLaoOHTpo3Lhx+vfff5NRWcI6duwoyfqkvkWLFsVbt3TpUp09e1aS48qfu73//vuqWrWqJk6cqPDwcF2+fDnBQO3SpUtp6mvcdmw/96TmtrJdJeTKnTt31LVrVzVo0EBTp07VgQMHdPXqVRmGkeBx3e3y5cu6cOGCpOS/rwzD0LFjx1xuU7BgwQT3jxtqufPqMwAAkHYETwAAeJASJUrYv0/ocfepkdDVJpLiXe2SLVu2RNvJnj270z6S9OSTT2rjxo1q2bKlvL29FRERod9//11vvPGGKlSooPLly7uchLt169b666+/1KBBA3l5een48eOaPn26evfurdKlS6tWrVravHlzSkq1q1q1qh599FFJzpOM226zK1GihGrWrOm076+//qqRI0fKMAzVrl1b06dP1549e3Tu3DldvnxZV65ciTcpt+1Ww7S6evWq/fukfhaJrf/8888VFhYmSXrmmWf0xx9/aP/+/YqMjLRPEL5gwQL79u7qf1ypeV/dvV9cCV3tdLeEwjUAAJA+kncGBwAA90T16tWVOXNmxcTE6O+//74nx4z7S//Vq1fl7++f4La2YCTuPjaPP/64Zs+erWvXrmnTpk3asGGDli5dqjVr1ig8PFzNmjXTH3/8oVatWsXbr169eqpXr54uXryoDRs2aP369Vq0aJG2bdumdevWqXbt2vr7779dzj2VlI4dO+r999/X/PnzdenSJeXMmVNXr17VnDlzJEkdOnRwetKeJH377beSpBo1amjVqlXy8nL+W11iT2BLrbgBzbVr1xLdNm5IdTdb/9u2bWu/pfBuN2/eTEUPk+/u91Vi4q539d4CAAD3L654AgDAg2TLlk2NGjWSJK1atSrNt5slR/Hixe3f79mzJ9Ftd+/e7bTP3fz9/VW/fn299957Wr16tXbs2KG8efPKMAwNGzYswf1y5cqlpk2basSIEdq6dav++usv+fr66tatWxo1alSKarKxBUs3btzQzJkzJUmzZs2y345lux3vbrYJqtu0aeMydJIU74ond8mZM6d9UvmkrnhLaH1UVJSOHz8uSWrXrl2C+5vR/7hy5Mih3LlzS0r++8pisdjn/QIAABkDwRMAAB7m7bfflmS9ZahXr17JvnXo3LlzOnfuXIqPV6NGDWXKlEmS9Pvvvye43aZNm+zzQdWuXTvZ7ZcvX15t27aVlLLbB+vXr6/69euneL+4ihUrpjp16khy3G5n+2/16tVVqlQpl/vZrgaK++S9u919+547WCwW+61/Cxcu1K1bt1xud/78ea1evdrlurhXMiXU/9jYWM2YMSPRvthubUvsNUiMxWJRrVq1JEkLFizQ9evXXW5nGIY9FAwODnbr0xwBAED6I3gCAMDDhISEqEePHpKk5cuXq0OHDgn+0m6zfPlyPfHEEzp58mSKj5cvXz49++yzkqQffvhBW7duddrmxo0bev311yVJvr6+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JX1OKVvoVaBAgVS3AQCIj+AJwAPp+eefl2T9622/fv3S3F6uXLn0xhtvSJI2b96s+fPnp7nNkJAQ1a9fX5I0duxYnT17Ns1tAgBSxp3nC088V1gsljT3QVKigdydO3fs30+fPt3l095cfX344Yf2/QzDSHaf426bWu56XQAABE8AHlA///yzWrZsKck6UB8wYECa2+zfv799otkhQ4a4ZeBr+0t2dHS0Pv744zS3BwBIGXefLzztXJFUUBV3fZ48eVLeOSneJOwWi0XlypVL1lehQoVcHjupPqf2CitJ9vmlTp06leo2AADxETwBeCB5e3vrt99+07PPPitJ+vrrr/XWW2+lqc3s2bPb2/jnn380Z86ctHZTNWrUUJMmTSRJEyZM8KiBMH8NBvAgcPf5wtPOFVu2bEn2+nLlyqWqf48//rj9+6VLl6aqjeDgYJd9ciWp9YmpVKmSJOu8VHFv9Usuzo0A4IzgCcADy9vbWzNnzlTz5s0lSZ9//rkGDRqUpjb79Oljn3siNDTULX/Jtj216MaNG/roo4/S3J67+Pr62r+/efNmOvYEAMzl7vOFJ50rwsPD7RNquzJp0iRJ1lvp6tatm6q+PfLII3rsscckSb/88ouOHTuW4jYKFiyooKAgSdLMmTN1/fp1l9tdu3ZNv/32W6r6KUnPPPOMJOvVY999912K97edGzkvAoADwROAB1qWLFn0xx9/qGnTppKkTz75xP70otTw9/fXO++8I8k6mF+4cGGa+1ilShX7QPj777+PN8Fqeoo78erBgwfTsScAYD53ni887VzRo0cPXbt2zWn5jBkz7H1r2bJlmibctr1WN27c0HPPPadz584luO3Nmzc1btw43bhxI97ynj17SrI+7e7NN990ue+AAQPSdKtdhw4d7Lf4vffee1q9enWC2544ccJpme01ioiI0JUrV1LdDwDISAieADzwfHx8NHv2bDVu3FiSNHLkSIWGhqa6vZ49e9oHnran46TV8OHDZbFYdOvWLV2+fNktbaZVjRo17N8PGDBAf//9t/7991/9999/+u+//xQTE5OOvQMA93Pn+cJTzhWVK1fW1q1bVblyZYWFhWnbtm1asWKFevXqpY4dO0qy3h74+eefp6lv7dq1U+fOnSVJ27Zt02OPPab3339fy5Yt044dO7Ru3TpNnTpVr7zyigoWLKjevXs7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KTQ0VNWrV1dgYKB8fHxUvHhx9erVSxERES6PefflyXHndjh06JBat26t3Llzy9/fX0899ZR27tzp1I6ruTTCwsLs80v89ddfqlWrlvz9/ZU3b1517txZ58+fd/k6TJw4UWXLlpWvr6+KFCmit99+Wzdu3JDFYlHdunWTfB2LFy+ukJAQp9cx7jwXx44dU7du3VSoUCFlyZJFhQsXVrdu3XT8+PEk27e5c+eOPvnkEz3yyCPy9fXVI488olGjRik2Ntbl9v/++6+6du2qEiVKyNfXVwEBAapUqZLefPPNZB8TANLT33//LYvFom7durlcf+LECWXKlEkNGjSwL9u2bZv69OmjcuXKKWfOnPLz81NwcLA+/vhj3b59O1nHTewWnrVr1yokJMR+fmnbtm2Cn+UpOUcWL15cU6ZMkSSVKFHCfi6Jex5KaI6n6OhoDR06VGXKlJGvr6/y5Mmj5s2ba/369U7bxj0P//bbb6pUqZL8/PxUoEABvf7667p+/XqSr4/tfLty5UpJsvf17r5NmTJF1atXV7Zs2ZQtWzZVr17dXmNy7dmzR08//bSyZ8+unDlzqlmzZtq9e3eK2kDGk5wxrCTdunVLX375pSpVqiR/f39lz55dtWvX1ty5c53avHTpkoYMGaLHHntM2bJlU86cOVWmTBl17drV/v943bp1NWzYMElSvXr1Enzvu3L69Gn169dPpUqVkp+fn/LkyaPg4GD16tVLly9fjrdtcvudnM8NZHxc8QTAo9WtW1dHjhzRlClTFBISEu8klStXrnjb9u3bVxs3blTz5s319NNPK3/+/JKsvxR88cUXatCggapVqyZvb2/9888/Gj9+vJYsWaLt27crZ86cyerPkSNHVK1aNT322GN6+eWXdfDgQf3555+qV6+e9u3bZz9mUubNm6f58+frmWeeUc+ePfX3339r6tSpOnjwoNauXRtv2yFDhmjEiBEqUKCAevToocyZM2vmzJnav39/so4lSf3799eOHTucXkfbPBf//vuvatWqpYiICD3zzDMqW7as9uzZo0mTJmn+/Plat26dHnnkkSSP06NHD02aNEklSpRQ7969dePGDX355Zcuf7E4deqUqlatqmvXrql58+Zq27atrl69qn///VdjxozRF198kez6ACC91K5dW8WLF9cff/yhb7/9Vr6+vvHWT58+XbGxserYsaN92ffff6958+apTp06atasmaKjo7Vq1SoNHjxYW7Zs0R9//JHq/vz1119q2rSpvLy81LZtWxUsWFB//fWXatasqdy5czttn5JzZP/+/RUWFqadO3eqX79+9vNwUr/Q3rx5Uw0aNNDGjRtVqVIl9e/fXxEREfr111+1dOlS/frrr3ruueec9vv222+1aNEitWjRQnXr1tXixYs1ZswYnT9/XtOnT0/0mBUrVlRoaKjCwsJ09OhRhYaGSoo/dhgwYIC+/vprFSpUSN26dZPFYtEff/yhLl26aOfOnfryyy8TPYYk7d69WzVr1tTVq1f13HPPqVSpUtq8ebNq1qypChUqJLk/Mq7kjGFv3rypJk2aaNWqVXr88cfVrVs33b59WwsWLFCLFi00ZswY9enTR5JkGIYaN26sTZs2qWbNmmrSpIm8vLx05MgRzZ49W507d1aRIkXsf3hdvXq1OnfubP//8+5x892io6NVs2ZNHTlyRI0aNVKrVq1069YtHTp0SGFhYXr77beVI0eOFPc7tZ8byGAMAPBwK1euNCQZoaGhLtd37tzZkGQULlzYOHr0qNP6s2fPGleuXHFaPmXKFEOS8eGHH8ZbHhoaakgyVq5caV92+PBhQ5Ihyfj444/jbf/+++8bkoxRo0bFWx4SEmLc/TE7efJkQ5KROXNmY+3atfblMTExRt26dQ1JxoYNG+zLDxw4YGTKlMkoWrSoERkZaV9+5coVo2zZsoYkIyQkxOXrcrfEXsf69esbkoyJEyfGWz5x4kRDktGgQYN4y22v+eHDh53ar1ChgnH16lX78hMnThgBAQGGJKNz58725aNHjzYkGd98841Tf86dO5esmgDAE7z33nuGJOO3335zWhccHGz4+fkZly9fti87cuSIERMTE2+72NhY4+WXXzYkxTs/GIbr84mrz/Q7d+4YJUuWNCwWi7FmzZp4bb/00kv281hcKT1Huvr8j6tYsWJGsWLF4i0bPny4Iclo3769ERsba1++c+dOw8fHx8idO3e818d2Hs6ZM6exf/9++/Lo6GijdOnShsViMU6ePOny+Hdz9doZhmH8/fffhiQjKCjIuHjxon35xYsXjTJlyhiS4r2GtnFA3PNY3PanTZsWb/ngwYPtr3dCrxUyvqTGsO+++64hyRg6dGi8/zcuX75sVK5c2ciSJYv9vb5r1y5DktGq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7uyy/fPnzxtPPfVUsl9nW/2JfcU9Vtz3oqufVWxsrDFw4MBE28ubN6+xbt06l/3v3LmzIckICQkxfv31V8PX19dlG76+vsaKFSsSfJ0BAEDqccUTAADpbMeOHWrcuLEiIyNVunRpTZ48WYcOHVJUVJR27dqlN954Q15eXvrxxx81dOjQePvGxsaqU6dOunbtmgICAjR+/HgdOHBA58+f1//+9z+tWLFCgwcPjncFU+3atXXlyhUNHjxYklS0aFFduXIl3tfevXuT3f+LFy/qlVdeUUxMjEqWLKmffvpJ//33n86fP699+/Zp8eLF6tu3r/Lnz++074kTJ1S3bl0dPnxYBQoU0NixY3XgwAFFRUVp//79GjFihHx9fbVw4UK99tpr8fa9cuWKFi5caP/3nj17nOooVqxYsuuI64UXXlDmzJn1ww8/6Pjx4zpz5ox+/fVXlShRQrGxsXr99de1bNmyBPe/cOGCOnXqpOLFi2vmzJk6deqUzpw5E+/KswkTJqhfv366ffu2GjZsqPnz5+vUqVOKjIzU33//rebNmysmJkavvvqqy2OtWLFCffv2VWxsrIoXL65ffvlFZ86c0fHjx/X9998rU6ZMatOmTarql6Rbt26padOmWr58uf01Wb58uc6cOaNz585p8+bN+uSTT/TYY4/Z93n33Xd15coV1apVS5LUvn17p5/JxIkTk92HTz/9VJ9//rkkqUqVKlq8eLEiIiJ0+PBhff3118qRI4fOnz+vpk2b6vDhwwm2899//6lz586qVKmSFi5cqLNnz+rUqVP68ccflSNHDt24cUNdu3a1X7kFAADcKL2TLwAAHgSJXfFUsWJFQ5JRpUoVp6t6bCZMmGBIMrJkyWKcPHnSvnzXrl32dufMmZOiPsW9Oict5s6da+/Djh07UrRvixYtDElGiRIljDNnzrjcZtGiRfb2t2zZEm9dUlfMpETcK56yZs1q7N2712mbkydPGvnz5zckGWXKlHFaH/eKn9KlSxsXL150eazTp0/br77p1atXgn1q166dIckoV66c07rg4GBDkpEvXz7jxIkTTut3794d7wqflF7xNGrUKPu+o0aNSrCPsbGxTlfiJXUllU1iP7+zZ88aPj4+hiSjatWqRnR0tNP+GzdutF8x9vzzzzutt13xJMlo2LChcevWLadtfvvtN/s2ixcvTrS/AAAg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v/zlL7r22mtVvXp1XXvttZo5c6YKCwtLXP+7777TiBEj1KxZM1WvXl3R0dFKSEjQI488UuZjAoAvrV+/Xg6HQyNHjizx9YMHD6patWrq1auXc9mWLVs0btw4tW3bVlFRUQoPD1d8fLyee+45nT9/vkzHvdQtPJ9//rmSkpKc55f77ruv1O9yT86RTZs21YIFCyRJzZo1c55Lip+HSpvjKT8/X9OmTVPr1q1VvXp11alTR3379tWXX37ptm7x8/C7776rhIQEhYeHq0GDBvrDH/6gM2fOXPb9KTrfrl27VpKctV5c24IFC9SlSxfVrFlTNWvWVJcuXZwZy2rHjh3q16+fIiMjFRUVpT59+igzM9OjfSDwlGUMK0nnzp3TSy+9pISEBNWoUUORkZHq1q2bli5d6rbPn376SVOmTFGbNm1Us2ZNRUVFqXXr1hoxYoTzZ7xHjx6aPn26JKlnz56lfvZLcuTIEU2YMEEtW7ZUeHi46tSpo/j4eI0dO1YnTpxwWbesdZflewOBjyueAPi1Hj16KDs7WwsWLFBSUpLLSap27dou644fP15fffWV+vbtq379+unqq6+WZP5S8OKLL6pXr17q3LmzQkJC9J///EcpKSn6+OOPlZGRoaioqDLVk52drc6dO6tNmzZ64IEHtGfPHn300Ufq2bOnsrKynMe8nLS0NC1btkx33nmnkpOTtX79ei1cuFB79uzR559/7rLulClTNGPGDDVo0EC/+93vFBwcrPfee0+7du0q07Ek6aGHHtLWrVvd3seieS6+++47de3aVbm5ubrzzjt1/fXXa8eOHZo3b56WLVumL774Qtdee+1lj/O73/1O8+bNU7NmzfTggw/q559/1ksvvVTiLxaHDx9Wp06ddPr0afXt21f33XefTp06pe+++06vvPKKXnzxxTLnAwBf6datm5o2bar3339fr776qqpXr+7y+uLFi1VYWKihQ4c6l/3zn/9UWlqaunfvrj59+ig/P1+fffaZJk+erM2bN+v9998vdz2ffvqp7rjjDgUFBem+++5Tw4YN9emnnyoxMVFXXXWV2/qenCMfeughpaamatu2bZowYYLzPHy5X2jPnj2rXr166auvvlJCQoIeeugh5ebm6p133tG///1vvfPOO7r77rvdtnv11Ve1cuVK9e/fXz169NCqVav0yiuv6IcfftDixYsvecz27dtr6tSpSk1N1f79+zV16lRJrmOHhx9+WC+//LKuueYajRw5Ug6HQ++//76GDx+ubdu26aWXXrrkMSQpMzNTiYmJOnXqlO6++261bNlSmzZtUmJiotq1a3fZ7RG4yjKGPXv2rHr37q3PPvtMN954o0aOHKnz589r+fLl6t+/v1555RWNGzdOkmQYhm6//XZ9/fXXSkxMVO/evRUUFKTs7Gx98MEHGjZsmBo1auT8w+u6des0bNgw58/nxePmi+Xn5ysxMVHZ2dm67bbbNGDAAJ07d0579+5VamqqJk2apFq1anlcd3m/NxBgDADwc2vXrjUkGVOnTi3x9WHDhhmSjNjYWGP//v1ur3///ffGyZMn3ZYvWLDAkGQ8/fTTLsunTp1qSDLWrl3rXLZv3z5DkiHJeO6551zW//Of/2xIMmbOnOmyPCkpybj4a3b+/PmGJCM4ONj4/PPPncsLCgqMHj16GJKMjRs3Opd/++23RrVq1YzGjRsbeXl5zuUnT540rr/+ekOSkZSUVOL7crFLvY+33HKLIcmYO3euy/K5c+cakoxevXq5LC96z/ft2+e2/3bt2hmnTp1yLj948KARHR1tSDKGDRvmXD5r1ixDkvH3v//drZ6jR4+WKRMA+IMnnnjCkGS8++67bq/Fx8cb4eHhxokTJ5zLsrOzjYKCApf1CgsLjQceeMCQ5HJ+MIySzyclfadfuHDBaN68ueFwOIwNGza47Pv+++93nseK8/QcWdL3f3FNmjQxmjRp4rLsqaeeMiQZv/nNb4zCwkLn8m3bthlhYWHGVVdd5fL+FJ2Ho6KijF27djmX5+fnG9ddd53hcDiMQ4cOlXj8i5X03hmGYaxfv96QZMTFxRnHjx93Lj9+/LjRunVrQ5LLe1g0Dih+Hiu+/0WLFrksnzx5svP9Lu29QuC73Bj28ccfNyQZ06ZNc/nZOHHihNGxY0cjNDTU+Vn/5ptvDEnGgAED3Pbz888/u/wclzSWvZylS5cakoyHH37Y7bUTJ04YZ8+eLVfdhnH57w0EPm61AxAw/vSnP5U4r1JMTIxq1qzptnzo0KGqVauWVq9eXeZjNGvWTH/6059clhXdXrF58+Yy7+f+++9XYmKi89+rVaumYcOGue3nrbfe0oULF/TII4+obt26zuU1a9bUn//85zIf71IOHDigNWvWqE2bNho9erTLa6NHj1ZcXJw+/fTTy95yt3DhQknmFVo1atRwLr/mmms0YcKEUrcLDw93W+Zvk+UCwKUUXc20aNEil+Xbtm3T9u3b1b9/f0VGRjqXN2nSRNWqVXNZ1+Fw6MEHH5Qkj85LxX3++efau3ev+vXrp65du7rs+9lnn3U7puTdc2RpUlNTFRISoueee87lFvQbbrhBw4cP148//qiPPvrIbbsJEyaoVatWzn8PDw/X4MGDZRiGtmzZUuGaJPN2qOJXPUdFRTmvjip+O3pJcnJytG7dOt1www36zW9+4/La448/ftkrTFC1FRYWKiUlRddee62mTJni8rMRGRmpKVOm6Ny5c1qyZInLdiWNm8LCwkr8OS6PkvYfGRmp0NDQCtWNqo1b7QAEjE6dOpX62pIlSzR37lxlZGToxx9/1IULF5yvFU08Whbt2rVTUJBrzz42NlaSdPz48TLvJyEhwW1ZSfspmjvq5ptvdlu/pGXl8Z///EeSlJSU5DYnlcPhUPfu3ZWVlaVt27apUaNGpe6nqNZu3bq5vVbSsn79+umxxx7Tgw8+qE8++US9e/dW165ddd1111UkDgBUulatWqljx45auXKljh07pjp16kiS3njjDUlyuc1OMudGmT17tt5++23t2rVLp06dkmEYztc9OS8Vd6nv4SZNmqhRo0YlPs7cW+fIkpw4cUJ79+5VXFyc8zxXXI8ePTR37lxt3bpVQ4YMcXmtrOfK8ig695U0z0zRsq1bt15yH0Xvd/EmX5GaNWuqffv2fvM4e/ifb7/9Vj/++KMaNmzonJOpuKNHj0qSc2qFuLg4xcfH680339SBAwd01113qVu3bkpISCixqeyp7t27q379+po5c6a2bt2qvn37qmvXroqPj3cZH3paNyDReAIQQEqbX+nFF1/UxIkTVa9ePd12222KjY11/jXn5Zdf1tmzZ8t8jJLmggoONr9Kiw/UvbWfookc69Wr57Z+WeeTupyiY5S2v6InAf3000+X3M9PP/2koKCgEq9WKmnfzZo108aNGzV9+nStXLlS7733niTzF7gZM2bonnvu8SgHAPjS0KFDlZ6ernfffVe///3vVVhYqLfeeksxMTG67bbbXNYdOHCg0tLSdN111+m+++5TTEyMQkJCdPz4cf3973/36LxUXNH3dExMTImvX3311W6NJ2+eI0tSkXOMt865pdUVFBRU6vk1KCioTOc96dLvN1CaY8eOSTInp9+xY0ep650+fVqS+dlfs2aNpk2bpiVLljgfxBIdHa3x48friSeeqFADKioqShs3btTUqVOVlpamFStWSDKbvZMnT9bYsWPLVTcg0XgCEEAuvlpHkgoKCjRjxgw1bNhQW7dudRlgGoah559/vjJL9FjRJI5Hjx5VkyZNXF77/vvvvXqM0vZXtLxovdJERUWpsLBQeXl5bgP50vZ9ww036P3339f58+e1ZcsWrVy5UrNmzXJOiFv8dkQA8GeDBg3SI488okWLFun3v/+91qxZo8OHD2vChAnOZolk3k6dlpam22+/XcuXL3f5RfGrr77S3//+93LXUNSoKemJrZL7d3FlnCO9dY7xtlq1aqmwsFBHjx51axzl5uaqsLCwTOe9ovVL4q3zNAJT0efr17/+tf71r3+VaZvo6GjNnj1br7zyinbt2qU1a9bolVde0dSpUxUSEqLJkydXqKaiJ9BduHBB27dv17///W/NmjVLDz74oK666ioNHjy4XHUDzPEEwO8VDcrL89fNvLw8/fTTT+rSpYtbMyQ9Pb1Mj2T2paIn4pT0VLiSlpVH0ZPt1q9f73Krh2T+4rFhwwaX9UpTVGvR+sWVtKy4kJAQdenSRdOnT9esWbNkGIaWLVtWxgQA4HtFVzZ9+eWX2rdvn3O+p4tvH9uzZ48kqW/fvm5XJ1zuu/JyLvU9vH//fre5+spzjvT0nFyrVi01b95cu3fv1qFDh9xeX7dunaTLn2O87cYbb5SkEm+FK2tNRe/3xU+jlaRTp05d9lY9BL5L/bzExcWpVq1aSk9P1/nz5z3ar8PhUFxcnHO6AklaunRpmY5b1rrbt2+vSZMm6a233nLZf3nqrmg9uPLReALg94rmyjh48KDH28bExCg8PFwZGRnKz893Lv/xxx81fvx4r9Vol0GDBikoKEgvvfSSfvjhB+fy06dP65lnnvHKMRo3bqyePXtqx44dmjdvnstr8+bN044dO3TLLbdccn4nSfrtb38rSXrqqadcLq8+dOhQiX/B37x5c4l/JS76C3FJk1sCgD8bOnSoDMPQ66+/riVLlqh169bq2LGjyzpFV69e3KzYsWOHZs6cWaHjd+3aVc2aNdOyZctc9m8Yhh5//HG3X/rKc44szzl52LBhOn/+vCZPnuzyB47MzEzNnz9fUVFRuuuuu8q8P28oeqDH9OnTnbcDSuYteEXz1hStU5rGjRure/fu+uabb7R48WKX15599tkKz0OFK9+lfl6Cg4OVnJys/fv3a+LEiSU2cTIzM51jpX379mnnzp1u65Q0birPz2lmZqb2799/2f17Wnd560Fg4VY7AH6vdevWatiwod5++21FREQoNjZWDodDycnJJc7/UFxQUJDGjh2rF198Ue3atdOdd96pEydOaOXKlWrSpIkaNmxYSSnKp1WrVnrsscf07LPPKj4+Xvfcc4+Cg4O1ZMkSxcfHKzMz022y8/JISUlR165dNXr0aKWlpalNmzbauXOnli5dqnr16iklJeWy++jRo4dGjBih+fPnKz4+XgMGDNDZs2f1zjvvqEuXLm5XMC1evFhz5sxRjx49dO2116pWrVrauXOnVqxYoejoaD3wwAMVzgUAlal///6qVauWXnjhBZ0/f95tUnHJfBBGp06d9O677+rIkSPq0qWLcnJytHTpUvXt27dCt64EBQXpH//4h/r06aNbb73VedvymjVrdOTIEd1www365ptvXNb39Bx5yy236K9//avGjBmje+65RzVq1FDjxo11//33l1rXpEmTtHz5cr3xxhvKyspSr169dPToUb3zzjs6f/68Fi5c6PLUv8rQvXt3jR8/Xq+88oratm2rX//61zIMQ0uWLNGBAwf0hz/8Qd27d7/sfl599VUlJibqt7/9rT788EO1bNlSmzdv1qZNm9StW7cKX8WGK9vlxrDTp09XRkaGZs2apeXLlyspKUn16tXToUOHtH37dm3btk0bN25UTEyMtm3bpgEDBuimm25S27ZtVb9+fR06dEgffvihqlWr5pzzSZJ69uwph8OhJ554Qrt27VJUVJSioqKUnJxcaq2rV6/WI488osTERLVu3Vp169bV3r17tXTpUoWHh2vcuHHOdT2pWyrf9wYCjAEAV4CvvvrKSEpKMiIjIw1JhiRj3759hmEYxrBhw1z+/WLnzp0znnnmGaNly5ZGWFiY0bhxY+OPf/yjcfLkSaNJkyZGkyZNXNafOnWqIclYu3atc9m+ffsMScawYcNKPIYkIykpyWVZUlKScfHX7Pz58w1Jxvz58932sXbtWkOSMXXqVLfX5syZY8TFxRmhoaFGbGysMXHiROPAgQOGJKN///4l1uTJ/g3DMLKzs40RI0YYDRo0MIKDg40GDRoYI0aMMLKzs93WLe09LygoMGbOnGk0b97cCA0NNZo3b248++yzxu7du93ev6+++soYM2aM0bZtW6N27dpGeHi40bJlS+MPf/iDkZOTU6ZMAOBvRowYYUgyHA5Hid+fhmEYubm5xgMPPGA0bNjQqF69uhEfH2+8+uqrxt69e0s815R0PrnUd/r69euN7t27G+Hh4UadOnWMe+65x9i/f3+J+/H0HGkYhvH8888bLVu2NEJCQtzOf6Vtc+rUKePJJ580rrvuOiM0NNSoXbu2cccddxgbNmxwW7ek83CRS51HS1JS5uLmzZtn3HTTTUZERIQRERFh3HTTTca8efPc1rvUOGD79u1Gnz59jJo1axqRkZHGHXfcYWzfvv2y4xNUDZcawxqGOXaaO3eukZiYaNSqVcv5c9i7d28jJSXFOHXqlGEYhnHgwAHjscceM7p06WLExMQYoaGhRuPGjY2BAwcaX3/9tdtxU1NTjfj4eCMsLMyQVOLPZXE7d+40JkyYYNx4441G3bp1jbCwMKN58+bG8OHDjZ07d7qtX9a6i1zqewOBz2EYF03oAQC4IqxevVq//OUvNWnSJP3lL3/xdTkAAAAA4IY5ngDAzx09etRtXo7jx487n1xS2fNiAAAAAEBZMccTAPi5xYsX669//atuueUWNWzYUEeOHNGqVauUm5ur4cOH6xe/+IWvSwQAAACAEtF4AgA/d/PNN6tDhw5avXq1jh07pmrVqikuLk5PPvmkxo4d6+vyAAAAAKBUzPEEAAAAAAAAWzDHEwAAAAAAAGxB4wkAAAAAAAC2oPEEAAAAAAAAW9B4AgAAAAAAgC1oPAEAAAAAAMAWNJ4AAAAAAABgCxpPAAAAAAAAsAWNJwAAAAAAANji/wF8JRHjdSUtnQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_improper_processing(\"kNN\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Enter sklearn pipelines to do it properly. " ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "# Create a pipeline \n", "pipe_knn = make_pipeline(\n", " SimpleImputer(strategy=\"median\"),\n", " StandardScaler(), \n", " KNeighborsClassifier()\n", ") " ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5245916114790287" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cross_val_score(pipe_knn, X_train_num, y_train).mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- What all things are happening under the hood? \n", "- Why is this a better approach? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", "[Source](https://amueller.github.io/COMS4995-s20/slides/aml-04-preprocessing/#18)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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YRjcWg4ATkDhCQDSISAgQJL0+++/KzIyMlP7HDVqlG7evJkpfSbl9OnTkqTChQsrX758Tj0XADwssvq1AQAAZ6DwBADp0K9fP3l5eUlSpv1le+DAgZKkc+fO6dtvv82UPpNiuWXDw8PDqecBgIdJVr82AADgDBSeACCB3bt3q2jRojKZTCpcuLB27tzp8LigoCC9/vrrkqRFixZp69atGT53+/btVblyZUnSZ599puvXr2e4z/tZ1mSaNm2aJOn48eOJFrBNuF5TUk+1szwZaNiwYXb9Jvxy9NQgAMiKsvu1QZKOHTtm/fyeOnWqJGnu3Llq0qSJAgMD5ePjo3LlymnQoEG6dOlSkv3cv/7flStXNGLECD3xxBPy9/dP1H9CK1euVJcuXVSqVCn5+PgoX758qly5sgYOHKizZ8+mGP+lS5c0aNAglStXTj4+PgoMDFSTJk2s6xmmJLXrMJ0/f17Dhw9XnTp1FBgYKC8vL5UoUUJ16tTR8OHDdfDgQeuxlkXk169fL0lav3693bUyJCQkVfEBQFZG4QkA/t+mTZsUFhamc+fOqWTJktq4caOqVKmS5PGDBw+Wj4+PJGnIkCEZPr/JZNLQoUMlmQe248aNy3CfAICMeVivDT179lSHDh20evVqnT9/Xrdu3dLBgwf12WefqXz58tq3b1+Kffz999+qUqWKhgwZop07d+rKlSt2x9y4cUPPPfecmjVrppkzZ+rYsWO6deuWrl27pt27d2v06NEqW7asFi1alOR59u3bp/Lly+uzzz7TwYMHdevWLZ0/f16rV69Whw4d1LNnzwy9FhYzZ85UqVKlFB4ers2bN+v8+fO6c+eOTp06pc2bNys8PFzNmzfPlHMBQHZC4QkAJC1dulTNmjXT5cuXFRoaqo0bN6pMmTLJtilatKh69eolSVqxYoU2btyY4Tjatm2ratWqSZK++OILXb16NcN9JhQVFaWoqCi1adNGklSsWDHrNstXamKMioqy5p6w34RfxYsXz9TYAeBBe1iuDff79ttvNXnyZNWsWVOzZ89WRESElixZoo4dO0qSzp49q+bNm6cYR/v27XX69Gn17dtXK1euVEREhGbPnq3HHntMknTv3j0988wz+v3332UymdS5c2fNnTtXERER2rJli77++msFBwfr+vXrev7557Vjxw67c1y5ckXNmze3zorq2LGjlixZooiICM2aNUvVq1fX5MmTM3yb4vTp09WlSxfduHFD3t7e6tu3r5YsWaLIyEj98ccfGj9+vJo3b66cOXNa24wcOVJRUVGqXr26JKl69ep218oVK1ZkKC4AyApyuToAAHC1n376SS+//LLu3r2rGjVqaOnSpSpYsGCq2g4aNEiTJk3SjRs3NGTIEK1ZsybD8QwfPlytW7fWxYsXNWbMmEz5i7lFhQoVJEn+/v6SzGs8Wballr+/v/z9/RUYGGjXLwBkFw/TteF+27dvV6tWrTR//nzlymX7daFly5YqX768hgwZolOnTmnEiBEaPXp0kv3s2bNHy5YtU9OmTa3bLAU0SRozZozWrl0rDw8PzZ8/Xy1btkzUvlatWuratavq1aunvXv3qn///tqwYUOiY4YPH65Tp05Jkj755BMNHjw40bnat2+vp59+OkMFnjNnzliLiYGBgVq9erXdda9evXrq06ePNRZJKl68uIoXLy5fX19Jkq+vL9dLAA8lZjwBeKhNmDBBL730ku7evatGjRppzZo1qf7FQpIKFSqkt956S5K0du1arV27NsMxtWrVSrVq1ZIkffXVV8mupQEAyHwP+7XBy8tL3333XaKik8UHH3xgLZ788MMP1odVONK9e/dERaeE7t69qy+//FKS9NZbb9kVnSzy589vLW5t3LhRhw4dsu67ffu2pkyZIkmqVKmS3nvvPbv2Hh4e+uGHHzL0MI1x48YpNjZWkjRp0qRki0dBQUHpPg8AZFcUngA8tEaOHKnevXsrPj5ebdu21ZIlS5QnT5409/Puu+8qb968kqSPPvooU2IbPny4JPMtBJaBOQDA+bg2SM2aNVOxYsUc7suRI4e6desmybygd2RkZJL9vPTSS0nu27Ztm/X2uA4dOiQbT/369a3fb9myxfr9jh07rAW4bt26KUcOx7/aBAUFqVmzZsmeIzmLFy+WJJUqVcp6qzoAIPUoPAF4KL3zzjv68MMPJZn/IvvLL79YH4GdVgULFlT//v0lmRehXb58eYbja9q0qerVqydJ+vrrr3XhwoUM9wkASB7XBrMaNWoku79mzZrW7/fs2ZPkcZUqVUpyX0REhPX7p556yuHTUS1fCQt/586ds36fcF3CtMScFnfv3rXmWK9evURPfwUApA6FJwAPpf/85z+SzGsT/fDDD4kWA02Pd955x7puUmat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Xbu0a9cuTZgwQTNmzFC7du3Snd/27dvVrl076+1tFufPn9fKlSu1cuVKTZw4UQsWLFDhwoWT7WvixInq27ev4uLi0h0PAAAAAKQHhScAWc7t27fVqVMnXb16VXnz5lWvXr3UsGFDBQYG6u7duzp+/Li2bNmiX3/91WH7tWvXqmXLloqLi1POnDnVtWtXtWnTRsHBwbp165b27dunpUuXauHChXZt4+LiVLRoUbVr105PPfWUSpcuLW9vb508eVKbN2/Wt99+q+vXr+vFF19UZGSkQkND05xfVFSUGjZsqBs3bigwMFC9evVSvXr1VLBgQUVHR2vBggWaNGmStm3bpjZt2mjDhg1J3v62fft2zZgxQyVKlNCAAQNUrVo13bt3Txs2bEhVLG3btlX16tUlSRUrVpQk9erVS71797Yekz9//hT7mTJlim7cuKHmzZvrzJkzatOmjT7++ONEx/j6+qYqJgAAAABZB4UnAFnOpk2bdObMGUnSrFmz7GY0Pfnkk+rQoYNGjx6t2NjYRPtu3rypl156SXFxccqdO7cWL15sd4tX7dq19eqrr+rkyZN253711VcVHh5uV+ipWrWq2rRpo759+6pWrVo6ffq0PvnkE/34449pys0wDHXp0kU3btxQ5cqVtWrVKgUEBCQ6plmzZnr66afVunVrbd26VdOnT1fPnj0d9rdv3z5VrFhRf/zxh/z9/a3b69Spk6p4/P39E7WTpMDAQFWoUCFNeZUqVUqSbX0of3//NPcBAAAAIOthjScAWc65c+es39evXz/J43LlyqV8+fIl2jZ9+nSdPXtWkjRy5Mhk1xUqUaKE3baQkJBkF9cOCgrSu+++K0lasGCB3a16KVm8eLF2795tjfX+opNFixYt1L59e0nm2UTJ+eabb+yKRwAAAADwIFB4ApDlFC1a1Pp9SkWX+y1evFiSlDt3br3++usZjuXq1as6evSo9u7dqz179mjPnj3KnTt3on1pMX/+fEnSY489pkqVKiV7rKXotn379iQXGi9RooTq1auXphgAAAAAILNwqx2ALKdu3boqXbq0jhw5ov79+2vmzJlq166dwsLCVL16dXl6eibZ9q+//pIkVa9e3VogSqvjx4/riy++0MKFC61PaUtKTEyMSpcuneq+IyIiJEkHDx5M9ZPn7ty5o4sXL6pQoUJ2+1IqXgEAAACAM1F4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8mQtWrRImzZt0qOPPprieV5//XVNnjxZpUqVUp8+fXTr1i199dVXDn+xOHPmjGrWrKkbN26odevW6tixo65fv66///5b48aN05dffpnq/ADAVerVq6eQkBD9+uuv+uabb+Tt7Z1o/8yZMxUfH6+uXbtat3333XdauHCh6tevr1atWik2Nlbr1q3T4MGDtX37dv3666/pjmf16tVq2bKlcuTIoY4dO6pYsWJavXq16tSpo/z589sdn5ZrZP/+/TV16lTt2rVL/fr1s16HU/qF9vbt22rcuLH+/PNPVa1aVf3791d0dLTmzJmjFStWaM6cOXruuefs2n3zzTdaunSp2rRpowYNGmjZsmUaN26cLly4oJkzZyZ7zipVqig8PFxTp07V8ePHFR4eLinx2OHtt9/WmDFjVLx4cfXs2VMmk0m//vqrunfvrl27dumrr75K9hyStGfPHtWpU0fXr1/Xc889pzJlymjbtm2qU6eOKleunGJ7ZF+pGcPevn1bLVq00Lp16/TEE0+oZ8+eunv3rhYvXqw2bdpo3LhxeuuttyRJhmGoefPm2rp1q+rUqaMWLVooR44cOnbsmH7//Xd169ZNJUqUsP7hdf369erWrZv1/8/7x833i42NVZ06dXTs2DE1a9ZM7dq10507d3TkyBFNnTpVAwcOVL58+dIcd3o/N5DNGADg5tauXWtIMsLDwx3u79atmyHJCAoKMo4fP263/59//jGuXbtmt33atGmGJOPjjz9OtD08PNyQZKxdu9a67ejRo4YkQ5Lx6aefJjr+ww8/NCQZo0aNSrQ9LCzMuP9jdsqUKYYkI1euXMbGjRut2+Pi4owGDRoYkowtW7ZYtx88eNDImTOnERwcbMTExFi3X7t2zShfvrwhyQgLC3P4utwvudexUaNGhiRj0qRJibZPmjTJkGQ0btw40XbLa3706FG7/itXrmxcv37duv3UqVNGQECAIcno1q2bdfvYsWMNScbXX39tF8/58+dTlRMAuIMPPvjAkGT8/PPPdvsqVqxo+Pj4GFevXrVuO3bsmBEXF5fouPj4eOOVV14xJCW6PhiG4+uJo8/0e/fuGaVLlzZMJpOxYcOGRH2/+OKL1utYQmm9Rjr6/E+oZMmSRsmSJRNtGz58uCHJeOmll4z4+Hjr9l27dhleXl5G/vz5E70+luuwn5+fceDAAev22NhY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rkCSFixYkKrzpjbuKlWqaODAgZo9e3ai/tMTd0bjQdZH4QmA27OslXHq1Kk0tw0MDJSPj48iIyMVGxtr3X7p0iX17ds302J0lk6dOilHjhz66quvdOHCBev2GzduaOTIkZlyjuDgYDVs2FB79+7V5MmTE+2bPHmy9u7dq0aNGiW7vpMkvfzyy5Kk4cOHJ5peffr0aYd/wd++fbvDvxJb/kLsaHFLAHBnXbt2lWEY+v777/Xbb7+pXLlyql69eqJjLLNX7y9W7N27V6NGjcrQ+evWratSpUpp0aJFifo3DEPvv/++3S996blGpuea3K1bN929e1eDBw9O9AeOPXv2aMqUKfLz81Pbtm1T3V9msDzQY9iwYdbbASXzLXiWdWssxyQlODhY9evX1+7duzVz5sxE+z755JMMr0OFrC+5/19y5cqlXr166fjx4xowYIDDIs6ePXusY6WjR49q3759dsc4Gjel5//TPXv26Pjx4yn2n9a40xsPshdutQPg9sqVK6dixYrpp59+Uu7cuRUUFCSTyaRevXo5XP8hoRw5cqh379768ssvVblyZT3zzDO6evWqli5dqpIlS6pYsWIPKIv0eeyxxzRo0CB98sknqlixol544QXlypVLv/32mypWrKg9e/bYLXaeHhMmTFDdunX12muvaeHChXr88ce1b98+LViwQIUKFdKECRNS7KNBgwbq0aOHpkyZoooVK6pdu3a6ffu25syZo1q1atnNYJo5c6a+/fZbNWjQQI8++qjy5cunffv2acmSJQoICNArr7yS4bwA4EFq06aN8uXLp9GjR+vu3bt2i4pL5gdh1KxZUz///LPOnj2rWrVq6cSJE1qwYIFat26doVtXcuTIof/+979q1aqVmjRpYr1tec2aNTp79qwqVaqk3bt3Jzo+rdfIRo0a6YsvvtAbb7yhF154Qb6+vgoODtaLL76YZFwDBw7U4sWL9eOPP2r//v1q3Lixzp8/rzlz5uju3buaPn16oqf+PQj169dX3759NW7cOFWoUEHPP/+8DMPQb7/9ppMnT+pf//qX6tevn2I/33zzjerUqaOXX35Z8+bNU5kyZbR9+3Zt27ZN9erVy/AsNmRtKY1hhw0bpsjISI0dO1aLFy9WWFiYChUqpNOnTysqKkq7du3Sli1bFBgYqF27dqldu3aqUaOGKlSooCJFiuj06dOa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06BBg9SoUSNVqFBBDoejWGNIS0tzPbnOacKECa5tZ67XVNRT7ZKTk+VwOLRr1y5J0owZM9z6cDgcSk5OLtaYAAAAgEBgjScAgMvKlSvVo0cPj8LSr7/+ql9//VVZWVn68MMPFRMTox49eni0X7x4sfr16+fxhLb9+/dr//79Wr16tV566SVZluX2+jPPPKMJEyZ49Pf7779r/fr1Wr9+vVJTUzVr1iz17t27xPnWrFmj3r17u25vczpw4IAWLVqkRYsW6Z133tHcuXN16aWXnrWvd955RyNHjtSpU6dKPB4AAAAg1FF4AgBIkk6cOKG77rpLR44cUZUqVTRs2DB17txZsbGxys/P165du7Rq1Sp9+umnXtsvW7ZMt9xyi06dOqVy5cppwIAB6tmzp+rXr68///xTmzZt0oIFC5Senu7R9tSpU6pdu7Z69+6tv/zlL2rcuLEiIyO1e/duffvtt5oyZYqOHj2qu+++W5mZmYqLi/M534YNG9S5c2cdO3ZMsbGxGjZsmDp27KgaNWooJydHc+fO1dSpU7V69Wr17NlTK1euLPL2tzVr1mjWrFmqV6+exowZo2uuuUanT5/WypUrizWWXr16qU2bNpKk+Ph4SdKwYcM0fPhw1z6XXHLJOfuZPn26jh07pptvvln79u1Tz5499eyzz7rtU6lSpWKNCQAAAAgECk8AAEnSN998o3379kmS3n//fY8rmtq1a6c777xTL7/8svLy8txeO378uO655x6dOnVKFStWVEZGhsctXtddd52GDh2q3bt3exx76NChSklJ8Sj0JCQkqGfPnho5cqTat2+vvXv36vnnn9d7773nUzbLstS/f38dO3ZMrVu31uLFixUTE+O2z0033aQePXqoe/fu+v777zVz5kwNGTLEa3+bNm1SfHy8VqxYoWrVqrm2JyYmFms81apVc2snSbGxsWrZsqVPuRo1aiTJrA9VrVo1n/sAAAAAAok1ngAAkqT/+7//c/13p06ditwvPDxcVatWdds2c+ZM7d+/X5L03HPPnXVdoXr16nlsa9iw4VkX165bt64ee+wxSdLcuXM9btU7l4yMDP3000+usZ5ZdHLq2rWr+vTpI8m+muhs3n77bY/iEQAAAAB3FJ4AAJKk2rVru/77XEWXM2VkZEiSKlasqAceeOC8x3LkyBHt2LFDGzduVFZWlrKyslSx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caOmTZumefPm6ZtvvtHll19+zuM88MADmjZtmho1aqSHHnpIf/75p1577TWvv1js27dPbdu21bFjx9S9e3f17dtXR48e1c8//6zJkyfr1VdfLXY+ACgtHTt2VMOGDfXpp5/q7bffVmRkpNvrs2fPVkFBgQYMGODa9t///d9KT09Xp06d1K1bN+Xl5emrr77SuHHjtGbNGn366aclHs+SJUt0yy23KCwsTH379lWdOnW0ZMkSJSYm6pJLLvHY35dz5OjRo5WWlqb169dr1KhRrvPwuX6hPXHihLp06aLvvvtOCQkJGj16tHJycvTRRx/pP//5jz766CPddtttHu3efvttLViwQD179lRycrIWLlyoyZMn67ffftPs2bPPesyrrrpKKSkpSktL065du5SSkiLJfe7wyCOP6PXXX9dll12mIUOGyOFw6NNPP9WgQYO0fv16vfbaa2c9hiRlZWUpMTFRR48e1W233aamTZtq9erVSkxMVOvWrc/ZHqGrOHPYEydOqGvXrvrqq6909dVXa8iQIcrPz1dGRoZ69uypyZMna8SIEZIky7J088036/vvv1diYqK6du2qsLAw7dy5U5999pkGDhyoevXquf7wunz5cg0cOND183nmvPlMeXl5SkxM1M6dO3XTTTepd+/eOnnypLZv3660tDSNHTtWVatW9XncJf3eQIixACDILVu2zJJkpaSkeH194MCBliSrbt261q5duzxe//XXX60//vjDY/uMGTMsSdazzz7rtj0lJcWSZC1btsy1bceOHZYkS5L1wgsvuO3/1FNPWZKsSZMmuW1PSkqyzvyanT59uiXJCg8Pt77++mvX9lOnTlnJycmWJGvVqlWu7Vu3brXKlStn1a9f38rNzXVt/+OPP6wrr7zSkmQlJSV5fV/OdLb38frrr7ckWVOnTnXbPnXqVEuS1aVLF7ftzvd8x44dHv23bt3aOnr0qGv7nj17rJiYGEuSNXDgQNf2N99805JkvfHGGx7jOXDgQLEyAUAwePLJJy1J1scff+zxWnx8vBUVFWUdOXLEtW3nzp3WqVOn3PYrKCiw7rvvPkuS2/nBsryfT7x9p58+fdpq3Lix5XA4rJUrV7r1fffdd7vOY4X5eo709v1fWIMGDawGDRq4bXvmmWcsSdY999xjFRQUuLavX7/eqlChgnXJJZe4vT/O83B0dLS1ZcsW1/a8vDyrWbNmlsPhsPbu3ev1+Gfy9t5ZlmWtWLHCkmTFxcVZhw8fdm0/fPiw1aJFC0uS23vonAcUPo8V7n/WrFlu28eNG+d6v4t6rxD6zjWHfeKJJyxJ1vjx491+No4cOWK1adPGKl++vOuz/tNPP1mSrN69e3v08+eff7r9HHuby57L3LlzLUnWI4884vHakSNHrBMnTpRo3JZ17u8NhD5utQMQMh577DGv6yrFxsaqcuXKHtsHDBigqlWravHixcU+RqNGjfTYY4+5bXPeXrFmzZpi93P33XcrMTHR9e9y5cpp4MCBHv188MEHOn36tB599FHVqFHDtb1y5cp66qmnin28s9m9e7eWLl2qK664Qvfff7/ba/fff7/i4uK0ZMmSc95yN3PmTEn2FVqVKlVybb/ssss0atSoIttFRUV5bAu2xXIB4GycVzPNmjXLbfv69eu1YcMG9ezZU1WqVHFtb9CggcqVK+e2r8Ph0EMPPSRJPp2XCvv666+1fft29ejRQx06dHDr+/nnn/c4puTfc2RR0tLSFBERoRdeeMHtFvRWrVpp0KBBOnTokL744guPdqNGjVLz5s1d/46KilK/fv1kWZbWrVt33mOS7NuhCl/1HB0d7bo6qvDt6N5kZ2dr+fLlatWqle655x6315544olzXmGCi1tBQYFSU1N1+eWX6+mnn3b72ahSpYqefvppnTx5UnPmzHFr523eVKFCBa8/xyXhrf8qVaqofPny5zVuXNy41Q5AyGjbtm2Rr82ZM0dTp05VZmamDh06pNOnT7tecy48WhytW7dWWJh7zb5u3bqSpMOHDxe7n4SEBI9t3vpxrh113XXXeezvbVtJ/PDDD5KkpKQkjzWpHA6HOnXqpM2bN2v9+vWqV69ekf04x9qxY0eP17xt69Gjhx5//HE99NBDWrRokbp27aoOHTqoWbNm5xMHAC645s2bq02bNlqwYIEOHjyo6tWrS5Lee+89SXK7zU6y10Z566239OGHH2rLli06evSoLMtyve7Leamws30PN2jQQPXq1fP6OHN/nSO9OXLkiLZv3664uDjXea6w5ORkTZ06VT/++KP69+/v9lpxz5Ul4Tz3eVtnxrntxx9/PGsfzve7cJHPqXLlyrrqqquC5nH2CD5bt27VoUOHVKdOHdeaTIUdOHBAklxLK8TFxSk+Pl7vv/++du/erV69eqljx45KSEjwWlT2VadOnVSrVi1NmjRJP/74o7p3764OHTooPj7ebX7o67gBicITgBBS1PpKr776qsaMGaOaNWvqpptuUt26dV1/zXn99dd14sSJYh/D21pQ4eH2V2nhibq/+nEu5FizZk2P/Yu7ntS5OI9RVH/OJwH9/vvvZ+3n999/V1hYmNerlbz13ahRI61atUoTJkzQggUL9Mknn0iyf4GbOHGi7rjjDp9yAEBpGjBggNauXauPP/5Yf/vb31RQUKAPPvhAsbGxuummm9z27dOnj9LT09WsWTP17dtXsbGxioiI0OHDh/XGG2/4dF4qzPk9HRsb6/X1Sy+91KPw5M9zpDfnc47x1zm3qHGFhYUVeX4NCwsr1nlPOvv7DRTl4MGDkuzF6Tdu3FjkfseOHZNkf/aXLl2q8ePHa86cOa4HscTExGjkyJF68sknz6sAFR0drVWrViklJUXp6emaP3++JLvYO27cOA0fPrxE4wYkCk8AQsiZV+tI0qlTpzRx4kTVqVNHP/74o9sE07IsvfTSSxdyiD5zLuJ44MABNWjQwO21X3/91a/HKKo/53bnfkWJjo5WQUGBcnNzPSbyRfXdqlUrffrpp8rPz9e6deu0YMECvfnmm64FcQvfjggAweyuu+7So48+qlmzZulvf/ubli5dqn379mnUqFGuYolk306dnp6um2++WRkZGW6/KH733Xd64403SjwGZ6HG2xNbJc/v4gtxjvTXOcbfqlatqoKCAh04cMCjcJSTk6OCgoJinfec+3vjr/M0QpPz83X77bfr3//+d7HaxMTE6K233tLkyZO1ZcsWLV26VJMnT1ZKSooiIiI0bty48xqT8wl0p0+f1oYNG/Sf//xHb775ph566CFdcskl6tevX4nGDbDGE4Cg55yUl+Svm7m5ufr999/Vvn17j2LI2rVri/VI5tLkfCKOt6fCedtWEs4n261YscLtVg/J/sVj5cqVbvsVxTlW5/6FedtWWEREhNq3b68JEybozTfflGVZmjdvXjETAEDpc17Z9O2332rHjh2u9Z7OvH1s27ZtkqTu3bt7XJ1wru/Kcznb9/CuXbs81uoryTnS13Ny1apV1bhxY/3yyy/au3evx+vLly+XdO5zjL9dffXVkuT1Vrjijsn5fp/5NFpJOnr06Dlv1UPoO9vPS1xcnKpWraq1a9cqPz/fp34dDofi4uJcyxVI0ty5c4t13OKO+6qrrtLYsWP1wQcfuPVfknGf73hQ9lF4AhD0nGtl7Nmzx+e2sbGxioqKUmZmpvLy8lzbDx06pJEjR/ptjIFy1113KSwsTK+99pp+++031/Zjx47pueee88sx6tevr86dO2vjxo2aNm2a22vTpk3Txo0bdf311591fSdJuvfeeyVJzzzzjNvl1Xv37vX6F/w1a9Z4/Sux8y/E3ha3BIBgNmDAAFmWpXfffVdz5sxRixYt1KZNG7d9nFevnlms2LhxoyZNmnRex+/QoYMaNWqkefPmufVvWZaeeOIJj1/6SnKOLMk5eeDAgcrPz9e4cePc/sCRlZWl6dOnKzo6Wr169Sp2f/7gfKDHhAkTXLcDSvYteM51a5z7FKV+/frq1KmTfvrpJ82ePdvtteeff/6816FC2Xe2n5fw8HANGzZMu3bt0pgxY7wWcbKyslxzpR07dmjTpk0e+3ibN5Xk5zQrK0u7du06Z/++jruk40Fo4VY7AEGvRYsWqlOnjj788ENVrFhRdevWlcPh0LBhw7yu/1BYWFiYhg8frldffVWtW7fWrbfeqiNHjmjBggVq0KCB6tSpc4FSlEzz5s31+OOP6/nnn1d8fLzuuOMOhYeHa86cOYqPj1dWVpbHYuclkZqaqg4dOuj+++9Xenq6rrjiCm3atElz585VzZo1lZqaes4+kpOTNXjwYE2fPl3x8fHq3bu3Tpw4oY8++kjt27f3uIJp9uzZmjJlipKTk3X55ZeratWq2rRpk+bPn6+YmBjdd999550LAC6knj17qmrVqnr55ZeVn5/vsai4ZD8Io23btvr444+1f/9+tW/fXtnZ2Zo7d666d+9+XreuhIWF6V//+pe6deumG264wXXb8tKlS7V//361atVKP/30k9v+vp4jr7/+er3yyit68MEHdccdd6hSpUqqX7++7r777iLHNXbsWGVkZOi9997T5s2b1aVLFx04cEAfffSR8vPzNXPmTLen/l0InTp10siRIzV58mS1bNlSt99+uyzL0pw5c7R79249/PDD6tSp0zn7efvtt5WYmKh7771Xn3/+uZo2bao1a9Zo9erV6tix43lfxYay7Vxz2AkTJigzM1NvvvmmMjIylJSUpJo1a2rv3r3asGGD1q9fr1WrVik2Nlbr169X7969de2116ply5aqVauW9u7dq88//1zlypVzrfkkSZ07d5bD4dCTTz6pLVu2KDo6WtHR0Ro2bFiRY128eLEeffRRJSYmqkWLFqpRo4a2b9+uuXPnKioqSiNGjHDt68u4pZJ9byDEWABQBnz33XdWUlKSVaVKFUuSJcnasWOHZVmWNXDgQLd/n+nkyZPWc889ZzVt2tSqUKGCVb9+fevvf/+79ccff1gNGjSwGjRo4LZ/SkqKJclatmyZa9uOHTssSdbAgQO9HkOSlZSU5LYtKSnJOvNrdvr06ZYka/r06R59LFu2zJJkpaSkeLw2ZcoUKy4uzipfvrxVt25da8yYMdbu3bstSVbPnj29jsmX/i3Lsnbu3GkNHjzYql27thUeHm7Vrl3bGjx4sLVz506PfYt6z0+dOmVNmjTJaty4sVW+fHmrcePG1vPPP2/98ssvHu/fd999Zz344INWy5YtrWrVqllRUVFW06ZNrYcfftjKzs4uViYACDaDBw+2JFkOh8Pr96dlWVZOTo513333WXXq1LEiIyOt+Ph46+2337a2b9/u9Vzj7Xxytu/0FStWWJ06dbKioqKs6tWrW3fccYe1a9cur/34eo60LMt66aWXrKZNm1oREREe57+i2hw9etT6xz/+YTVr1swqX768Va1aNeuWW26xVq5c6bGvt/Ow09nOo954y1zYtGnTrGuvvdaqWLGiVbFiRevaa6+1pk2b5rHf2eYBGzZssLp162ZVrlzZqlKlinXLLbdYGzZsOOf8BBeHs81hLcueO02dOtVKTEy0qlat6vo57Nq1q5WammodPXrUsizL2r17t/X4449b7du3t2JjY63y5ctb9evXt/r06WN9//33HsdNS0uz4uPjrQoVKliSvP5cFrZp0yZr1KhR1tVXX23VqFHDqlChgtW4cWNr0KBB1qZNmzz2L+64nc72vYHQ57CsMxb0AACUCYsXL9aNN96osWPH6sUXXyzt4QAAAACAB9Z4AoAgd+DAAY91OQ4fPux6csmFXhcDAAAAAIqLNZ4AIMjNnj1br7zyiq6//nrVqVNH+/fv18KFC5WTk6NBgwbpL3/5S2kPEQAAAAC8ovAEAEHuuuuu0zXXXKPFixfr4MGDKleunOLi4vSPf/xDw4cPL+3hAQAAAECRWOMJAAAAAAAAAcEaTwAAAAAAAAgICk8AAAAAAAAICApPAAAAAAAACAgKTwAAAAAAAAgICk8AAAAAAAAICApPAAAAAAAACAgKTwAAAAAAAAgICk8AAAAAAAAIiP8HzJboKseVYesAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_proper_processing(\"kNN\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "



" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Categorical features\n", "\n", "Let's assess the scores using categorical features." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "food_type\n", "Other 189\n", "Canadian/American 131\n", "Chinese 102\n", "Indian 36\n", "Italian 32\n", "Fusion 21\n", "Thai 20\n", "Mexican 17\n", "Quebecois 1\n", "Name: count, dtype: int64" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train['food_type'].value_counts()" ] }, { "cell_type": "code", "execution_count": 34, "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", "
north_americafood_type
80NoChinese
934YesCanadian/American
911NoCanadian/American
459YesQuebecois
62YesIndian
.........
106NoChinese
333NoOther
393YesCanadian/American
376YesNaN
525Don't want to shareChinese
\n", "

753 rows × 2 columns

\n", "
" ], "text/plain": [ " north_america food_type\n", "80 No Chinese\n", "934 Yes Canadian/American\n", "911 No Canadian/American\n", "459 Yes Quebecois\n", "62 Yes Indian\n", ".. ... ...\n", "106 No Chinese\n", "333 No Other\n", "393 Yes Canadian/American\n", "376 Yes NaN\n", "525 Don't want to share Chinese\n", "\n", "[753 rows x 2 columns]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train[categorical_feats]" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "north_america\n", "Yes 415\n", "No 330\n", "Don't want to share 8\n", "Name: count, dtype: int64" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train['north_america'].value_counts()" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "food_type\n", "Other 189\n", "Canadian/American 131\n", "Chinese 102\n", "Indian 36\n", "Italian 32\n", "Fusion 21\n", "Thai 20\n", "Mexican 17\n", "Quebecois 1\n", "Name: count, dtype: int64" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train['food_type'].value_counts()" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "X_train_cat = X_train[categorical_feats]\n", "X_test_cat = X_test[categorical_feats]" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "# One-hot encoding of categorical features \n", "from sklearn.preprocessing import OneHotEncoder\n", "# Define and fit OneHotEncoder\n", "ohe = OneHotEncoder(sparse_output=False)\n", "ohe.fit(X_train_cat)\n", "X_train_cat_ohe = ohe.transform(X_train_cat) # transform the train set\n", "X_test_cat_ohe = ohe.transform(X_test_cat) # transform the test set" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 1., 0., ..., 0., 0., 0.],\n", " [0., 0., 1., ..., 0., 0., 0.],\n", " [0., 1., 0., ..., 0., 0., 0.],\n", " ...,\n", " [0., 0., 1., ..., 0., 0., 0.],\n", " [0., 0., 1., ..., 0., 0., 1.],\n", " [1., 0., 0., ..., 0., 0., 0.]])" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train_cat_ohe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- It's a sparse matrix. \n", "- Why? What would happen if we pass `sparse_output=False`? Why we might want to do that? " ] }, { "cell_type": "code", "execution_count": 40, "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", " \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", " \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", "
north_america_Don't want to sharenorth_america_Nonorth_america_Yesfood_type_Canadian/Americanfood_type_Chinesefood_type_Fusionfood_type_Indianfood_type_Italianfood_type_Mexicanfood_type_Otherfood_type_Quebecoisfood_type_Thaifood_type_nan
00.01.00.00.01.00.00.00.00.00.00.00.00.0
10.00.01.01.00.00.00.00.00.00.00.00.00.0
20.01.00.01.00.00.00.00.00.00.00.00.00.0
30.00.01.00.00.00.00.00.00.00.01.00.00.0
40.00.01.00.00.00.01.00.00.00.00.00.00.0
..........................................
7480.01.00.00.01.00.00.00.00.00.00.00.00.0
7490.01.00.00.00.00.00.00.00.01.00.00.00.0
7500.00.01.01.00.00.00.00.00.00.00.00.00.0
7510.00.01.00.00.00.00.00.00.00.00.00.01.0
7521.00.00.00.01.00.00.00.00.00.00.00.00.0
\n", "

753 rows × 13 columns

\n", "
" ], "text/plain": [ " north_america_Don't want to share north_america_No north_america_Yes \\\n", "0 0.0 1.0 0.0 \n", "1 0.0 0.0 1.0 \n", "2 0.0 1.0 0.0 \n", "3 0.0 0.0 1.0 \n", "4 0.0 0.0 1.0 \n", ".. ... ... ... \n", "748 0.0 1.0 0.0 \n", "749 0.0 1.0 0.0 \n", "750 0.0 0.0 1.0 \n", "751 0.0 0.0 1.0 \n", "752 1.0 0.0 0.0 \n", "\n", " food_type_Canadian/American food_type_Chinese food_type_Fusion \\\n", "0 0.0 1.0 0.0 \n", "1 1.0 0.0 0.0 \n", "2 1.0 0.0 0.0 \n", "3 0.0 0.0 0.0 \n", "4 0.0 0.0 0.0 \n", ".. ... ... ... \n", "748 0.0 1.0 0.0 \n", "749 0.0 0.0 0.0 \n", "750 1.0 0.0 0.0 \n", "751 0.0 0.0 0.0 \n", "752 0.0 1.0 0.0 \n", "\n", " food_type_Indian food_type_Italian food_type_Mexican food_type_Other \\\n", "0 0.0 0.0 0.0 0.0 \n", "1 0.0 0.0 0.0 0.0 \n", "2 0.0 0.0 0.0 0.0 \n", "3 0.0 0.0 0.0 0.0 \n", "4 1.0 0.0 0.0 0.0 \n", ".. ... ... ... ... \n", "748 0.0 0.0 0.0 0.0 \n", "749 0.0 0.0 0.0 1.0 \n", "750 0.0 0.0 0.0 0.0 \n", "751 0.0 0.0 0.0 0.0 \n", "752 0.0 0.0 0.0 0.0 \n", "\n", " food_type_Quebecois food_type_Thai food_type_nan \n", "0 0.0 0.0 0.0 \n", "1 0.0 0.0 0.0 \n", "2 0.0 0.0 0.0 \n", "3 1.0 0.0 0.0 \n", "4 0.0 0.0 0.0 \n", ".. ... ... ... \n", "748 0.0 0.0 0.0 \n", "749 0.0 0.0 0.0 \n", "750 0.0 0.0 0.0 \n", "751 0.0 0.0 1.0 \n", "752 0.0 0.0 0.0 \n", "\n", "[753 rows x 13 columns]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the OHE feature names \n", "ohe_feats = ohe.get_feature_names_out().tolist()\n", "ohe_feats\n", "pd.DataFrame(X_train_cat_ohe, columns = ohe_feats)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.53642384, 0.53642384, 0.50993377, 0.51333333, 0.47333333])" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cross_val_score(knn, X_train_cat_ohe, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- What's wrong here? \n", "- How can we fix this? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Are we breaking the golden rule here? Let's do this properly with a pipeline. " ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "# Code to create a pipeline for OHE and KNN\n", "pipe_ohe_knn = make_pipeline(\n", " OneHotEncoder(sparse_output=False, handle_unknown=\"ignore\"),\n", " KNeighborsClassifier()\n", ")" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.53642384, 0.53642384, 0.50993377, 0.51333333, 0.47333333])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cross_val_score(pipe_ohe_knn, X_train_cat, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ordinal features\n", "\n", "Let's assess the scores using categorical features." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "noise_level\n", "medium 232\n", "low 186\n", "high 75\n", "no music 37\n", "crazy loud 18\n", "Name: count, dtype: int64" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train['noise_level'].value_counts()" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import OrdinalEncoder\n", "noise_ordering = ['no music', 'low', 'medium', 'high', 'crazy loud']\n", "\n", "ordinal_transformer = make_pipeline(SimpleImputer(strategy=\"most_frequent\"), \n", " OrdinalEncoder(categories=[noise_ordering]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "



" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Right now we are working with numeric and categorical features separately. But ideally when we create a model, we need to use all these features together. \n", "\n", "**Enter column transformer!**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How can we horizontally stack \n", "- preprocessed numeric features, \n", "- preprocessed binary features, \n", "- preprocessed ordinal features, and \n", "- preprocessed categorical features?\n", "\n", "Let's define a column transformer. " ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "from sklearn.compose import make_column_transformer\n", "\n", "numeric_transformer = make_pipeline(SimpleImputer(strategy=\"median\"),\n", " StandardScaler()) \n", "binary_transformer = make_pipeline(SimpleImputer(strategy=\"most_frequent\"), \n", " OneHotEncoder(drop=\"if_binary\"))\n", "ordinal_transformer = make_pipeline(SimpleImputer(strategy=\"most_frequent\"), \n", " OrdinalEncoder(categories=[noise_ordering]))\n", "categorical_transformer = make_pipeline(SimpleImputer(strategy=\"most_frequent\"), \n", " OneHotEncoder(sparse_output=False, handle_unknown=\"ignore\"))\n", "\n", "preprocessor = make_column_transformer(\n", " (numeric_transformer, numeric_feats), \n", " (binary_transformer, binary_feats), \n", " (ordinal_transformer, ordinal_feats),\n", " (categorical_transformer, categorical_feats),\n", " (\"drop\", drop_feats)\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How does the transformed data look like? " ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['north_america', 'food_type']" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "categorical_feats" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[\"north_america_Don't want to share\",\n", " 'north_america_No',\n", " 'north_america_Yes',\n", " 'food_type_Canadian/American',\n", " 'food_type_Chinese',\n", " 'food_type_Fusion',\n", " 'food_type_Indian',\n", " 'food_type_Italian',\n", " 'food_type_Mexican',\n", " 'food_type_Other',\n", " 'food_type_Quebecois',\n", " 'food_type_Thai']" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ohe_feat_names" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(753, 17)" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transformed = preprocessor.fit_transform(X_train)\n", "transformed.shape" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
ColumnTransformer(transformers=[('pipeline-1',\n",
       "                                 Pipeline(steps=[('simpleimputer',\n",
       "                                                  SimpleImputer(strategy='median')),\n",
       "                                                 ('standardscaler',\n",
       "                                                  StandardScaler())]),\n",
       "                                 ['age', 'n_people', 'price']),\n",
       "                                ('pipeline-2',\n",
       "                                 Pipeline(steps=[('simpleimputer',\n",
       "                                                  SimpleImputer(strategy='most_frequent')),\n",
       "                                                 ('onehotencoder',\n",
       "                                                  OneHotEncoder(drop='if_binary'))]),\n",
       "                                 ['good_server']),\n",
       "                                ('pipeline-3',...\n",
       "                                                  OrdinalEncoder(categories=[['no '\n",
       "                                                                              'music',\n",
       "                                                                              'low',\n",
       "                                                                              'medium',\n",
       "                                                                              'high',\n",
       "                                                                              'crazy '\n",
       "                                                                              'loud']]))]),\n",
       "                                 ['noise_level']),\n",
       "                                ('pipeline-4',\n",
       "                                 Pipeline(steps=[('simpleimputer',\n",
       "                                                  SimpleImputer(strategy='most_frequent')),\n",
       "                                                 ('onehotencoder',\n",
       "                                                  OneHotEncoder(handle_unknown='ignore',\n",
       "                                                                sparse_output=False))]),\n",
       "                                 ['north_america', 'food_type']),\n",
       "                                ('drop', 'drop',\n",
       "                                 ['comments', 'restaurant_name',\n",
       "                                  'eat_out_freq'])])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "ColumnTransformer(transformers=[('pipeline-1',\n", " Pipeline(steps=[('simpleimputer',\n", " SimpleImputer(strategy='median')),\n", " ('standardscaler',\n", " StandardScaler())]),\n", " ['age', 'n_people', 'price']),\n", " ('pipeline-2',\n", " Pipeline(steps=[('simpleimputer',\n", " SimpleImputer(strategy='most_frequent')),\n", " ('onehotencoder',\n", " OneHotEncoder(drop='if_binary'))]),\n", " ['good_server']),\n", " ('pipeline-3',...\n", " OrdinalEncoder(categories=[['no '\n", " 'music',\n", " 'low',\n", " 'medium',\n", " 'high',\n", " 'crazy '\n", " 'loud']]))]),\n", " ['noise_level']),\n", " ('pipeline-4',\n", " Pipeline(steps=[('simpleimputer',\n", " SimpleImputer(strategy='most_frequent')),\n", " ('onehotencoder',\n", " OneHotEncoder(handle_unknown='ignore',\n", " sparse_output=False))]),\n", " ['north_america', 'food_type']),\n", " ('drop', 'drop',\n", " ['comments', 'restaurant_name',\n", " 'eat_out_freq'])])" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "preprocessor" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[\"north_america_Don't want to share\",\n", " 'north_america_No',\n", " 'north_america_Yes',\n", " 'food_type_Canadian/American',\n", " 'food_type_Chinese',\n", " 'food_type_Fusion',\n", " 'food_type_Indian',\n", " 'food_type_Italian',\n", " 'food_type_Mexican',\n", " 'food_type_Other',\n", " 'food_type_Quebecois',\n", " 'food_type_Thai']" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Getting feature names from a column transformer\n", "ohe_feat_names = preprocessor.named_transformers_['pipeline-4']['onehotencoder'].get_feature_names_out(categorical_feats).tolist()\n", "ohe_feat_names" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['age', 'n_people', 'price']" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numeric_feats" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [], "source": [ "feat_names = numeric_feats + binary_feats + ordinal_feats + ohe_feat_names" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.66941678, 0.31029469, -0.36840629, ..., 0. ,\n", " 0. , 0. ],\n", " [-0.66941678, 0.31029469, -0.05422496, ..., 0. ,\n", " 0. , 0. ],\n", " [-0.89515383, 0.82336432, -0.25058829, ..., 0. ,\n", " 0. , 0. ],\n", " ...,\n", " [-0.89515383, -0.97237936, -0.64331495, ..., 0. ,\n", " 0. , 0. ],\n", " [-0.89515383, -0.20277493, -0.25058829, ..., 1. ,\n", " 0. , 0. ],\n", " [-0.89515383, 1.33643394, -0.05422496, ..., 0. ,\n", " 0. , 0. ]])" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transformed" ] }, { "cell_type": "code", "execution_count": 81, "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", " \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", " \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", " \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", "
agen_peoplepricegood_servernoise_levelnorth_america_Don't want to sharenorth_america_Nonorth_america_Yesfood_type_Canadian/Americanfood_type_Chinesefood_type_Fusionfood_type_Indianfood_type_Italianfood_type_Mexicanfood_type_Otherfood_type_Quebecoisfood_type_Thai
0-0.6694170.310295-0.3684060.03.00.01.00.00.01.00.00.00.00.00.00.00.0
1-0.6694170.310295-0.0542251.01.00.00.01.01.00.00.00.00.00.00.00.00.0
2-0.8951540.823364-0.2505881.02.00.01.00.01.00.00.00.00.00.00.00.00.0
3-0.669417-0.202775-0.2505881.02.00.00.01.00.00.00.00.00.00.00.01.00.0
40.007794-0.202775-0.0542251.03.00.00.01.00.00.00.01.00.00.00.00.00.0
......................................................
7480.685006-0.715845-0.6433151.02.00.01.00.00.01.00.00.00.00.00.00.00.0
7490.007794-0.613231-0.9182241.02.00.01.00.00.00.00.00.00.00.01.00.00.0
750-0.895154-0.972379-0.6433150.01.00.00.01.01.00.00.00.00.00.00.00.00.0
751-0.895154-0.202775-0.2505881.02.00.00.01.00.00.00.00.00.00.01.00.00.0
752-0.8951541.336434-0.0542251.03.01.00.00.00.01.00.00.00.00.00.00.00.0
\n", "

753 rows × 17 columns

\n", "
" ], "text/plain": [ " age n_people price good_server noise_level \\\n", "0 -0.669417 0.310295 -0.368406 0.0 3.0 \n", "1 -0.669417 0.310295 -0.054225 1.0 1.0 \n", "2 -0.895154 0.823364 -0.250588 1.0 2.0 \n", "3 -0.669417 -0.202775 -0.250588 1.0 2.0 \n", "4 0.007794 -0.202775 -0.054225 1.0 3.0 \n", ".. ... ... ... ... ... \n", "748 0.685006 -0.715845 -0.643315 1.0 2.0 \n", "749 0.007794 -0.613231 -0.918224 1.0 2.0 \n", "750 -0.895154 -0.972379 -0.643315 0.0 1.0 \n", "751 -0.895154 -0.202775 -0.250588 1.0 2.0 \n", "752 -0.895154 1.336434 -0.054225 1.0 3.0 \n", "\n", " north_america_Don't want to share north_america_No north_america_Yes \\\n", "0 0.0 1.0 0.0 \n", "1 0.0 0.0 1.0 \n", "2 0.0 1.0 0.0 \n", "3 0.0 0.0 1.0 \n", "4 0.0 0.0 1.0 \n", ".. ... ... ... \n", "748 0.0 1.0 0.0 \n", "749 0.0 1.0 0.0 \n", "750 0.0 0.0 1.0 \n", "751 0.0 0.0 1.0 \n", "752 1.0 0.0 0.0 \n", "\n", " food_type_Canadian/American food_type_Chinese food_type_Fusion \\\n", "0 0.0 1.0 0.0 \n", "1 1.0 0.0 0.0 \n", "2 1.0 0.0 0.0 \n", "3 0.0 0.0 0.0 \n", "4 0.0 0.0 0.0 \n", ".. ... ... ... \n", "748 0.0 1.0 0.0 \n", "749 0.0 0.0 0.0 \n", "750 1.0 0.0 0.0 \n", "751 0.0 0.0 0.0 \n", "752 0.0 1.0 0.0 \n", "\n", " food_type_Indian food_type_Italian food_type_Mexican food_type_Other \\\n", "0 0.0 0.0 0.0 0.0 \n", "1 0.0 0.0 0.0 0.0 \n", "2 0.0 0.0 0.0 0.0 \n", "3 0.0 0.0 0.0 0.0 \n", "4 1.0 0.0 0.0 0.0 \n", ".. ... ... ... ... \n", "748 0.0 0.0 0.0 0.0 \n", "749 0.0 0.0 0.0 1.0 \n", "750 0.0 0.0 0.0 0.0 \n", "751 0.0 0.0 0.0 1.0 \n", "752 0.0 0.0 0.0 0.0 \n", "\n", " food_type_Quebecois food_type_Thai \n", "0 0.0 0.0 \n", "1 0.0 0.0 \n", "2 0.0 0.0 \n", "3 1.0 0.0 \n", "4 0.0 0.0 \n", ".. ... ... \n", "748 0.0 0.0 \n", "749 0.0 0.0 \n", "750 0.0 0.0 \n", "751 0.0 0.0 \n", "752 0.0 0.0 \n", "\n", "[753 rows x 17 columns]" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(transformed, columns = feat_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have new columns for the categorical features. Let's create a pipeline with the preprocessor and SVC. " ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.686569536423841" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "svc_all_pipe = make_pipeline(preprocessor, SVC())\n", "cross_val_score(svc_all_pipe, X_train, y_train).mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are getting better results! \n", "


" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "571", "language": "python", "name": "571" }, "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.10.0" } }, "nbformat": 4, "nbformat_minor": 4 }