{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction To The Data Set" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "\n", "pd.options.display.max_columns = 99" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "cols = ['symboling', 'normalized-losses', 'make', 'fuel-type', 'aspiration', 'num-of-doors', 'body-style', \n", " 'drive-wheels', 'engine-location', 'wheel-base', 'length', 'width', 'height', 'curb-weight', 'engine-type', \n", " 'num-of-cylinders', 'engine-size', 'fuel-system', 'bore', 'stroke', 'compression-rate', 'horsepower', 'peak-rpm', 'city-mpg', 'highway-mpg', 'price']\n", "cars = pd.read_csv('imports-85.data', names=cols)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolingnormalized-lossesmakefuel-typeaspirationnum-of-doorsbody-styledrive-wheelsengine-locationwheel-baselengthwidthheightcurb-weightengine-typenum-of-cylindersengine-sizefuel-systemborestrokecompression-ratehorsepowerpeak-rpmcity-mpghighway-mpgprice
03?alfa-romerogasstdtwoconvertiblerwdfront88.6168.864.148.82548dohcfour130mpfi3.472.689.001115000212713495
13?alfa-romerogasstdtwoconvertiblerwdfront88.6168.864.148.82548dohcfour130mpfi3.472.689.001115000212716500
21?alfa-romerogasstdtwohatchbackrwdfront94.5171.265.552.42823ohcvsix152mpfi2.683.479.001545000192616500
32164audigasstdfoursedanfwdfront99.8176.666.254.32337ohcfour109mpfi3.193.4010.001025500243013950
42164audigasstdfoursedan4wdfront99.4176.666.454.32824ohcfive136mpfi3.193.408.001155500182217450
52?audigasstdtwosedanfwdfront99.8177.366.353.12507ohcfive136mpfi3.193.408.501105500192515250
61158audigasstdfoursedanfwdfront105.8192.771.455.72844ohcfive136mpfi3.193.408.501105500192517710
71?audigasstdfourwagonfwdfront105.8192.771.455.72954ohcfive136mpfi3.193.408.501105500192518920
81158audigasturbofoursedanfwdfront105.8192.771.455.93086ohcfive131mpfi3.133.408.301405500172023875
90?audigasturbotwohatchback4wdfront99.5178.267.952.03053ohcfive131mpfi3.133.407.0016055001622?
102192bmwgasstdtwosedanrwdfront101.2176.864.854.32395ohcfour108mpfi3.502.808.801015800232916430
110192bmwgasstdfoursedanrwdfront101.2176.864.854.32395ohcfour108mpfi3.502.808.801015800232916925
120188bmwgasstdtwosedanrwdfront101.2176.864.854.32710ohcsix164mpfi3.313.199.001214250212820970
130188bmwgasstdfoursedanrwdfront101.2176.864.854.32765ohcsix164mpfi3.313.199.001214250212821105
141?bmwgasstdfoursedanrwdfront103.5189.066.955.73055ohcsix164mpfi3.313.199.001214250202524565
150?bmwgasstdfoursedanrwdfront103.5189.066.955.73230ohcsix209mpfi3.623.398.001825400162230760
160?bmwgasstdtwosedanrwdfront103.5193.867.953.73380ohcsix209mpfi3.623.398.001825400162241315
170?bmwgasstdfoursedanrwdfront110.0197.070.956.33505ohcsix209mpfi3.623.398.001825400152036880
182121chevroletgasstdtwohatchbackfwdfront88.4141.160.353.21488lthree612bbl2.913.039.5048510047535151
19198chevroletgasstdtwohatchbackfwdfront94.5155.963.652.01874ohcfour902bbl3.033.119.6070540038436295
20081chevroletgasstdfoursedanfwdfront94.5158.863.652.01909ohcfour902bbl3.033.119.6070540038436575
211118dodgegasstdtwohatchbackfwdfront93.7157.363.850.81876ohcfour902bbl2.973.239.4168550037415572
221118dodgegasstdtwohatchbackfwdfront93.7157.363.850.81876ohcfour902bbl2.973.239.4068550031386377
231118dodgegasturbotwohatchbackfwdfront93.7157.363.850.82128ohcfour98mpfi3.033.397.60102550024307957
241148dodgegasstdfourhatchbackfwdfront93.7157.363.850.61967ohcfour902bbl2.973.239.4068550031386229
251148dodgegasstdfoursedanfwdfront93.7157.363.850.61989ohcfour902bbl2.973.239.4068550031386692
261148dodgegasstdfoursedanfwdfront93.7157.363.850.61989ohcfour902bbl2.973.239.4068550031387609
271148dodgegasturbo?sedanfwdfront93.7157.363.850.62191ohcfour98mpfi3.033.397.60102550024308558
28-1110dodgegasstdfourwagonfwdfront103.3174.664.659.82535ohcfour1222bbl3.343.468.5088500024308921
293145dodgegasturbotwohatchbackfwdfront95.9173.266.350.22811ohcfour156mfi3.603.907.001455000192412964
.................................................................................
175-165toyotagasstdfourhatchbackfwdfront102.4175.666.553.92414ohcfour122mpfi3.313.548.7092420027329988
176-165toyotagasstdfoursedanfwdfront102.4175.666.554.92414ohcfour122mpfi3.313.548.70924200273210898
177-165toyotagasstdfourhatchbackfwdfront102.4175.666.553.92458ohcfour122mpfi3.313.548.70924200273211248
1783197toyotagasstdtwohatchbackrwdfront102.9183.567.752.02976dohcsix171mpfi3.273.359.301615200202416558
1793197toyotagasstdtwohatchbackrwdfront102.9183.567.752.03016dohcsix171mpfi3.273.359.301615200192415998
180-190toyotagasstdfoursedanrwdfront104.5187.866.554.13131dohcsix171mpfi3.273.359.201565200202415690
181-1?toyotagasstdfourwagonrwdfront104.5187.866.554.13151dohcsix161mpfi3.273.359.201565200192415750
1822122volkswagendieselstdtwosedanfwdfront97.3171.765.555.72261ohcfour97idi3.013.4023.0052480037467775
1832122volkswagengasstdtwosedanfwdfront97.3171.765.555.72209ohcfour109mpfi3.193.409.0085525027347975
184294volkswagendieselstdfoursedanfwdfront97.3171.765.555.72264ohcfour97idi3.013.4023.0052480037467995
185294volkswagengasstdfoursedanfwdfront97.3171.765.555.72212ohcfour109mpfi3.193.409.0085525027348195
186294volkswagengasstdfoursedanfwdfront97.3171.765.555.72275ohcfour109mpfi3.193.409.0085525027348495
187294volkswagendieselturbofoursedanfwdfront97.3171.765.555.72319ohcfour97idi3.013.4023.0068450037429495
188294volkswagengasstdfoursedanfwdfront97.3171.765.555.72300ohcfour109mpfi3.193.4010.00100550026329995
1893?volkswagengasstdtwoconvertiblefwdfront94.5159.364.255.62254ohcfour109mpfi3.193.408.50905500242911595
1903256volkswagengasstdtwohatchbackfwdfront94.5165.764.051.42221ohcfour109mpfi3.193.408.5090550024299980
1910?volkswagengasstdfoursedanfwdfront100.4180.266.955.12661ohcfive136mpfi3.193.408.501105500192413295
1920?volkswagendieselturbofoursedanfwdfront100.4180.266.955.12579ohcfour97idi3.013.4023.00684500333813845
1930?volkswagengasstdfourwagonfwdfront100.4183.166.955.12563ohcfour109mpfi3.193.409.00885500253112290
194-2103volvogasstdfoursedanrwdfront104.3188.867.256.22912ohcfour141mpfi3.783.159.501145400232812940
195-174volvogasstdfourwagonrwdfront104.3188.867.257.53034ohcfour141mpfi3.783.159.501145400232813415
196-2103volvogasstdfoursedanrwdfront104.3188.867.256.22935ohcfour141mpfi3.783.159.501145400242815985
197-174volvogasstdfourwagonrwdfront104.3188.867.257.53042ohcfour141mpfi3.783.159.501145400242816515
198-2103volvogasturbofoursedanrwdfront104.3188.867.256.23045ohcfour130mpfi3.623.157.501625100172218420
199-174volvogasturbofourwagonrwdfront104.3188.867.257.53157ohcfour130mpfi3.623.157.501625100172218950
200-195volvogasstdfoursedanrwdfront109.1188.868.955.52952ohcfour141mpfi3.783.159.501145400232816845
201-195volvogasturbofoursedanrwdfront109.1188.868.855.53049ohcfour141mpfi3.783.158.701605300192519045
202-195volvogasstdfoursedanrwdfront109.1188.868.955.53012ohcvsix173mpfi3.582.878.801345500182321485
203-195volvodieselturbofoursedanrwdfront109.1188.868.955.53217ohcsix145idi3.013.4023.001064800262722470
204-195volvogasturbofoursedanrwdfront109.1188.868.955.53062ohcfour141mpfi3.783.159.501145400192522625
\n", "

205 rows × 26 columns

\n", "
" ], "text/plain": [ " symboling normalized-losses make fuel-type aspiration \\\n", "0 3 ? alfa-romero gas std \n", "1 3 ? alfa-romero gas std \n", "2 1 ? alfa-romero gas std \n", "3 2 164 audi gas std \n", "4 2 164 audi gas std \n", "5 2 ? audi gas std \n", "6 1 158 audi gas std \n", "7 1 ? audi gas std \n", "8 1 158 audi gas turbo \n", "9 0 ? audi gas turbo \n", "10 2 192 bmw gas std \n", "11 0 192 bmw gas std \n", "12 0 188 bmw gas std \n", "13 0 188 bmw gas std \n", "14 1 ? bmw gas std \n", "15 0 ? bmw gas std \n", "16 0 ? bmw gas std \n", "17 0 ? bmw gas std \n", "18 2 121 chevrolet gas std \n", "19 1 98 chevrolet gas std \n", "20 0 81 chevrolet gas std \n", "21 1 118 dodge gas std \n", "22 1 118 dodge gas std \n", "23 1 118 dodge gas turbo \n", "24 1 148 dodge gas std \n", "25 1 148 dodge gas std \n", "26 1 148 dodge gas std \n", "27 1 148 dodge gas turbo \n", "28 -1 110 dodge gas std \n", "29 3 145 dodge gas turbo \n", ".. ... ... ... ... ... \n", "175 -1 65 toyota gas std \n", "176 -1 65 toyota gas std \n", "177 -1 65 toyota gas std \n", "178 3 197 toyota gas std \n", "179 3 197 toyota gas std \n", "180 -1 90 toyota gas std \n", "181 -1 ? toyota gas std \n", "182 2 122 volkswagen diesel std \n", "183 2 122 volkswagen gas std \n", "184 2 94 volkswagen diesel std \n", "185 2 94 volkswagen gas std \n", "186 2 94 volkswagen gas std \n", "187 2 94 volkswagen diesel turbo \n", "188 2 94 volkswagen gas std \n", "189 3 ? volkswagen gas std \n", "190 3 256 volkswagen gas std \n", "191 0 ? volkswagen gas std \n", "192 0 ? volkswagen diesel turbo \n", "193 0 ? volkswagen gas std \n", "194 -2 103 volvo gas std \n", "195 -1 74 volvo gas std \n", "196 -2 103 volvo gas std \n", "197 -1 74 volvo gas std \n", "198 -2 103 volvo gas turbo \n", "199 -1 74 volvo gas turbo \n", "200 -1 95 volvo gas std \n", "201 -1 95 volvo gas turbo \n", "202 -1 95 volvo gas std \n", "203 -1 95 volvo diesel turbo \n", "204 -1 95 volvo gas turbo \n", "\n", " num-of-doors body-style drive-wheels engine-location wheel-base \\\n", "0 two convertible rwd front 88.6 \n", "1 two convertible rwd front 88.6 \n", "2 two hatchback rwd front 94.5 \n", "3 four sedan fwd front 99.8 \n", "4 four sedan 4wd front 99.4 \n", "5 two sedan fwd front 99.8 \n", "6 four sedan fwd front 105.8 \n", "7 four wagon fwd front 105.8 \n", "8 four sedan fwd front 105.8 \n", "9 two hatchback 4wd front 99.5 \n", "10 two sedan rwd front 101.2 \n", "11 four sedan rwd front 101.2 \n", "12 two sedan rwd front 101.2 \n", "13 four sedan rwd front 101.2 \n", "14 four sedan rwd front 103.5 \n", "15 four sedan rwd front 103.5 \n", "16 two sedan rwd front 103.5 \n", "17 four sedan rwd front 110.0 \n", "18 two hatchback fwd front 88.4 \n", "19 two hatchback fwd front 94.5 \n", "20 four sedan fwd front 94.5 \n", "21 two hatchback fwd front 93.7 \n", "22 two hatchback fwd front 93.7 \n", "23 two hatchback fwd front 93.7 \n", "24 four hatchback fwd front 93.7 \n", "25 four sedan fwd front 93.7 \n", "26 four sedan fwd front 93.7 \n", "27 ? sedan fwd front 93.7 \n", "28 four wagon fwd front 103.3 \n", "29 two hatchback fwd front 95.9 \n", ".. ... ... ... ... ... \n", "175 four hatchback fwd front 102.4 \n", "176 four sedan fwd front 102.4 \n", "177 four hatchback fwd front 102.4 \n", "178 two hatchback rwd front 102.9 \n", "179 two hatchback rwd front 102.9 \n", "180 four sedan rwd front 104.5 \n", "181 four wagon rwd front 104.5 \n", "182 two sedan fwd front 97.3 \n", "183 two sedan fwd front 97.3 \n", "184 four sedan fwd front 97.3 \n", "185 four sedan fwd front 97.3 \n", "186 four sedan fwd front 97.3 \n", "187 four sedan fwd front 97.3 \n", "188 four sedan fwd front 97.3 \n", "189 two convertible fwd front 94.5 \n", "190 two hatchback fwd front 94.5 \n", "191 four sedan fwd front 100.4 \n", "192 four sedan fwd front 100.4 \n", "193 four wagon fwd front 100.4 \n", "194 four sedan rwd front 104.3 \n", "195 four wagon rwd front 104.3 \n", "196 four sedan rwd front 104.3 \n", "197 four wagon rwd front 104.3 \n", "198 four sedan rwd front 104.3 \n", "199 four wagon rwd front 104.3 \n", "200 four sedan rwd front 109.1 \n", "201 four sedan rwd front 109.1 \n", "202 four sedan rwd front 109.1 \n", "203 four sedan rwd front 109.1 \n", "204 four sedan rwd front 109.1 \n", "\n", " length width height curb-weight engine-type num-of-cylinders \\\n", "0 168.8 64.1 48.8 2548 dohc four \n", "1 168.8 64.1 48.8 2548 dohc four \n", "2 171.2 65.5 52.4 2823 ohcv six \n", "3 176.6 66.2 54.3 2337 ohc four \n", "4 176.6 66.4 54.3 2824 ohc five \n", "5 177.3 66.3 53.1 2507 ohc five \n", "6 192.7 71.4 55.7 2844 ohc five \n", "7 192.7 71.4 55.7 2954 ohc five \n", "8 192.7 71.4 55.9 3086 ohc five \n", "9 178.2 67.9 52.0 3053 ohc five \n", "10 176.8 64.8 54.3 2395 ohc four \n", "11 176.8 64.8 54.3 2395 ohc four \n", "12 176.8 64.8 54.3 2710 ohc six \n", "13 176.8 64.8 54.3 2765 ohc six \n", "14 189.0 66.9 55.7 3055 ohc six \n", "15 189.0 66.9 55.7 3230 ohc six \n", "16 193.8 67.9 53.7 3380 ohc six \n", "17 197.0 70.9 56.3 3505 ohc six \n", "18 141.1 60.3 53.2 1488 l three \n", "19 155.9 63.6 52.0 1874 ohc four \n", "20 158.8 63.6 52.0 1909 ohc four \n", "21 157.3 63.8 50.8 1876 ohc four \n", "22 157.3 63.8 50.8 1876 ohc four \n", "23 157.3 63.8 50.8 2128 ohc four \n", "24 157.3 63.8 50.6 1967 ohc four \n", "25 157.3 63.8 50.6 1989 ohc four \n", "26 157.3 63.8 50.6 1989 ohc four \n", "27 157.3 63.8 50.6 2191 ohc four \n", "28 174.6 64.6 59.8 2535 ohc four \n", "29 173.2 66.3 50.2 2811 ohc four \n", ".. ... ... ... ... ... ... \n", "175 175.6 66.5 53.9 2414 ohc four \n", "176 175.6 66.5 54.9 2414 ohc four \n", "177 175.6 66.5 53.9 2458 ohc four \n", "178 183.5 67.7 52.0 2976 dohc six \n", "179 183.5 67.7 52.0 3016 dohc six \n", "180 187.8 66.5 54.1 3131 dohc six \n", "181 187.8 66.5 54.1 3151 dohc six \n", "182 171.7 65.5 55.7 2261 ohc four \n", "183 171.7 65.5 55.7 2209 ohc four \n", "184 171.7 65.5 55.7 2264 ohc four \n", "185 171.7 65.5 55.7 2212 ohc four \n", "186 171.7 65.5 55.7 2275 ohc four \n", "187 171.7 65.5 55.7 2319 ohc four \n", "188 171.7 65.5 55.7 2300 ohc four \n", "189 159.3 64.2 55.6 2254 ohc four \n", "190 165.7 64.0 51.4 2221 ohc four \n", "191 180.2 66.9 55.1 2661 ohc five \n", "192 180.2 66.9 55.1 2579 ohc four \n", "193 183.1 66.9 55.1 2563 ohc four \n", "194 188.8 67.2 56.2 2912 ohc four \n", "195 188.8 67.2 57.5 3034 ohc four \n", "196 188.8 67.2 56.2 2935 ohc four \n", "197 188.8 67.2 57.5 3042 ohc four \n", "198 188.8 67.2 56.2 3045 ohc four \n", "199 188.8 67.2 57.5 3157 ohc four \n", "200 188.8 68.9 55.5 2952 ohc four \n", "201 188.8 68.8 55.5 3049 ohc four \n", "202 188.8 68.9 55.5 3012 ohcv six \n", "203 188.8 68.9 55.5 3217 ohc six \n", "204 188.8 68.9 55.5 3062 ohc four \n", "\n", " engine-size fuel-system bore stroke compression-rate horsepower \\\n", "0 130 mpfi 3.47 2.68 9.00 111 \n", "1 130 mpfi 3.47 2.68 9.00 111 \n", "2 152 mpfi 2.68 3.47 9.00 154 \n", "3 109 mpfi 3.19 3.40 10.00 102 \n", "4 136 mpfi 3.19 3.40 8.00 115 \n", "5 136 mpfi 3.19 3.40 8.50 110 \n", "6 136 mpfi 3.19 3.40 8.50 110 \n", "7 136 mpfi 3.19 3.40 8.50 110 \n", "8 131 mpfi 3.13 3.40 8.30 140 \n", "9 131 mpfi 3.13 3.40 7.00 160 \n", "10 108 mpfi 3.50 2.80 8.80 101 \n", "11 108 mpfi 3.50 2.80 8.80 101 \n", "12 164 mpfi 3.31 3.19 9.00 121 \n", "13 164 mpfi 3.31 3.19 9.00 121 \n", "14 164 mpfi 3.31 3.19 9.00 121 \n", "15 209 mpfi 3.62 3.39 8.00 182 \n", "16 209 mpfi 3.62 3.39 8.00 182 \n", "17 209 mpfi 3.62 3.39 8.00 182 \n", "18 61 2bbl 2.91 3.03 9.50 48 \n", "19 90 2bbl 3.03 3.11 9.60 70 \n", "20 90 2bbl 3.03 3.11 9.60 70 \n", "21 90 2bbl 2.97 3.23 9.41 68 \n", "22 90 2bbl 2.97 3.23 9.40 68 \n", "23 98 mpfi 3.03 3.39 7.60 102 \n", "24 90 2bbl 2.97 3.23 9.40 68 \n", "25 90 2bbl 2.97 3.23 9.40 68 \n", "26 90 2bbl 2.97 3.23 9.40 68 \n", "27 98 mpfi 3.03 3.39 7.60 102 \n", "28 122 2bbl 3.34 3.46 8.50 88 \n", "29 156 mfi 3.60 3.90 7.00 145 \n", ".. ... ... ... ... ... ... \n", "175 122 mpfi 3.31 3.54 8.70 92 \n", "176 122 mpfi 3.31 3.54 8.70 92 \n", "177 122 mpfi 3.31 3.54 8.70 92 \n", "178 171 mpfi 3.27 3.35 9.30 161 \n", "179 171 mpfi 3.27 3.35 9.30 161 \n", "180 171 mpfi 3.27 3.35 9.20 156 \n", "181 161 mpfi 3.27 3.35 9.20 156 \n", "182 97 idi 3.01 3.40 23.00 52 \n", "183 109 mpfi 3.19 3.40 9.00 85 \n", "184 97 idi 3.01 3.40 23.00 52 \n", "185 109 mpfi 3.19 3.40 9.00 85 \n", "186 109 mpfi 3.19 3.40 9.00 85 \n", "187 97 idi 3.01 3.40 23.00 68 \n", "188 109 mpfi 3.19 3.40 10.00 100 \n", "189 109 mpfi 3.19 3.40 8.50 90 \n", "190 109 mpfi 3.19 3.40 8.50 90 \n", "191 136 mpfi 3.19 3.40 8.50 110 \n", "192 97 idi 3.01 3.40 23.00 68 \n", "193 109 mpfi 3.19 3.40 9.00 88 \n", "194 141 mpfi 3.78 3.15 9.50 114 \n", "195 141 mpfi 3.78 3.15 9.50 114 \n", "196 141 mpfi 3.78 3.15 9.50 114 \n", "197 141 mpfi 3.78 3.15 9.50 114 \n", "198 130 mpfi 3.62 3.15 7.50 162 \n", "199 130 mpfi 3.62 3.15 7.50 162 \n", "200 141 mpfi 3.78 3.15 9.50 114 \n", "201 141 mpfi 3.78 3.15 8.70 160 \n", "202 173 mpfi 3.58 2.87 8.80 134 \n", "203 145 idi 3.01 3.40 23.00 106 \n", "204 141 mpfi 3.78 3.15 9.50 114 \n", "\n", " peak-rpm city-mpg highway-mpg price \n", "0 5000 21 27 13495 \n", "1 5000 21 27 16500 \n", "2 5000 19 26 16500 \n", "3 5500 24 30 13950 \n", "4 5500 18 22 17450 \n", "5 5500 19 25 15250 \n", "6 5500 19 25 17710 \n", "7 5500 19 25 18920 \n", "8 5500 17 20 23875 \n", "9 5500 16 22 ? \n", "10 5800 23 29 16430 \n", "11 5800 23 29 16925 \n", "12 4250 21 28 20970 \n", "13 4250 21 28 21105 \n", "14 4250 20 25 24565 \n", "15 5400 16 22 30760 \n", "16 5400 16 22 41315 \n", "17 5400 15 20 36880 \n", "18 5100 47 53 5151 \n", "19 5400 38 43 6295 \n", "20 5400 38 43 6575 \n", "21 5500 37 41 5572 \n", "22 5500 31 38 6377 \n", "23 5500 24 30 7957 \n", "24 5500 31 38 6229 \n", "25 5500 31 38 6692 \n", "26 5500 31 38 7609 \n", "27 5500 24 30 8558 \n", "28 5000 24 30 8921 \n", "29 5000 19 24 12964 \n", ".. ... ... ... ... \n", "175 4200 27 32 9988 \n", "176 4200 27 32 10898 \n", "177 4200 27 32 11248 \n", "178 5200 20 24 16558 \n", "179 5200 19 24 15998 \n", "180 5200 20 24 15690 \n", "181 5200 19 24 15750 \n", "182 4800 37 46 7775 \n", "183 5250 27 34 7975 \n", "184 4800 37 46 7995 \n", "185 5250 27 34 8195 \n", "186 5250 27 34 8495 \n", "187 4500 37 42 9495 \n", "188 5500 26 32 9995 \n", "189 5500 24 29 11595 \n", "190 5500 24 29 9980 \n", "191 5500 19 24 13295 \n", "192 4500 33 38 13845 \n", "193 5500 25 31 12290 \n", "194 5400 23 28 12940 \n", "195 5400 23 28 13415 \n", "196 5400 24 28 15985 \n", "197 5400 24 28 16515 \n", "198 5100 17 22 18420 \n", "199 5100 17 22 18950 \n", "200 5400 23 28 16845 \n", "201 5300 19 25 19045 \n", "202 5500 18 23 21485 \n", "203 4800 26 27 22470 \n", "204 5400 19 25 22625 \n", "\n", "[205 rows x 26 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cars" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "# Select only the columns with continuous values from - https://archive.ics.uci.edu/ml/machine-learning-databases/autos/imports-85.names\n", "continuous_values_cols = ['normalized-losses', 'wheel-base', 'length', 'width', 'height', 'curb-weight', 'bore', 'stroke', 'compression-rate', 'horsepower', 'peak-rpm', 'city-mpg', 'highway-mpg', 'price']\n", "numeric_cars = cars[continuous_values_cols]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
normalized-losseswheel-baselengthwidthheightcurb-weightborestrokecompression-ratehorsepowerpeak-rpmcity-mpghighway-mpgprice
0?88.6168.864.148.825483.472.689.01115000212713495
1?88.6168.864.148.825483.472.689.01115000212716500
2?94.5171.265.552.428232.683.479.01545000192616500
316499.8176.666.254.323373.193.4010.01025500243013950
416499.4176.666.454.328243.193.408.01155500182217450
\n", "
" ], "text/plain": [ " normalized-losses wheel-base length width height curb-weight bore \\\n", "0 ? 88.6 168.8 64.1 48.8 2548 3.47 \n", "1 ? 88.6 168.8 64.1 48.8 2548 3.47 \n", "2 ? 94.5 171.2 65.5 52.4 2823 2.68 \n", "3 164 99.8 176.6 66.2 54.3 2337 3.19 \n", "4 164 99.4 176.6 66.4 54.3 2824 3.19 \n", "\n", " stroke compression-rate horsepower peak-rpm city-mpg highway-mpg price \n", "0 2.68 9.0 111 5000 21 27 13495 \n", "1 2.68 9.0 111 5000 21 27 16500 \n", "2 3.47 9.0 154 5000 19 26 16500 \n", "3 3.40 10.0 102 5500 24 30 13950 \n", "4 3.40 8.0 115 5500 18 22 17450 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numeric_cars.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Cleaning" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
normalized-losseswheel-baselengthwidthheightcurb-weightborestrokecompression-ratehorsepowerpeak-rpmcity-mpghighway-mpgprice
0NaN88.6168.864.148.825483.472.689.001115000212713495
1NaN88.6168.864.148.825483.472.689.001115000212716500
2NaN94.5171.265.552.428232.683.479.001545000192616500
316499.8176.666.254.323373.193.4010.001025500243013950
416499.4176.666.454.328243.193.408.001155500182217450
5NaN99.8177.366.353.125073.193.408.501105500192515250
6158105.8192.771.455.728443.193.408.501105500192517710
7NaN105.8192.771.455.729543.193.408.501105500192518920
8158105.8192.771.455.930863.133.408.301405500172023875
9NaN99.5178.267.952.030533.133.407.0016055001622NaN
10192101.2176.864.854.323953.502.808.801015800232916430
11192101.2176.864.854.323953.502.808.801015800232916925
12188101.2176.864.854.327103.313.199.001214250212820970
13188101.2176.864.854.327653.313.199.001214250212821105
14NaN103.5189.066.955.730553.313.199.001214250202524565
15NaN103.5189.066.955.732303.623.398.001825400162230760
16NaN103.5193.867.953.733803.623.398.001825400162241315
17NaN110.0197.070.956.335053.623.398.001825400152036880
1812188.4141.160.353.214882.913.039.5048510047535151
199894.5155.963.652.018743.033.119.6070540038436295
208194.5158.863.652.019093.033.119.6070540038436575
2111893.7157.363.850.818762.973.239.4168550037415572
2211893.7157.363.850.818762.973.239.4068550031386377
2311893.7157.363.850.821283.033.397.60102550024307957
2414893.7157.363.850.619672.973.239.4068550031386229
2514893.7157.363.850.619892.973.239.4068550031386692
2614893.7157.363.850.619892.973.239.4068550031387609
2714893.7157.363.850.621913.033.397.60102550024308558
28110103.3174.664.659.825353.343.468.5088500024308921
2914595.9173.266.350.228113.603.907.001455000192412964
.............................................
17565102.4175.666.553.924143.313.548.7092420027329988
17665102.4175.666.554.924143.313.548.70924200273210898
17765102.4175.666.553.924583.313.548.70924200273211248
178197102.9183.567.752.029763.273.359.301615200202416558
179197102.9183.567.752.030163.273.359.301615200192415998
18090104.5187.866.554.131313.273.359.201565200202415690
181NaN104.5187.866.554.131513.273.359.201565200192415750
18212297.3171.765.555.722613.013.4023.0052480037467775
18312297.3171.765.555.722093.193.409.0085525027347975
1849497.3171.765.555.722643.013.4023.0052480037467995
1859497.3171.765.555.722123.193.409.0085525027348195
1869497.3171.765.555.722753.193.409.0085525027348495
1879497.3171.765.555.723193.013.4023.0068450037429495
1889497.3171.765.555.723003.193.4010.00100550026329995
189NaN94.5159.364.255.622543.193.408.50905500242911595
19025694.5165.764.051.422213.193.408.5090550024299980
191NaN100.4180.266.955.126613.193.408.501105500192413295
192NaN100.4180.266.955.125793.013.4023.00684500333813845
193NaN100.4183.166.955.125633.193.409.00885500253112290
194103104.3188.867.256.229123.783.159.501145400232812940
19574104.3188.867.257.530343.783.159.501145400232813415
196103104.3188.867.256.229353.783.159.501145400242815985
19774104.3188.867.257.530423.783.159.501145400242816515
198103104.3188.867.256.230453.623.157.501625100172218420
19974104.3188.867.257.531573.623.157.501625100172218950
20095109.1188.868.955.529523.783.159.501145400232816845
20195109.1188.868.855.530493.783.158.701605300192519045
20295109.1188.868.955.530123.582.878.801345500182321485
20395109.1188.868.955.532173.013.4023.001064800262722470
20495109.1188.868.955.530623.783.159.501145400192522625
\n", "

205 rows × 14 columns

\n", "
" ], "text/plain": [ " normalized-losses wheel-base length width height curb-weight bore \\\n", "0 NaN 88.6 168.8 64.1 48.8 2548 3.47 \n", "1 NaN 88.6 168.8 64.1 48.8 2548 3.47 \n", "2 NaN 94.5 171.2 65.5 52.4 2823 2.68 \n", "3 164 99.8 176.6 66.2 54.3 2337 3.19 \n", "4 164 99.4 176.6 66.4 54.3 2824 3.19 \n", "5 NaN 99.8 177.3 66.3 53.1 2507 3.19 \n", "6 158 105.8 192.7 71.4 55.7 2844 3.19 \n", "7 NaN 105.8 192.7 71.4 55.7 2954 3.19 \n", "8 158 105.8 192.7 71.4 55.9 3086 3.13 \n", "9 NaN 99.5 178.2 67.9 52.0 3053 3.13 \n", "10 192 101.2 176.8 64.8 54.3 2395 3.50 \n", "11 192 101.2 176.8 64.8 54.3 2395 3.50 \n", "12 188 101.2 176.8 64.8 54.3 2710 3.31 \n", "13 188 101.2 176.8 64.8 54.3 2765 3.31 \n", "14 NaN 103.5 189.0 66.9 55.7 3055 3.31 \n", "15 NaN 103.5 189.0 66.9 55.7 3230 3.62 \n", "16 NaN 103.5 193.8 67.9 53.7 3380 3.62 \n", "17 NaN 110.0 197.0 70.9 56.3 3505 3.62 \n", "18 121 88.4 141.1 60.3 53.2 1488 2.91 \n", "19 98 94.5 155.9 63.6 52.0 1874 3.03 \n", "20 81 94.5 158.8 63.6 52.0 1909 3.03 \n", "21 118 93.7 157.3 63.8 50.8 1876 2.97 \n", "22 118 93.7 157.3 63.8 50.8 1876 2.97 \n", "23 118 93.7 157.3 63.8 50.8 2128 3.03 \n", "24 148 93.7 157.3 63.8 50.6 1967 2.97 \n", "25 148 93.7 157.3 63.8 50.6 1989 2.97 \n", "26 148 93.7 157.3 63.8 50.6 1989 2.97 \n", "27 148 93.7 157.3 63.8 50.6 2191 3.03 \n", "28 110 103.3 174.6 64.6 59.8 2535 3.34 \n", "29 145 95.9 173.2 66.3 50.2 2811 3.60 \n", ".. ... ... ... ... ... ... ... \n", "175 65 102.4 175.6 66.5 53.9 2414 3.31 \n", "176 65 102.4 175.6 66.5 54.9 2414 3.31 \n", "177 65 102.4 175.6 66.5 53.9 2458 3.31 \n", "178 197 102.9 183.5 67.7 52.0 2976 3.27 \n", "179 197 102.9 183.5 67.7 52.0 3016 3.27 \n", "180 90 104.5 187.8 66.5 54.1 3131 3.27 \n", "181 NaN 104.5 187.8 66.5 54.1 3151 3.27 \n", "182 122 97.3 171.7 65.5 55.7 2261 3.01 \n", "183 122 97.3 171.7 65.5 55.7 2209 3.19 \n", "184 94 97.3 171.7 65.5 55.7 2264 3.01 \n", "185 94 97.3 171.7 65.5 55.7 2212 3.19 \n", "186 94 97.3 171.7 65.5 55.7 2275 3.19 \n", "187 94 97.3 171.7 65.5 55.7 2319 3.01 \n", "188 94 97.3 171.7 65.5 55.7 2300 3.19 \n", "189 NaN 94.5 159.3 64.2 55.6 2254 3.19 \n", "190 256 94.5 165.7 64.0 51.4 2221 3.19 \n", "191 NaN 100.4 180.2 66.9 55.1 2661 3.19 \n", "192 NaN 100.4 180.2 66.9 55.1 2579 3.01 \n", "193 NaN 100.4 183.1 66.9 55.1 2563 3.19 \n", "194 103 104.3 188.8 67.2 56.2 2912 3.78 \n", "195 74 104.3 188.8 67.2 57.5 3034 3.78 \n", "196 103 104.3 188.8 67.2 56.2 2935 3.78 \n", "197 74 104.3 188.8 67.2 57.5 3042 3.78 \n", "198 103 104.3 188.8 67.2 56.2 3045 3.62 \n", "199 74 104.3 188.8 67.2 57.5 3157 3.62 \n", "200 95 109.1 188.8 68.9 55.5 2952 3.78 \n", "201 95 109.1 188.8 68.8 55.5 3049 3.78 \n", "202 95 109.1 188.8 68.9 55.5 3012 3.58 \n", "203 95 109.1 188.8 68.9 55.5 3217 3.01 \n", "204 95 109.1 188.8 68.9 55.5 3062 3.78 \n", "\n", " stroke compression-rate horsepower peak-rpm city-mpg highway-mpg price \n", "0 2.68 9.00 111 5000 21 27 13495 \n", "1 2.68 9.00 111 5000 21 27 16500 \n", "2 3.47 9.00 154 5000 19 26 16500 \n", "3 3.40 10.00 102 5500 24 30 13950 \n", "4 3.40 8.00 115 5500 18 22 17450 \n", "5 3.40 8.50 110 5500 19 25 15250 \n", "6 3.40 8.50 110 5500 19 25 17710 \n", "7 3.40 8.50 110 5500 19 25 18920 \n", "8 3.40 8.30 140 5500 17 20 23875 \n", "9 3.40 7.00 160 5500 16 22 NaN \n", "10 2.80 8.80 101 5800 23 29 16430 \n", "11 2.80 8.80 101 5800 23 29 16925 \n", "12 3.19 9.00 121 4250 21 28 20970 \n", "13 3.19 9.00 121 4250 21 28 21105 \n", "14 3.19 9.00 121 4250 20 25 24565 \n", "15 3.39 8.00 182 5400 16 22 30760 \n", "16 3.39 8.00 182 5400 16 22 41315 \n", "17 3.39 8.00 182 5400 15 20 36880 \n", "18 3.03 9.50 48 5100 47 53 5151 \n", "19 3.11 9.60 70 5400 38 43 6295 \n", "20 3.11 9.60 70 5400 38 43 6575 \n", "21 3.23 9.41 68 5500 37 41 5572 \n", "22 3.23 9.40 68 5500 31 38 6377 \n", "23 3.39 7.60 102 5500 24 30 7957 \n", "24 3.23 9.40 68 5500 31 38 6229 \n", "25 3.23 9.40 68 5500 31 38 6692 \n", "26 3.23 9.40 68 5500 31 38 7609 \n", "27 3.39 7.60 102 5500 24 30 8558 \n", "28 3.46 8.50 88 5000 24 30 8921 \n", "29 3.90 7.00 145 5000 19 24 12964 \n", ".. ... ... ... ... ... ... ... \n", "175 3.54 8.70 92 4200 27 32 9988 \n", "176 3.54 8.70 92 4200 27 32 10898 \n", "177 3.54 8.70 92 4200 27 32 11248 \n", "178 3.35 9.30 161 5200 20 24 16558 \n", "179 3.35 9.30 161 5200 19 24 15998 \n", "180 3.35 9.20 156 5200 20 24 15690 \n", "181 3.35 9.20 156 5200 19 24 15750 \n", "182 3.40 23.00 52 4800 37 46 7775 \n", "183 3.40 9.00 85 5250 27 34 7975 \n", "184 3.40 23.00 52 4800 37 46 7995 \n", "185 3.40 9.00 85 5250 27 34 8195 \n", "186 3.40 9.00 85 5250 27 34 8495 \n", "187 3.40 23.00 68 4500 37 42 9495 \n", "188 3.40 10.00 100 5500 26 32 9995 \n", "189 3.40 8.50 90 5500 24 29 11595 \n", "190 3.40 8.50 90 5500 24 29 9980 \n", "191 3.40 8.50 110 5500 19 24 13295 \n", "192 3.40 23.00 68 4500 33 38 13845 \n", "193 3.40 9.00 88 5500 25 31 12290 \n", "194 3.15 9.50 114 5400 23 28 12940 \n", "195 3.15 9.50 114 5400 23 28 13415 \n", "196 3.15 9.50 114 5400 24 28 15985 \n", "197 3.15 9.50 114 5400 24 28 16515 \n", "198 3.15 7.50 162 5100 17 22 18420 \n", "199 3.15 7.50 162 5100 17 22 18950 \n", "200 3.15 9.50 114 5400 23 28 16845 \n", "201 3.15 8.70 160 5300 19 25 19045 \n", "202 2.87 8.80 134 5500 18 23 21485 \n", "203 3.40 23.00 106 4800 26 27 22470 \n", "204 3.15 9.50 114 5400 19 25 22625 \n", "\n", "[205 rows x 14 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numeric_cars = numeric_cars.replace('?', np.nan)\n", "numeric_cars" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "normalized-losses 41\n", "wheel-base 0\n", "length 0\n", "width 0\n", "height 0\n", "curb-weight 0\n", "bore 4\n", "stroke 4\n", "compression-rate 0\n", "horsepower 2\n", "peak-rpm 2\n", "city-mpg 0\n", "highway-mpg 0\n", "price 4\n", "dtype: int64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numeric_cars = numeric_cars.astype('float')\n", "numeric_cars.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "normalized-losses 37\n", "wheel-base 0\n", "length 0\n", "width 0\n", "height 0\n", "curb-weight 0\n", "bore 4\n", "stroke 4\n", "compression-rate 0\n", "horsepower 2\n", "peak-rpm 2\n", "city-mpg 0\n", "highway-mpg 0\n", "price 0\n", "dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Because `price` is the column we want to predict, let's remove any rows with missing `price` values.\n", "numeric_cars = numeric_cars.dropna(subset=['price'])\n", "numeric_cars.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "# Replace missing values in other columns using column means.\n", "numeric_cars = numeric_cars.fillna(numeric_cars.mean())" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "normalized-losses 0\n", "wheel-base 0\n", "length 0\n", "width 0\n", "height 0\n", "curb-weight 0\n", "bore 0\n", "stroke 0\n", "compression-rate 0\n", "horsepower 0\n", "peak-rpm 0\n", "city-mpg 0\n", "highway-mpg 0\n", "price 0\n", "dtype: int64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Confirm that there's no more missing values!\n", "numeric_cars.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "# Normalize all columnns to range from 0 to 1 except the target column.\n", "price_col = numeric_cars['price']\n", "numeric_cars = (numeric_cars - numeric_cars.min())/(numeric_cars.max() - numeric_cars.min())\n", "numeric_cars['price'] = price_col" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Univariate Model" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "horsepower 4037.037713\n", "curb-weight 4401.118255\n", "highway-mpg 4630.026799\n", "width 4704.482590\n", "city-mpg 4766.422505\n", "length 5427.200961\n", "wheel-base 5461.553998\n", "compression-rate 6610.812153\n", "bore 6780.627785\n", "normalized-losses 7330.197653\n", "peak-rpm 7697.459696\n", "stroke 8006.529545\n", "height 8144.441043\n", "dtype: float64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.neighbors import KNeighborsRegressor\n", "from sklearn.metrics import mean_squared_error\n", "\n", "def knn_train_test(train_col, target_col, df):\n", " knn = KNeighborsRegressor()\n", " np.random.seed(1)\n", " \n", " # Randomize order of rows in data frame.\n", " shuffled_index = np.random.permutation(df.index)\n", " rand_df = df.reindex(shuffled_index)\n", "\n", " # Divide number of rows in half and round.\n", " last_train_row = int(len(rand_df) / 2)\n", " \n", " # Select the first half and set as training set.\n", " # Select the second half and set as test set.\n", " train_df = rand_df.iloc[0:last_train_row]\n", " test_df = rand_df.iloc[last_train_row:]\n", " \n", " # Fit a KNN model using default k value.\n", " knn.fit(train_df[[train_col]], train_df[target_col])\n", " \n", " # Make predictions using model.\n", " predicted_labels = knn.predict(test_df[[train_col]])\n", "\n", " # Calculate and return RMSE.\n", " mse = mean_squared_error(test_df[target_col], predicted_labels)\n", " rmse = np.sqrt(mse)\n", " return rmse\n", "\n", "rmse_results = {}\n", "train_cols = numeric_cars.columns.drop('price')\n", "\n", "# For each column (minus `price`), train a model, return RMSE value\n", "# and add to the dictionary `rmse_results`.\n", "for col in train_cols:\n", " rmse_val = knn_train_test(col, 'price', numeric_cars)\n", " rmse_results[col] = rmse_val\n", "\n", "# Create a Series object from the dictionary so \n", "# we can easily view the results, sort, etc\n", "rmse_results_series = pd.Series(rmse_results)\n", "rmse_results_series.sort_values()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'normalized-losses': {1: 7846.750605148984,\n", " 3: 7500.5698123109905,\n", " 5: 7330.197653434445,\n", " 7: 7756.421586234123,\n", " 9: 7688.096096891432},\n", " 'wheel-base': {1: 4493.734068810494,\n", " 3: 5120.161506064513,\n", " 5: 5461.553997873057,\n", " 7: 5448.1070513823315,\n", " 9: 5738.405685192312},\n", " 'length': {1: 4628.45550121557,\n", " 3: 5129.8358210721635,\n", " 5: 5427.2009608367125,\n", " 7: 5313.427720847974,\n", " 9: 5383.054514833446},\n", " 'width': {1: 4559.257297950061,\n", " 3: 4606.413692169901,\n", " 5: 4704.482589704386,\n", " 7: 4571.485046194653,\n", " 9: 4652.914172067787},\n", " 'height': {1: 8904.04645636071,\n", " 3: 8277.609643045525,\n", " 5: 8144.441042663747,\n", " 7: 7679.598124393773,\n", " 9: 7811.03606291223},\n", " 'curb-weight': {1: 5264.290230758878,\n", " 3: 5022.318011757233,\n", " 5: 4401.118254793124,\n", " 7: 4330.608104418053,\n", " 9: 4632.044474454401},\n", " 'bore': {1: 8602.58848450066,\n", " 3: 6984.239489480916,\n", " 5: 6780.627784685976,\n", " 7: 6878.097965921532,\n", " 9: 6866.808502038413},\n", " 'stroke': {1: 9116.495955406906,\n", " 3: 7338.68466990294,\n", " 5: 8006.529544647101,\n", " 7: 7803.937796804327,\n", " 9: 7735.554366079291},\n", " 'compression-rate': {1: 8087.205346523092,\n", " 3: 7375.063685578359,\n", " 5: 6610.812153159129,\n", " 7: 6732.801282941515,\n", " 9: 7024.485525463435},\n", " 'horsepower': {1: 4170.054848037801,\n", " 3: 4020.8492630885394,\n", " 5: 4037.0377131537603,\n", " 7: 4353.811860277134,\n", " 9: 4515.135617419103},\n", " 'peak-rpm': {1: 9511.480067750124,\n", " 3: 8537.550899973421,\n", " 5: 7697.4596964334805,\n", " 7: 7510.294160083481,\n", " 9: 7340.041341263401},\n", " 'city-mpg': {1: 5901.143574354764,\n", " 3: 4646.746408727155,\n", " 5: 4766.422505090134,\n", " 7: 5232.523034167316,\n", " 9: 5465.209492527533},\n", " 'highway-mpg': {1: 6025.594966720739,\n", " 3: 4617.305019788554,\n", " 5: 4630.026798588056,\n", " 7: 4796.061440186946,\n", " 9: 5278.358056953987}}" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def knn_train_test(train_col, target_col, df):\n", " np.random.seed(1)\n", " \n", " # Randomize order of rows in data frame.\n", " shuffled_index = np.random.permutation(df.index)\n", " rand_df = df.reindex(shuffled_index)\n", "\n", " # Divide number of rows in half and round.\n", " last_train_row = int(len(rand_df) / 2)\n", " \n", " # Select the first half and set as training set.\n", " # Select the second half and set as test set.\n", " train_df = rand_df.iloc[0:last_train_row]\n", " test_df = rand_df.iloc[last_train_row:]\n", " \n", " k_values = [1,3,5,7,9]\n", " k_rmses = {}\n", " \n", " for k in k_values:\n", " # Fit model using k nearest neighbors.\n", " knn = KNeighborsRegressor(n_neighbors=k)\n", " knn.fit(train_df[[train_col]], train_df[target_col])\n", "\n", " # Make predictions using model.\n", " predicted_labels = knn.predict(test_df[[train_col]])\n", "\n", " # Calculate and return RMSE.\n", " mse = mean_squared_error(test_df[target_col], predicted_labels)\n", " rmse = np.sqrt(mse)\n", " \n", " k_rmses[k] = rmse\n", " return k_rmses\n", "\n", "k_rmse_results = {}\n", "\n", "# For each column (minus `price`), train a model, return RMSE value\n", "# and add to the dictionary `rmse_results`.\n", "train_cols = numeric_cars.columns.drop('price')\n", "for col in train_cols:\n", " rmse_val = knn_train_test(col, 'price', numeric_cars)\n", " k_rmse_results[col] = rmse_val\n", "\n", "k_rmse_results" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "for k,v in k_rmse_results.items():\n", " x = list(v.keys())\n", " y = list(v.values())\n", " \n", " plt.plot(x,y)\n", " plt.xlabel('k value')\n", " plt.ylabel('RMSE')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Multivariate Model" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "horsepower 4219.377860\n", "width 4618.910560\n", "curb-weight 4730.075815\n", "highway-mpg 5069.469256\n", "length 5176.394904\n", "city-mpg 5202.409003\n", "wheel-base 5252.392462\n", "compression-rate 7166.073599\n", "bore 7222.472445\n", "normalized-losses 7624.407151\n", "stroke 8000.240467\n", "peak-rpm 8119.365233\n", "height 8163.346266\n", "dtype: float64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Compute average RMSE across different `k` values for each feature.\n", "feature_avg_rmse = {}\n", "for k,v in k_rmse_results.items():\n", " avg_rmse = np.mean(list(v.values()))\n", " feature_avg_rmse[k] = avg_rmse\n", "series_avg_rmse = pd.Series(feature_avg_rmse)\n", "series_avg_rmse.sort_values()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'two best features': {5: 3589.3132622073304},\n", " 'three best features': {5: 3305.9401397969677},\n", " 'four best features': {5: 3280.3807311630976},\n", " 'five best features': {5: 3341.6024539726504},\n", " 'six best features': {5: 3628.261188214127}}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def knn_train_test(train_cols, target_col, df):\n", " np.random.seed(1)\n", " \n", " # Randomize order of rows in data frame.\n", " shuffled_index = np.random.permutation(df.index)\n", " rand_df = df.reindex(shuffled_index)\n", "\n", " # Divide number of rows in half and round.\n", " last_train_row = int(len(rand_df) / 2)\n", " \n", " # Select the first half and set as training set.\n", " # Select the second half and set as test set.\n", " train_df = rand_df.iloc[0:last_train_row]\n", " test_df = rand_df.iloc[last_train_row:]\n", " \n", " k_values = [5]\n", " k_rmses = {}\n", " \n", " for k in k_values:\n", " # Fit model using k nearest neighbors.\n", " knn = KNeighborsRegressor(n_neighbors=k)\n", " knn.fit(train_df[train_cols], train_df[target_col])\n", "\n", " # Make predictions using model.\n", " predicted_labels = knn.predict(test_df[train_cols])\n", "\n", " # Calculate and return RMSE.\n", " mse = mean_squared_error(test_df[target_col], predicted_labels)\n", " rmse = np.sqrt(mse)\n", " \n", " k_rmses[k] = rmse\n", " return k_rmses\n", "\n", "k_rmse_results = {}\n", "\n", "two_best_features = ['horsepower', 'width']\n", "rmse_val = knn_train_test(two_best_features, 'price', numeric_cars)\n", "k_rmse_results[\"two best features\"] = rmse_val\n", "\n", "three_best_features = ['horsepower', 'width', 'curb-weight']\n", "rmse_val = knn_train_test(three_best_features, 'price', numeric_cars)\n", "k_rmse_results[\"three best features\"] = rmse_val\n", "\n", "four_best_features = ['horsepower', 'width', 'curb-weight', 'city-mpg']\n", "rmse_val = knn_train_test(four_best_features, 'price', numeric_cars)\n", "k_rmse_results[\"four best features\"] = rmse_val\n", "\n", "five_best_features = ['horsepower', 'width', 'curb-weight' , 'city-mpg' , 'highway-mpg']\n", "rmse_val = knn_train_test(five_best_features, 'price', numeric_cars)\n", "k_rmse_results[\"five best features\"] = rmse_val\n", "\n", "six_best_features = ['horsepower', 'width', 'curb-weight' , 'city-mpg' , 'highway-mpg', 'length']\n", "rmse_val = knn_train_test(six_best_features, 'price', numeric_cars)\n", "k_rmse_results[\"six best features\"] = rmse_val\n", "\n", "k_rmse_results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Multivariate Model" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'three best features': {1: 3013.0109985241875,\n", " 2: 2813.285969825997,\n", " 3: 3171.585284478674,\n", " 4: 3182.3137417981943,\n", " 5: 3305.9401397969677,\n", " 6: 3522.506848900376,\n", " 7: 3774.3772094554106,\n", " 8: 3978.969124021116,\n", " 9: 3992.923680588881,\n", " 10: 4076.2381473803043,\n", " 11: 4156.388331131807,\n", " 12: 4201.10713385948,\n", " 13: 4303.62676861325,\n", " 14: 4359.693296989702,\n", " 15: 4371.771103372868,\n", " 16: 4394.4846551644205,\n", " 17: 4510.399710057406,\n", " 18: 4584.310961865486,\n", " 19: 4636.62620477063,\n", " 20: 4664.465847866811,\n", " 21: 4724.096637428273,\n", " 22: 4752.535484102914,\n", " 23: 4808.703310452101,\n", " 24: 4858.9452710176065},\n", " 'four best features': {1: 2516.589279950226,\n", " 2: 2811.1727257604443,\n", " 3: 3013.3615157930335,\n", " 4: 3126.269482641261,\n", " 5: 3280.3807311630976,\n", " 6: 3479.5099401018138,\n", " 7: 3781.5612742414464,\n", " 8: 3988.8669577450623,\n", " 9: 4024.998621362245,\n", " 10: 4042.247226187899,\n", " 11: 4230.335248684068,\n", " 12: 4354.008675154061,\n", " 13: 4461.626664877788,\n", " 14: 4468.029845088927,\n", " 15: 4444.164407677133,\n", " 16: 4492.069868571789,\n", " 17: 4597.262222692034,\n", " 18: 4615.446316768325,\n", " 19: 4692.5688728042505,\n", " 20: 4727.815985112382,\n", " 21: 4738.233067652869,\n", " 22: 4778.176687231466,\n", " 23: 4811.556798910073,\n", " 24: 4846.548529789929},\n", " 'five best features': {1: 2530.0554077602005,\n", " 2: 2897.1757974767684,\n", " 3: 3183.4597426217424,\n", " 4: 3168.0230415758415,\n", " 5: 3341.6024539726504,\n", " 6: 3537.520542998191,\n", " 7: 3817.290452118825,\n", " 8: 4004.414529685573,\n", " 9: 3992.3186041830318,\n", " 10: 4138.728787853335,\n", " 11: 4342.052852829098,\n", " 12: 4416.145381031136,\n", " 13: 4493.8798141857205,\n", " 14: 4463.501601554571,\n", " 15: 4474.480783207805,\n", " 16: 4553.5595362768345,\n", " 17: 4597.001081375769,\n", " 18: 4655.283442648355,\n", " 19: 4687.900893982822,\n", " 20: 4712.022985543165,\n", " 21: 4755.856625823773,\n", " 22: 4788.162720030673,\n", " 23: 4806.923381965054,\n", " 24: 4879.983352195467}}" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def knn_train_test(train_cols, target_col, df):\n", " np.random.seed(1)\n", " \n", " # Randomize order of rows in data frame.\n", " shuffled_index = np.random.permutation(df.index)\n", " rand_df = df.reindex(shuffled_index)\n", "\n", " # Divide number of rows in half and round.\n", " last_train_row = int(len(rand_df) / 2)\n", " \n", " # Select the first half and set as training set.\n", " # Select the second half and set as test set.\n", " train_df = rand_df.iloc[0:last_train_row]\n", " test_df = rand_df.iloc[last_train_row:]\n", " \n", " k_values = [i for i in range(1, 25)]\n", " k_rmses = {}\n", " \n", " for k in k_values:\n", " # Fit model using k nearest neighbors.\n", " knn = KNeighborsRegressor(n_neighbors=k)\n", " knn.fit(train_df[train_cols], train_df[target_col])\n", "\n", " # Make predictions using model.\n", " predicted_labels = knn.predict(test_df[train_cols])\n", "\n", " # Calculate and return RMSE.\n", " mse = mean_squared_error(test_df[target_col], predicted_labels)\n", " rmse = np.sqrt(mse)\n", " \n", " k_rmses[k] = rmse\n", " return k_rmses\n", "\n", "k_rmse_results = {}\n", "\n", "three_best_features = ['horsepower', 'width', 'curb-weight']\n", "rmse_val = knn_train_test(three_best_features, 'price', numeric_cars)\n", "k_rmse_results[\"three best features\"] = rmse_val\n", "\n", "four_best_features = ['horsepower', 'width', 'curb-weight', 'city-mpg']\n", "rmse_val = knn_train_test(four_best_features, 'price', numeric_cars)\n", "k_rmse_results[\"four best features\"] = rmse_val\n", "\n", "five_best_features = ['horsepower', 'width', 'curb-weight' , 'city-mpg' , 'highway-mpg']\n", "rmse_val = knn_train_test(five_best_features, 'price', numeric_cars)\n", "k_rmse_results[\"five best features\"] = rmse_val\n", "\n", "k_rmse_results" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEKCAYAAADq59mMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xd4VGXax/HvPem9QyChEwi9RUBBRRTEBrqioKxiW9C1l7W9trXtWnZF17UuKiqCiopYEQuC9F5CKCEESIGE9J4pz/vHDBowEIKZTMr9ua5cc+Y5Jfccx/w47XnEGINSSilVHxZPF6CUUqr50fBQSilVbxoeSiml6k3DQymlVL1peCillKo3DQ+llFL15tbwEJF0EdkiIhtFZK2rLVJEFonILtdrhKtdROQlEUkVkc0iMrjGdqa6lt8lIlPdWbNSSqm6NcaRx1nGmIHGmCTX+/uBH4wxCcAPrvcA5wEJrp9pwKvgDBvgUWAYMBR49HDgKKWU8gxPnLaaAMxyTc8CLq7R/q5xWgmEi0g74FxgkTEm3xhTACwCxjV20UoppX7j7ebtG+A7ETHA68aYN4C2xphsAGNMtoi0cS0bB+yvsW6Gq+1Y7UcQkWk4j1gICgoakpiY2NCfRSmlWrR169YdMsbEnMiy7g6PEcaYLFdALBKR7cdZVmppM8dpP7LBGUxvACQlJZm1a9eeTL1KKdVqicjeE13WraetjDFZrtcc4DOc1ywOuk5H4XrNcS2eAXSosXo8kHWcdqWUUh7itvAQkSARCTk8DYwFtgILgMN3TE0FPndNLwCudt11NRwocp3eWgiMFZEI14Xysa42pZRSHuLO01Ztgc9E5PDv+cAY862IrAE+EpHrgX3AZa7lvwbOB1KBcuBaAGNMvog8AaxxLfe4MSbfjXUrpZSqg7TELtn1modSStWfiKyr8VjFcekT5koppepNw0MppVS9aXgopZSqNw0PpZRqAWwOG9+mf8u8nfMa5fe5+yFBpZRSblRhq+Dz1M+ZlTyLjNIM+sf059KES3Hd6eo2Gh5KKdUMFVYWMmfHHOakzKGgqoBOQb0Y5HsHHaqS3B4coOGhlFLNSmZpJu9te49Pdn5Cpb2SSAbQPnM0fcqKGebzBW2jVwJvur0ODQ+llGoGtudv57WNM/lx/3eIge4lEVxe6MUF9h8I5gvwARMQicSf3yj1aHgopVQTZew2vl3/AW+nvE+KycbfYbi6pIQ/F5XQxr6PyshE/LteAfGnQIehSGRXaIRTVqDhoZRSTYa1cC8H0xeTmracXQe28J13Ptv9fIiy2ZleYuV0SwKx3UbSpvdIpP1gAv2CPVarhodSSjUCYwwl1hKyS7PJLssmuzCN7JwtZBekkl2eQ7atjFwLmMNHDkEQbQtiss9wrhxxA126DWy0o4oToeGhlFINrNJWyY6CHSQfSiY5L5nteSlkluynzF55xHI+xtDOZiPK7k1cdTBR1TEY3+4kdh3ORQMGkhSXgEWa5uN4Gh5KKfUHWO1WdhbuJPlQMtvytpGcl0xqwS5sxg5AlLHQu7KCU6qraWezEesdREBgNzKrurDoQEfWWjtTGB7D+IHtuXhgHD1jQzz8iU6MhodSSp0gh3Gwq2DXryGRfCiZHQU7sDqsAIRZfOljt3BtcTF9KsvpU2WlbZve0PkCdvv34bOcWF7cbic/y0p4oA/nD27H/wbGkdQpAoul6ZySOhEaHkopdRy55bksy1rG8szlrMheQWFVIQDBXgH09gnjz45A+hzaR5+KUuJsDojtS0nHP5EaNIj5jl5sPmTYuKGQrKJK/H2qOadXWy4eGMcZPWLw9W6ap6ROhIaHUkoBOOxQWUR1aQ7rDqxm+cG1LCvYxq6KgwBEWfw43Tuc4dKGftk76FSxDwtQHtGTvZEXsFj68F1pd9ZlQVm685SVSDadIgMZ0CGcu8e25dy+sQT7tYw/uy3jUyil1ImwVUH2Jti/GjJWQ14aprKIPbZilnvZWRbgz1p/PyotFryNYXBlFXdUVDCiopIEu+DwLaRAwtnqPZr/+fbkm+Ku5GeHQjaE+nuT2C6UiUNCSGwXSmJsCD3ahhDUQsLiaC3zUymlFEBRpjMk9q9xvmZvotDYSPfxZk9YLJuCw1ke5Ee2CQWgk08Yl4R2Z0R0P06JGUxgSCyH7AHMTynj1g257Motw8sidI0OIrFLKNfHhtCrXQiJsaG0C/NvlD6lmgoND6VUy2CrguzNkLEa676V7D+wjj1V+aT7eJPu6096UBjpnTpSaKp/XSXI28qw2BHcEDeC09qfRnxIPABVNjs/puTw8dIMft65B7vDMLhjOP/4Uz8u6N+OUH8fT33KJkPDQynVbNnsVnZvm8e2Df8jtWgP6d4W0n28yfT2xh7uBcQAEO0fReewLpwT1pnOoZ3pEtaFzqGdaR/cHm+L88+gMYatmUXMW5fB/I2ZFJZbaRvqx7QzujJxSDzdYjz3NHdTpOGhlGoWHMbBvuJ9bM3b6nz4LmMZ24vTqRADgF9oCJ0C2pAY2YNxUYm/hkSn0E6E+B772YlDpVXM35DJvHUZbD9Qgq+3hbG92zJxSDynJ8Tg1cxuoW0sGh5KqSbHGMOBsgMk5yWz9dBWtuZtZduhbZRYSwDwN5BYVcWlxpc+3c6l7+BpdIw8saexy6ps7DxYwo4DJfywPYeftudgcxgGxIfxxMV9Gd+/PWGBelqqLhoeSqkmocJWwU/7fuLb9G/ZlLuJ/Mp8ALzFm4SIBMaFJ9I3Yyt9ctPoFtwe75H/BwOuAG/fWrdnsztIzytj+wFnUBx+3Zdf/usy0cF+XDeyCxOHxNOjbfN4srup0PBQSnmMwzhYf3A9X6R9wcL0hZRZy4gNimVk3Ej6Rvelb0QvemSn4LdsBuRuh6jucMF/oN9l4PXbn6/8smq2ZBaxPbv416BIzS2l2uYAwCLQJTqIfnFhTBwST8/YEBJjQ+gQEdjsnuxuKjQ8lFKNbl/xPr5I+4Ivdn9BZmkmgd6BjOk0hvHdxpMUm4TFYYfNH8J310J+GsT0gktnQp9LwOIFQE5JJQu3HuDrLQdYtScPh/PSB21C/EhsF8rIhGh6tg2hZ2wI3dsE4+/j5cFP3PJoeCilGkVxdTEL0xeyIHUBG3M3IgjD2w3nlkG3MLrdCALL86EoA1a9DitfgcJ9ENsfJr0PPS8Ai4Wc4kq+2bqfr7dkszo9H2OgW0wQt5zVnVO7RZMYG0JEUO2nsVTD0vBQSrmN1WFlRcYvfL7jYxYfWEG1w0Y333DuDOrJBVYLbffsgI23Q/mhI1eMS4Lzn4eEsRworuKbFXv5eks2a/cWYAwktAnmttEJXNC/HQltglvVw3lNhYaHUqpBFVQWsDJzOcu3vMuSgm3kWyDCbuey0nIuKi2ld/U+xC8UQuMgLB7aD3S+hsZDWByEdSBL2vJN8kG+/mEF6/YWANCzbQh3nN2D8/vFkqAXtz1Ow0Mp9YdY7VY25m5kRdYKlmUtIyUvBYMhzG7nVEswF0QNYUTbwfiEd3YFRhz4h/1uO3aHYWHyAd76dg9r924DIDE2hLvH9OC8fu3o3kYf0mtKNDyUUvVijGFv8V6WZy1nedZyVh9YTYWtAm/xpr9/G24uKmVEtYNeZz2G1+CpdQ6dWmWz8+n6TN5YksaeQ2V0jgrkb+f25Ly+sXTVp7qbLA0PpVSdyq3lzjEtspazPHM5WWVZAHQM6cj4buM5LbQbQ1e9S/C25dD9HLjoReepqOMoqbQye9U+Zv6yh9ySKvrFhfHKlMGc2ydWn+puBjQ8lFLHVG4tZ+6Oubyz9R0KqgoI9glmWLthXN/vek5tfyodguJgzZvw2V1g8YYJ/4WBU457tJFTUsnby9J5f+VeSiptjOwezYxJAzmtW5Re+G5GNDyUUr9zdGiMiBvBdX2uY1DbQfhYXF135O2GeRfC3mXQfYzraCPumNvcm1fGG0vS+HhdBla7g/P7tuPGM7vRL/731z9U0+f28BARL2AtkGmMuVBE3gHOBIpci1xjjNkozn9yvAicD5S72te7tjEVeMi1/JPGmFnurlup1qi20LhpwE0MiBnw20IOB6x+A75/DLx8YcIrMPDKYx5tbM0s4rWfd/P1lmy8LRYuHRLPtDO60iU6qHE+lHKLxjjyuB1IAUJrtP3NGDPvqOXOAxJcP8OAV4FhIhIJPAokAQZYJyILjDEFbq9cqVai3FrOnO1zmJU869ihAc6jjc9vgX3LIWGs82gjtH2t20zNKeHxL1NYsjOXYD9v/nJGV64f0YU2of6N8ImUu7k1PEQkHrgAeAq4q47FJwDvGmMMsFJEwkWkHTAKWGSMyXdtcxEwDpjjtsKVamQO4yC9KJ3YoFgCfQIb7fceDo13kt+hsKrw2KHhcMCq1+CHx51HGxe/6uyUsJajDWMMH63dz6MLkgnw8eLecT2ZMqwTYQHaU21L4u4jjxnAvcDRT/Q8JSKPAD8A9xtjqoA4YH+NZTJcbcdqP4KITAOmAXTs2LGh6lfKrewOO4v2LeL1Ta+TWpiKRSx0Cu1EYmQivSJ70SuqF70iexHm17DXBU4oNKyVsGcJ7Pgadi6EkixIOBcumnHMo43iSisPfrqFLzdnc1q3KGZMGqhHGi2U28JDRC4Ecowx60RkVI1ZDwAHAF/gDeA+4HGgthOm5jjtRzYY84ZreyQlJf1uvlJNic1h49v0b3lz85ukFaXRNawrDw57kILKAlLyU9iQs4Fv9nzz6/LtgtodESiJkYm09Y9G7NXgE3DEEYDNYaOkuoSiqiKKqosoriqmqLqIoirndF5lHgvTF9YeGqU5zqDY+S3s/hGs5eAbDN1GQ7+J0Gv8Ma9tbNxfyK1z1pNVWMnfzu3JjWd201tuWzB3HnmMAMaLyPmAPxAqIu8bY/7sml8lIm8D97jeZwAdaqwfD2S52kcd1b7YjXUr5TY2h42v0r7izS1vsrd4L93Du/Pcmc8xJrIfXuvfh4oCsApIZwp8I9luLWS7vZSUokOkFC9m8b4fMa4/3hF2Oz2qrYjFiyIff4q9vCnGQYmxHreGYJ9gBrUZxPQB0xkQ3R9yUmDpv2DHN5CxFjDOrkIGXgk9z4POp4O33zG353AY3lyaxnMLd9A21J+Ppg9nSKfIhttpqkkS5yUGN/8S55HHPa67rdoZY7Jdd1e9AFQaY+4XkQuAW3DebTUMeMkYM9R1wXwdMNi1ufXAkMPXQGqTlJRk1q5d686PpFS9WO1Wvkj7gjc3v0lGaQaJkYlM7z+d0R1HY0n+DL66GyoKnf/K9w10Hk34BLleA8DXOV3u7cdOsZFiKtluL2OXrQgvu41QWzVhVWWEVZYQ6nAQZnc4X/0jCAuNJyyiK6GRPQhp0wfv6B5QuNcZFju+cU4DtB8EPc+HHuMgtl+dT4YD5JZUcffHm1iyM5fz+sbyzz/111H4mjERWWeMSTqRZT3xnMdsEYnBeTpqI3Cjq/1rnMGRivNW3WsBjDH5IvIEsMa13OPHCw6lmpJqezXzU+czc8tMssqy6BPVh/uG3seZ8Wci5fkw7zpI/gzihsDFr0FMj+NuLxAY6Pqp/ReWQ/5uyEuFQ6nO17xdkPw1VB11j4m3P3QdBSPvdAZGaLt6fbalu3K588NNFFdaefLivkwZ1lEf8mtFGuXIo7HpkYfytCp7FZ/s/IS3tr7FwfKD9I/pz439b2Rk3EjnH9gd38CC25ynqUbdDyPuOGJkvAZnDJQdcgZJXioERkPXM51HNPVktTv496KdvPbzbrrFBPPylYNIjA2te0XV5DX1Iw+lWqwyaxnzds5jVvIscityGdxmME+MeILh7YY7Q6OyCL59ADbOhrZ94apPnaeI3E0EgmOcP51OO+nN7M8v57a5G9iwr5DJp3TgkYt6E+irf0ZaI/2vrlQDyK/MZ3bKbOZsn0NJdQlDY4fyzBnPkNQ26bdTOWmLYf7NzlteT78bzrzvuBeim5qvNmdz/6ebwcB/rhjERQNqv11XtQ4aHkr9AZmlmcxKnsVnuz6jyl7F2R3P5rq+19EvpsbRRHUZLHrU2YFgVHe4fhHEn9CZgUZnjCG3pIo9h8pIzytjz6Fy9uaVsedQGdsPlDCgQzj/mTyIjlGN9yCjapo0PJQ6CTsLdvL21rf5Zs83iAgXdb2Ia/peQ9ewrkcuuG8VzL8R8tNg+F9h9MPOu6k8yBhDbmkV6YfKSc8rI/2ooCivtv+6rLdF6BgZSOfoIMYPbM9fTu+Kj5fFg9WrpkLDQ6l6WH9wPTO3zmRJxhICvAOY0msKV/W+itig2CMXtFbC4qdh2UsQ3gGmfgldTm/weowxlFbZKCizkl9eTUF5NQVl1RSUW12vh9usR0xX2x2/bsPbInSIDKRzVCDDukTSJTqIztFBdIkKon24P94aFqoWGh5K1cFhHCzNWMrMrTPZkLOBCL8Ibh54M1ckXlF7tyEHtsAnf4HcFBg8Fc59Cvwabsxtu8OwKi2P+Rsz+XbrAYorbbUuZxGICPQlPNCHyCBfOkQGMiA+nPAgH9qF+tM5OojOUUHERQTo0YSqNw0PpY5jWeYynl/7PKmFqbQLascDQx/gkoRLCPAOqH2FjXPgyzvAPxymzIOEMQ1ShzGG5Kxi5m/I5IvNWRwsriLYz5uxfdrSKzb014AID/QlMsiXyEBfQvy9sWj3IMpNNDyUOoZtedu47cfbaB/cnqdHPs24LuN+GwjpaLZqWPgArPmfszuPiW9BcJs/XMPevDI+35jF/I2ZpOWW4eMljOrZhgkD23NOr7b4+3j94d+h1MnQ8FCqFkVVRdy1+C4i/COYdd4sIv2P01dTUSZ8PBUy1sBpt8LZj/2hB/4OlVbx5aYsPt+UxYZ9hQAM7RLJDSO7cn6/WMIDfU9620o1FA0PpY7iMA4eWPoAB8sPMmtcHcGxZwl8fC3YKuGyWdDn4pP6nVa7gy83ZzF/Qxa/pB7C7jAkxoZw/3mJXDSgPXHhxzhNppSHaHgodZTXN7/O0sylPDTsIfrH9K99IWNg+UvOoVijusOk2XX2S3UsWzOLuO+TzSRnFRMXHsC0M7py8cA4esY23EV2pRqahodSNfyS+QuvbnyVi7pexOU9L699ocpi+PyvkPIF9J4AE/57UndTVVrtvPjDLt5YkkZEoC+vTBnMuD6xepFbNQsaHkq5ZJZmct+S+0iISODhUx+uvYfY3B3w4Z+dY3mPfRJOveWEui4/2uo9+dz/yWbSDpVx2ZB4Hrqgt3ZlrpoVDQ+lcPaCe9fiuzDG8MKoF2q/FTf5M2ffVL6BcPXnJ/XQX0mllWe/3cF7K/cSHxHAe9cP5fSEmAb4BEo1Lg0PpYB/rPoH2/K28Z/R/6FjaMcjZ9pt8P2jsOJliB8Kl8865hjex/PT9hz+77MtZBdXct2ILtw9tgdBfvq/oGqe9JurWr1Pd33KJ7s+4S/9/sKoDqOOnFma47ybau8vMHQajH0KvOt3q2x+WTVPfLmNzzZkktAmmE9uOo3BHSMa7gMo5QEaHqpVS85L5qmVTzG83XBuHnjzkTPL8+Ht85zPcVzyBgyYVK9tG2P4cnM2jy1IpqjCym1nJ3DzWd3w89YH+1Tzp+GhWq2iqiLuXnw3kQGRPHPGM3hZavxRt1udD/4V7oOrF0CnU+u17QNFlTw0fyvfpxxkQHwYs/8yTEfbUy2KhodqlRzGwf1L76/9QUBj4Ot7nA8AXvL6CQdHpdXOmvR8Fu/I5aM1+7E6HDx0QS+uHdEFL739VrUwGh6qVXp90+v8kvkLDw9/+PcPAq58Bda9AyPvggGTj7udvXllLN6Ry887c1mxO48Kqx1fLwtn9ozhoQt60Smq/mOEK9UcaHioVmdpxlJe3fQq47uN57Ielx05c+dCWPh/0Osi58BNR6motrMyLY/FO3L4eWcu6XnlAHSOCuTypHjO7BnD8K5ROq63avH0G65alYySDO5fej8JEQk8NPyhIx8EPJgM866Ddv2dp6ssFowx7M4t/fXoYtWefKptDvx9LJzWLZprR3ThzB4xdI7WIwzVumh4qFaj5oOAM0bNOPJBwNIc+GCSs5uRK+bi8A7ku63ZzPh+F9sPlADQvU0wVw/vxJk9Yzilc6R2h65aNQ0P1SoYY3hy5ZOk5Kfwn9H/oUNoh99mWith7hQoO4S59hsW7bfwwve/kJJdTNeYIJ64uC9n9YwhPsKzY48r1ZRoeKgWz+aw8cTKJ5ifOp/p/acf+SCgMbDgFshYzeYR/+HBT0vZmrmOzlGBvDBpAOMHxOmdUkrVQsNDtWjV9mruW3If3+/7nmn9p/3uQUDz87PIlo95N3Aqj/wQRcdIG89N7M8lg+Lw1nG9lTomDQ/VYpVZy7j9p9tZlb2Ke0+5l6t6X/XrPGMM23+YRa9fnuYT++m8bp/AM5cm8KfB8fhoaChVJw0P1SIVVhZy0/c3kZKfwlMjn2J8t/G/zlu++xALvv6Cxw79jU2WRKznzeCnoV3x9dbQUOpEaXioFudA2QGmL5pORkkGL4x6gbM6ngXAqrQ8/r1oJ/v27OIL/8ewBrYh8cYFDAhr6+GKlWp+NDxUi5JelM60RdMori7mtTGvcUrsKWzNLOLZhTtYsjOXjsEOvox5mchqO3LtJ6DBodRJ0fBQLca2vG3c9P1NALx17lv4OTpy8+z1fLUlm/BAHx48rwfXZz6C165dcOXH0KaXhytWqvnS8FAtwtoDa7n1x1sJ8Q3hieEvMeunaj5Zv5h23qU8OdSfP3W3EbhnBuz8Gs57FhLO8XTJSjVrGh6qebLboPQgFGexeN8P3LN7Lu0sAdyTFYDXG1dzi+TztF8BXsYGm3H+AAy70Tmok1LqD3F7eIiIF7AWyDTGXCgiXYC5QCSwHrjKGFMtIn7Au8AQIA+YZIxJd23jAeB6wA7cZoxZ6O66VRNTcgD2r4J9q5yv2ZvAYeWL4EAejo6iV3U1L2RnUunIwx7cjqiOZ+AV1QFC45xDxoa2d06H6DUOpRpCYxx53A6kAIdHwnkGeMEYM1dEXsMZCq+6XguMMd1FZLJruUki0huYDPQB2gPfi0gPY4y9EWpXbmZ1WNmSu4VAn0DC/cIJ9wvH3+IDOdtg30rYv9oZFoV7nSt4+0P7wTD8JmbZC3g+52cCK+LZtm8yj/fuw11jE+neJtizH0qpVsCt4SEi8cAFwFPAXeLswnQ0cKVrkVnAYzjDY4JrGmAe8LJr+QnAXGNMFbBHRFKBocAKd9au3M/usHPnT3fyc8bPR7T7OwzhDjsRdgdh4k1EVCRhnccRHNYNr6CuCKGsO7CVNQU/Yy3uQ/fAW7j/r/3oFx/moU+iVOvj7iOPGcC9QIjrfRRQaIyxud5nAHGu6ThgP4AxxiYiRa7l44CVNbZZc51ficg0YBpAx44dG/ZTKLf497p/83PGz/y1oIiE6moKvLzJ9o9hv18UmV7BHLB4k+aoxlpdgj1/D1K07Yj1Q60jeOa8vzOyu56KUqqxuS08RORCIMcYs05ERh1urmVRU8e8463zW4MxbwBvACQlJf1uvmpaPt75Me9ue5crikrpk9eRN+wXstHRjVIC8bYIUcG+RAX5ER/iR3SQL9EhfkQEehEUUI2vXwURQV6M6TYQi0WfClfKE9x55DECGC8i5wP+OK95zADCRcTbdfQRD2S5ls8AOgAZIuINhAH5NdoPq7mOaoZWZK3gqZVPclqVg8mHvJnV9xluTkokJsSX6GA/Qv19sGhPtko1aW77Z5sx5gFjTLwxpjPOC94/GmOmAD8BE12LTQU+d00vcL3HNf9HY4xxtU8WET/XnVoJwGp31a3cK60ojbsX300nhxdPZ+XwWszDPDTxVE7tFkX3NiGEB/pqcCjVDHjiOY/7gLki8iSwAZjpap8JvOe6IJ6PM3AwxiSLyEfANsAG3Kx3WjVPBZUF3PLDLfjYrbySkc5rlhu4e+rl2outUs2QOP9x37IkJSWZtWvXeroMVUO1vZq/fPcXtuZu5n+ZmaSXn0K7a2YxvFu0p0tTSrmIyDpjTNKJLKv/5FNuZ4zh7yv+zvqc9Tx8qISgimjyz3pGg0OpZkzDQ7ndzK0zWbB7AddVBzKmqJj3Oz7BdWf18XRZSqk/QMNDudWivYt4cf2LjPVtzx2Z2/mX/83c8+fxOJ//VEo1Vxoeym2SDyXz4NIH6R/Ugad3rmSOYwyXXXMnof4+ni5NKfUHaXgotzhQdoBbf7yVSN9Qnt2xme32rgRc+Cy92oXWvbJSqsnT8FANrtxazq0/3kq5tZxnDpQQXG3nu97/5JKhXT1dmlKqgWh4qAZld9i5b+l97CzYyeNeXRiYv4OXQu/h1kt18CWlWhIND9WgZqyfweL9i7k79mzGbv+at5jANdfehL+Pl6dLU0o1oOOGh4iMrjHd5ah5f3JXUap5mp86n3eS32FSx7FcvmI2qxyJdJv0TzpEBnq6NKVUA6vryOP5GtOfHDXvoQauRTVjBZUFPLv6WZJiBnHT2h8ocfiyadgLnNmrvadLU0q5QV3hIceYru29asVe3fQqZbYybjlUTnhpOv9r+zDXn3eqp8tSSrlJXeFhjjFd23vVSqUVpvHRjo+4OLQPQ9IW8T+fK5g+9Rq8tHdcpVqsunrV7SoiC3AeZRyexvW+y7FXU63J82ufJ8Dbn79sXcoKRx+GX/0UkUG+ni5LKeVGdYXHhBrTzx817+j3qhVanrmcpZlLmerdi3hbCiuHPsjEjpGeLksp5WbHDQ9jzM8134uID9AXyDTG5LizMNX02Rw2nlv7HO0DY7kh+WeW+Ixgwnnne7ospVQjqOtW3ddEpI9rOgzYBLwLbBCRKxqhPtWEfbrrU1ILU7koP5QQU0XM+Md1YCelWom6/k8/3RiT7Jq+FthpjOkHDAHudWtlqkkrqS7hvxv/S2JIIjdk/cymqPPp1e+ExpBRSrUAdYVHdY3pMcB8AGPMAbdVpJqFN7e8SX5lPmN2V+Ilhh6TnvR0SUqpRlRXeBSKyIUiMggYAXwLICLeQIC7i1NNU0ZJBu9ve59+/kO5rvQXsrpPJritdnqoVGtS191W04GXgFjgjhpHHGcDX7mzMNV0vbDuBSxYuGD7fuz1oaNJAAAZrElEQVQWXzpOeMTTJSmlGlldd1vtBMbV0r4QWOiuolTTtf7ger7b+x09bSOZYj6g5JTb8Qtp6+mylFKN7LjhISIvHW++Mea2hi1HNWUO4+DZNc8S6hPFtbu3UeUbQsjoOz1dllLKA+o6bXUjsBX4CMhC+7Nq1b5K+4rkvGS65J3FBZZZOM54BAIiPF2WUsoD6gqPdsBlwCTABnwIfGKMKXB3YappqbBVMGP9DMIsXbm/cBW2oGi8h9/o6bKUUh5y3LutjDF5xpjXjDFnAdcA4UCyiFzVGMWppuOd5HfIKc8hOr0bp1m24z3qXvAN8nRZSikPqevIAwARGQxcgfNZj2+Ade4sSjUtB8sO8taWt/CrGsg/HD/jCI3HMuQaT5ellPKgui6Y/x24EEgB5gIPGGNsjVGYajpe2vAS1XYbAzPb0ksWwFn/BW8/T5ellPKguo48HgbSgAGun6dFBJwXzo0xpr97y1OelpyXzILdC7Dnn8E//L6DkAToP9nTZSmlPKyu8NAxO1oxYwzPrXkOLxPCuUVBtGcvjH4HvE7obKdSqgWr6yHBvbW1i4gXMBmodb5qGX7Y9wPrDq7DemA8jwZ8BmH9odeEuldUSrV4dXXJHioiD4jIyyIyVpxuxXkq6/LGKVF5QrW9mufWPA/VsdzmbSekIhPOfgQs2uW6Uqru01bvAQXACuAG4G+ALzDBGLPRzbUpD/og5QOyyjIxB6/iL75vQsfToPs5ni5LKdVE1DmGuWv8DkTkf8AhoKMxpsTtlSmPSS1I5eWNr2Ar7ckr7Yvw2ZcDZ88C0Q4GlFJOdZ2DsB6eMMbYgT0nGhwi4i8iq0Vkk4gku277RUTeEZE9IrLR9TPQ1S4i8pKIpIrIZtezJYe3NVVEdrl+ptb/Y6oTVVRVxK0/3ka11Zv48ksYlTsbuo+BTqd5ujSlVBNS15HHABEpdk0LEOB6f/hW3dDjrFsFjDbGlLrGPv9FRL5xzfubMWbeUcufByS4foYBrwLDRCQSeBRIAgywTkQWaBcpDc/usHPvknvJLM2ibP803u6TgmwpgNEPebo0pVQTU9fdVl4nu2FjjAFKXW99XD/mOKtMAN51rbdSRMJFpB0wClhkjMkHEJFFOLuJn3OytanavbjhRZZnLacy+0/cM3gQ8ZuehN4XQ/uBni5NKdXEuPXWGRHxEpGNQA7OAFjlmvWU69TUCyJy+FHlOGB/jdUzXG3Haj/6d00TkbUisjY3N7fBP0tL93Xa17y99W1M8akMDD+X6V4LwFYBZ/2fp0tTSjVBbg0PY4zdGDMQiAeGikhf4AEgETgFiATucy1e29VYc5z2o3/XG8aYJGNMUkxMTIPU31qk5KXwyPJH8bN1w5J/Ma+MrMSy+nUYeCXE9PB0eUqpJqhRbto3xhQCi4Fxxphs41QFvA0MdS2WAXSosVo8zjFEjtWuGkB+ZT63/3Q7XiaIvLTJvHhee2K+mQaRXeHcpz1dnlKqiXJbeIhIjIiEu6YDgHOA7a7rGIizk6yLcQ42BbAAuNp119VwoMgYk41zuNuxIhIhIhHAWHQI3AZhdVi5e/HdHCrPI3f3FVw9JIGzNt0F1gqYPBv8wzxdolKqiXJnJ0XtgFmurkwswEfGmC9F5EcRicF5OmojztEKAb4GzgdSgXLgWgBjTL6IPAGscS33+OGL5+qPeW7Nc6w9uBavQ1fSIyyRh+UtyFwHk96HmJ6eLk8p1YS5LTyMMZuBQbW0jz7G8ga4+Rjz3gLeatACW7nPdn3GnO1ziLGPIatwILPO2ob3kvfh9Hug10WeLk8p1cRpR0Wt0KbcTTyx8gni/QeQtnMUL4200vaXh53dj5z1oKfLU0o1A9q3diuTU57DnT/dSbhvNDu3TOCKXgGM2XILhMXBpf8Dy0k/2qOUakX0yKMVqbZXc+fiOym1llKRcTXxQaE8Uf0cUlUMkz+AgAhPl6iUaiY0PFoJYwxPrXqKzbmb6WyuJycvko+7fIl35iqY8DK07ePpEpVSzYiGRysxd8dcPt31KSOiJrF6azxv9NtOm+3vwmm3Qt9LPV2eUqqZ0fBoBdYcWMOzq58lKWYEi1cN4s8d8xid+k/ociac/Ziny1NKNUMaHi3c/uL93PPzPcSFxJO58xLifCr4e8U/keC2MPFtHY9cKXVSNDxasEMVh5j+/XTsxk53x63sPlDFvOg38KrIg0nvQVCUp0tUSjVTGh4tVEl1CTd9fxOHKg5xdZcnmL/GyuxOXxORswouelG7WVdK/SEaHi1Qlb2K23+6ndSCVG7q9Tj//dbKLdEbGH5wDgydDgMme7pEpVQzp+HRwtgddu5fcj9rDqzh3La38/QnDgb7ZXBX5X+g42lw7lOeLlEp1QJoeLQgxhieXPUk3+/7nh7eU5j7UwwXdrEw028GloBIuHwWePl4ukylVAugt9q0IP/d+F/m7ZxHcMVY1u/txyNnhHFt6m1I+SGY+gUEt/F0iUqpFkLDo4WYnTKb1ze/DiVDKcsbyweXteHUpddAWR5c9SnED/F0iUqpFkTDowX4Ou0b/rn6GawlvelmruLNq9vSfv5lUFUMV3+uwaGUanAaHs3cd2lLuH/JA9gqOnF+m3v4xxmh+M2+GGwVcPUCvSVXKeUWGh7N2PxtK3l41Z04rG24d+AzXNNNkHcvAocdrvlKOztUSrmNhkcz9covy3llx11YCOa/o19hVEgVvHORczyOa76CNomeLlEp1YJpeDQzlVY7989fyqLCh/H1sTBr3Ez6mzJ452Lw9nfeVRXd3dNlKqVaOA0PD1lzYA2L9i4iyj+KmMAYogOiiQlwvvoQQmmVg8JyK8UVVopcP4UVVhZsTiXd9zn8Aip597x36FdVBO9fAn6hMHUBRHb19EdTSrUCGh4eUGGr4K6f7qWougCD/XfzjbFgbEEYWyjGFoLDFoKxhWBsofhHbMQ3IJ/XxrxKv4pSeP9SZweHU7+A8I4e+DRKqdZIw8MD3kt+j8LqQ5D1VzqFJBIYUI6fXxneviVYfEoxliKsFFHpKKTMXkCJNY3i6gIcOLCIhWfPeI5hVVaYfTmEtnPeVRUW5+mPpZRqRTQ8GlleRR5vbJ6JtaQ3z5w3ngkDT+yPvs1ho6CyABEhOnsrfDARIjo5n+MIiXVz1UopdSTt26qRvbrpVarslYSWT+D8fu1OeD1vi7fz2kjGRvhgkvPaxtQvNTiUUh6h4dGI0orS+HjnPKoLhnHN0KH4eNVj9xsD69+DuVdAdA+45ksIjnFfsUopdRx62qoRzVg3AzE+WArHcuXQelzcriiAL26HbZ9D59OdowAGRLivUKWUqoOGRyNZe2AtP+3/CVvuOCYOSiQ80PfEVtyzFD6bDqUH4ZzH4LTbnA8CKqWUB2l4NAKHcfCvtf8iyBLFgbwRXDu1c90r2aph8dPwywyI6gY3fA/tB7m9VqWUOhEaHo3g2z3fsjVvK155V3B2zzi6xgQff4VDqfDpDZC1AQZfDeP+Cb5BjVOsUkqdAA0PN6u2V/PShpdo69+V1Jx+XD++y7EXNgY2vAff3AdevnD5e9B7fOMVq5RSJ0jDw83mbJ9DZmkmUSW3khgbxqndompfsDzfeVE8ZQF0OQMufk0f/FNKNVkaHm5UVFXE65tfp0/4MFamxPHcxC6IyO8X3LMEPp0OZbkw5nE49Vaw6F3USqmmy21/oUTEX0RWi8gmEUkWkb+72ruIyCoR2SUiH4qIr6vdz/U+1TW/c41tPeBq3yEi57qr5ob2+ubXKbOWQf75RAf7MX5g+yMXsFXDokdh1njwDYQbFsGI2zU4lFJNnjv/SlUBo40xA4CBwDgRGQ48A7xgjEkACoDrXctfDxQYY7oDL7iWQ0R6A5OBPsA44BURccu9qsYYPlyzj6IK6x/e1v7i/czZPofRcReycocfVw3vhJ93jbLz02DmGFg2A4ZMhelL9G4qpVSz4bbwME6lrrc+rh8DjAbmudpnARe7pie43uOaf7Y4z/FMAOYaY6qMMXuAVGCoO2renVvG/322lbs+3IjDYf7Qtl7c8CI+Fh8shefi621hyvAaDwVWFMB7l0BBOkx6Hy56Ue+mUko1K249PyIiXiKyEcgBFgG7gUJjjM21SAZw+KpwHLAfwDW/CIiq2V7LOjV/1zQRWSsia3Nzc0+q3u5tgnnkot78sD2Hl37cdVLbANiUu4mF6QuZlHAVX20s45KBcUQH+zlnOhzO6xtFmTDlY+h10Un/HqWU8hS3hocxxm6MGQjE4zxa6FXbYq7XWq4kY47TfvTvesMYk2SMSYqJOfk+n64a3olLB8cz4/td/JBysN7rG2P419p/ER0QjVfJKCqtDq4bWeP23KXPw66FMO4f0MEtB1BKKeV2jXJl1hhTCCwGhgPhInL4Lq94IMs1nQF0AHDNDwPya7bXsk6DExGeuqQvfeNCuePDjew5VFav9X/Y9wMbcjYwvf9fmbPqIKcnRNMzNsQ5c9f38NPT0H8SnHKDG6pXSqnG4c67rWJEJNw1HQCcA6QAPwETXYtNBT53TS9wvcc1/0djjHG1T3bdjdUFSABWu6tuAH8fL1778xC8LcK0d9dSVmWreyXA6rAyY/0Muod3x7t8KAeLq3476ihIh0+uh7Z94MIZUNstu0op1Uy488ijHfCTiGwG1gCLjDFfAvcBd4lIKs5rGjNdy88EolztdwH3AxhjkoGPgG3At8DNxpjfj93awOIjAvnPFYPZnVvK3+Ztwpljx/fxjo/ZW7yXOwffyTvL9tEtJogzE2LAWgEfXgUYZ4+4voHuLl8ppdzKbQ8JGmM2A7+799QYk0Ytd0sZYyqBy46xraeApxq6xrqMTIjmvnGJ/OOb7by+JI0bz+x2zGVLqkt4ddOrDIsdhm91b7ZmruKpS/piEeCru+HAZrjyI+cgTkop1czp02h1mHZGVy7o145nv93O0l3Hvotr5paZFFUVcXfS3by1LJ3wQB/+NCge1r0NG2fDmfdBj2bzfKNSSh2XhkcdRIRnJ/ane5tgbpuzgf355b9bJrs0m/e2vceFXS8kkI4sSjnIn4d1IiBnA3x9L3Q/xxkeSinVQmh4nIAgP29evyoJm8Nw4/vrqLQeecnl5Y0vIyLcOuhW3l6WjrdFmDogCD66GkLbwZ/e1AGclFItiobHCeoSHcSMSQNJzirmwc+2/HoBPbs0m6/SvmJyz8kEeUfz8dr9TOjXhpiFN0F5nvMJ8sBID1evlFINS8OjHs7u1ZY7zkng0/WZvLtiLwAf7vgQg+HKXlfy4er9lFXbuc9vnrOn3Av+De0GeLhqpZRqeNolez3dNjqBLRlFPPHlNrq28WXernmM7jCaNgGxvLN8MbfGbiNm06uQdB0MmuLpcpVSyi30yKOeLBbh35MG0iEykNu+eIuiqiKm9JrCwuSD+BXt5vbSFyAuyTl0rFJKtVAaHichLMCH1/48GGvQz/ja4+kbNZDZS5KZ6f8iXr4BcPm74O3n6TKVUsptNDxOUpHZjvgdoOjgMK5/Zw1XHnyOTiYTmfiWDh+rlGrxNDxO0uyU2UT4RXDNgEtITH+fC71WYjvrYeh6pqdLU0opt9ML5ichoySDxRmLub7v9fy1SyRmzUfsjzmLDmfc6enSlFKqUeiRx0mYu30ugnB5z8vxXvIMPhbocMWL2lOuUqrV0PCop3JrOZ/u+pQxncYQW17k7LfqlBsgopOnS1NKqUaj4VFPX6Z9SYm1hCm9psAPj4NPEJx+j6fLUkqpRqXhUQ/GGGanzKZ3VG8GVFbB9i9hxO0QFOXp0pRSqlFpeNTDiuwVpBWl8efEKcj3j0FQGzj1r54uSymlGp2GRz18kPIBkf6RnGvzgn3LYdR94Bvk6bKUUqrRaXicoH3F+1iSsYTLe0zE98cnnSMCDp5a94pKKdUC6XMeJ2jO9jl4Wby43OYPOdtg4tvg5ePpspRSyiP0yOMElFnL+Cz1M87teA4xv7wI7QdB74s9XZZSSnmMHnmcgM9TP6fMWsYUewAU7YcJL4NFc1cp1XrpX8A6OIyDD7Z/QP+oPvRb8y50Gw1dR3m6LKWU8igNjzosy1zG3uK9TDEhUFEA5zzm6ZKUUsrjNDzqMHv7bGL8Ixmz6QvoO1GHlVVKKTQ8jmtP0R6WZS5jkoTj47DC6P/zdElKKdUkaHgcxwcpH+Bj8WbijmXOMckju3q6JKWUahI0PI6hpLqEz3d/znkSSpTFF874m6dLUkqpJkNv1T2G+anzqbBVMCUzDU67G4LbeLokpZRqMvTIoxZ2h50PUj5gsPGjt3cYnHaLp0tSSqkmRcOjFkszl5JRmsGVORlw5r3gF+LpkpRSqknR8KjF7G2zaesQRvvGwJBrPV2OUko1ORoeR0ktSGXlgZVMLizAZ/Qj4O3r6ZKUUqrJ0fA4ygfb3sfPwKUBHaDvpZ4uRymlmiS3hYeIdBCRn0QkRUSSReR2V/tjIpIpIhtdP+fXWOcBEUkVkR0icm6N9nGutlQRud9dNRdVFfHF7s+5oLSUiHMe184PlVLqGNx5q64NuNsYs15EQoB1IrLINe8FY8zzNRcWkd7AZKAP0B74XkR6uGb/FxgDZABrRGSBMWZbQxdsqkq4orSCC4MToNvZDb15pZRqMdwWHsaYbCDbNV0iIilA3HFWmQDMNcZUAXtEJBUY6pqXaoxJAxCRua5lGzw8wsWbuyKHwMi7QKShN6+UUi1Go5yXEZHOwCBglavpFhHZLCJviUiEqy0O2F9jtQxX27Haj/4d00RkrYiszc3NPblCQ2Jh8myIH3Jy6yulVCvh9vAQkWDgE+AOY0wx8CrQDRiI88jkX4cXrWV1c5z2IxuMecMYk2SMSYqJiWmQ2pVSStXOrd2TiIgPzuCYbYz5FMAYc7DG/DeBL11vM4AONVaPB7Jc08dqV0op5QHuvNtKgJlAijHm3zXa29VY7BJgq2t6ATBZRPxEpAuQAKwG1gAJItJFRHxxXlRf4K66lVJK1c2dRx4jgKuALSKy0dX2IHCFiAzEeeopHZgOYIxJFpGPcF4ItwE3G2PsACJyC7AQ8ALeMsYku7FupZRSdRBjfnf5oNlLSkoya9eu9XQZSinVrIjIOmNM0oksq0/BKaWUqjcND6WUUvWm4aGUUqreWuQ1DxHJBfYC0cAhD5fTVOi+cNL94KT7wUn3g9Ph/dDJGHNCD8q1yPA4TETWnujFn5ZO94WT7gcn3Q9Ouh+cTmY/6GkrpZRS9abhoZRSqt5aeni84ekCmhDdF066H5x0PzjpfnCq935o0dc8lFJKuUdLP/JQSinlBhoeSiml6q3FhkdjjXve1IlIuohscY0X36o6/HINNpYjIltrtEWKyCIR2eV6jTjeNlqCY+yHx0Qk0/W92Cgi53uyxsYgIh1E5CcRSRGRZBG53dXeqr4Tx9kP9fpOtMhrHiLiBeykxrjnwBXuGPe8qRORdCDJGNPqHoQSkTOAUuBdY0xfV9uzQL4x5p+uf1REGGPu82Sd7naM/fAYUGqMed6TtTUm13AQ7Ywx60UkBFgHXAxcQyv6ThxnP1xOPb4TLfXIYyiucc+NMdXA4XHPVStijFkC5B/VPAGY5ZqehfN/mhbtGPuh1THGZBtj1rumS4AUnENat6rvxHH2Q7201PA4oXHPWwkDfCci60RkmqeLaQLaGmOywfk/EdDGw/V40i0istl1WqtFn6o5moh0BgYBq2jF34mj9gPU4zvRUsPjhMY9byVGGGMGA+cBN7tOYSj1KtANGAhkA//ybDmNR0SCcQ6PfYcxptjT9XhKLfuhXt+JlhoexxsPvVUxxmS5XnOAz3Ce0mvNDh4eCtn1muPhejzCGHPQGGM3xjiAN2kl3wsR8cH5B3O2MeZTV3Or+07Uth/q+51oqeGh454DIhLkuiCGiAQBY/ltzPjWagEw1TU9Ffjcg7V4zOE/li6X0Aq+FyIiwEwgxRjz7xqzWtV34lj7ob7fiRZ5txWA6zazGfw27vlTHi6p0YlIV5xHG+Acr/6D1rQfRGQOMApnd9MHgUeB+cBHQEdgH3CZMaZFX0w+xn4YhfP0hAHSgemHz/u3VCIyElgKbAEcruYHcZ7vbzXfiePshyuox3eixYaHUkop92mpp62UUkq5kYaHUkqpetPwUEopVW8aHkoppepNw0MppVS9aXgodYJEpHPNnmmb6jaVagwaHkoppepNw0OpkyAiXUVkg4icclT7hzXHQRCRd0TkUtcRxlIRWe/6Oa2WbV4jIi/XeP+liIxyTY8VkRWudT929UuklMdoeChVTyLSE2e/QNcaY9YcNXsuMMm1nC9wNvA1zv6Sxrg6qZwEvFSP3xcNPASc41p/LXDXH/0cSv0R3p4uQKlmJgZn30eXGmOSa5n/DfCSiPgB44AlxpgKEQkDXhaRgYAd6FGP3zkc6A0sc3ZLhC+w4g98BqX+MA0PpeqnCOdYMSOA34WHMaZSRBYD5+I8wpjjmnUnzn6lBuA84q+sZds2jjwb4O96FWCRMeaKBqhfqQahp62Uqp9qnCPNXS0iVx5jmbnAtcDpwEJXWxiQ7eru+iqcHXYeLR0YKCIWEenAb11irwRGiEh3ABEJFJH6HLko1eA0PJSqJ2NMGXAhcKeI1Da88XfAGcD3rmGQAV4BporISpynrMpqWW8ZsAdnb6fPA4eHCs3FOc72HBHZjDNMEhvsAyl1ErRXXaWUUvWmRx5KKaXqTcNDKaVUvWl4KKWUqjcND6WUUvWm4aGUUqreNDyUUkrVm4aHUkqpevt/fVx2pMb3+fcAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for k,v in k_rmse_results.items():\n", " x = list(v.keys())\n", " y = list(v.values())\n", " \n", " plt.plot(x,y)\n", " plt.xlabel('k value')\n", " plt.ylabel('RMSE')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }