\n","\n","\n","# Simple Linear Regression\n","\n","\n","Estimated time needed: **15** minutes\n"," \n","\n","## Objectives\n","\n","After completing this lab you will be able to:\n","\n","* Use scikit-learn to implement simple Linear Regression\n","* Create a model, train it, test it and use the model\n"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["### Importing Needed packages\n"]},{"cell_type":"code","execution_count":4,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[],"source":["import matplotlib.pyplot as plt\n","import pandas as pd\n","# import pylab as pl\n","import numpy as np\n","%matplotlib inline"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["### Downloading Data\n","To download the data, we will use !wget to download it from IBM Object Storage.\n"]},{"cell_type":"code","execution_count":7,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[{"name":"stdout","output_type":"stream","text":["--2023-10-21 19:03:31-- https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%202/data/FuelConsumptionCo2.csv\n","Resolving cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud (cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud)... "]},{"name":"stdout","output_type":"stream","text":["198.23.119.245\n","Connecting to cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud (cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud)|198.23.119.245|:443... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 72629 (71K) [text/csv]\n","Saving to: ‘FuelConsumption.csv’\n","\n","FuelConsumption.csv 100%[===================>] 70.93K 315KB/s in 0.2s \n","\n","2023-10-21 19:03:32 (315 KB/s) - ‘FuelConsumption.csv’ saved [72629/72629]\n","\n"]}],"source":["!wget -O FuelConsumption.csv https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%202/data/FuelConsumptionCo2.csv"]},{"cell_type":"markdown","metadata":{},"source":["__Did you know?__ When it comes to Machine Learning, you will likely be working with large datasets. As a business, where can you host your data? IBM is offering a unique opportunity for businesses, with 10 Tb of IBM Cloud Object Storage: [Sign up now for free](http://cocl.us/ML0101EN-IBM-Offer-CC)\n"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["\n","## Understanding the Data\n","\n","### `FuelConsumption.csv`:\n","We have downloaded a fuel consumption dataset, **`FuelConsumption.csv`**, which contains model-specific fuel consumption ratings and estimated carbon dioxide emissions for new light-duty vehicles for retail sale in Canada. [Dataset source](http://open.canada.ca/data/en/dataset/98f1a129-f628-4ce4-b24d-6f16bf24dd64?utm_medium=Exinfluencer&utm_source=Exinfluencer&utm_content=000026UJ&utm_term=10006555&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkML0101ENSkillsNetwork1047-2023-01-01)\n","\n","- **MODELYEAR** e.g. 2014\n","- **MAKE** e.g. Acura\n","- **MODEL** e.g. ILX\n","- **VEHICLE CLASS** e.g. SUV\n","- **ENGINE SIZE** e.g. 4.7\n","- **CYLINDERS** e.g 6\n","- **TRANSMISSION** e.g. A6\n","- **FUEL CONSUMPTION in CITY(L/100 km)** e.g. 9.9\n","- **FUEL CONSUMPTION in HWY (L/100 km)** e.g. 8.9\n","- **FUEL CONSUMPTION COMB (L/100 km)** e.g. 9.2\n","- **CO2 EMISSIONS (g/km)** e.g. 182 --> low --> 0\n"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["## Reading the data in\n"]},{"cell_type":"code","execution_count":8,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
MODELYEAR
\n","
MAKE
\n","
MODEL
\n","
VEHICLECLASS
\n","
ENGINESIZE
\n","
CYLINDERS
\n","
TRANSMISSION
\n","
FUELTYPE
\n","
FUELCONSUMPTION_CITY
\n","
FUELCONSUMPTION_HWY
\n","
FUELCONSUMPTION_COMB
\n","
FUELCONSUMPTION_COMB_MPG
\n","
CO2EMISSIONS
\n","
\n"," \n"," \n","
\n","
0
\n","
2014
\n","
ACURA
\n","
ILX
\n","
COMPACT
\n","
2.0
\n","
4
\n","
AS5
\n","
Z
\n","
9.9
\n","
6.7
\n","
8.5
\n","
33
\n","
196
\n","
\n","
\n","
1
\n","
2014
\n","
ACURA
\n","
ILX
\n","
COMPACT
\n","
2.4
\n","
4
\n","
M6
\n","
Z
\n","
11.2
\n","
7.7
\n","
9.6
\n","
29
\n","
221
\n","
\n","
\n","
2
\n","
2014
\n","
ACURA
\n","
ILX HYBRID
\n","
COMPACT
\n","
1.5
\n","
4
\n","
AV7
\n","
Z
\n","
6.0
\n","
5.8
\n","
5.9
\n","
48
\n","
136
\n","
\n","
\n","
3
\n","
2014
\n","
ACURA
\n","
MDX 4WD
\n","
SUV - SMALL
\n","
3.5
\n","
6
\n","
AS6
\n","
Z
\n","
12.7
\n","
9.1
\n","
11.1
\n","
25
\n","
255
\n","
\n","
\n","
4
\n","
2014
\n","
ACURA
\n","
RDX AWD
\n","
SUV - SMALL
\n","
3.5
\n","
6
\n","
AS6
\n","
Z
\n","
12.1
\n","
8.7
\n","
10.6
\n","
27
\n","
244
\n","
\n"," \n","
\n","
"],"text/plain":[" MODELYEAR MAKE MODEL VEHICLECLASS ENGINESIZE CYLINDERS \\\n","0 2014 ACURA ILX COMPACT 2.0 4 \n","1 2014 ACURA ILX COMPACT 2.4 4 \n","2 2014 ACURA ILX HYBRID COMPACT 1.5 4 \n","3 2014 ACURA MDX 4WD SUV - SMALL 3.5 6 \n","4 2014 ACURA RDX AWD SUV - SMALL 3.5 6 \n","\n"," TRANSMISSION FUELTYPE FUELCONSUMPTION_CITY FUELCONSUMPTION_HWY \\\n","0 AS5 Z 9.9 6.7 \n","1 M6 Z 11.2 7.7 \n","2 AV7 Z 6.0 5.8 \n","3 AS6 Z 12.7 9.1 \n","4 AS6 Z 12.1 8.7 \n","\n"," FUELCONSUMPTION_COMB FUELCONSUMPTION_COMB_MPG CO2EMISSIONS \n","0 8.5 33 196 \n","1 9.6 29 221 \n","2 5.9 48 136 \n","3 11.1 25 255 \n","4 10.6 27 244 "]},"execution_count":8,"metadata":{},"output_type":"execute_result"}],"source":["df = pd.read_csv(\"FuelConsumption.csv\")\n","\n","# take a look at the dataset\n","df.head()\n","\n"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["### Data Exploration\n","Let's first have a descriptive exploration on our data.\n"]},{"cell_type":"code","execution_count":9,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[{"data":{"text/html":["
"],"text/plain":[" ENGINESIZE CYLINDERS FUELCONSUMPTION_COMB CO2EMISSIONS\n","0 2.0 4 8.5 196\n","1 2.4 4 9.6 221\n","2 1.5 4 5.9 136\n","3 3.5 6 11.1 255\n","4 3.5 6 10.6 244\n","5 3.5 6 10.0 230\n","6 3.5 6 10.1 232\n","7 3.7 6 11.1 255\n","8 3.7 6 11.6 267"]},"execution_count":10,"metadata":{},"output_type":"execute_result"}],"source":["cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]\n","cdf.head(9)"]},{"cell_type":"markdown","metadata":{},"source":["We can plot each of these features:\n"]},{"cell_type":"code","execution_count":null,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[],"source":["viz = cdf[['CYLINDERS','ENGINESIZE','CO2EMISSIONS','FUELCONSUMPTION_COMB']]\n","viz.hist()\n","plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["Now, let's plot each of these features against the Emission, to see how linear their relationship is:\n"]},{"cell_type":"code","execution_count":null,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[],"source":["plt.scatter(cdf.FUELCONSUMPTION_COMB, cdf.CO2EMISSIONS, color='blue')\n","plt.xlabel(\"FUELCONSUMPTION_COMB\")\n","plt.ylabel(\"Emission\")\n","plt.show()"]},{"cell_type":"code","execution_count":null,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false},"scrolled":true},"outputs":[],"source":["plt.scatter(cdf.ENGINESIZE, cdf.CO2EMISSIONS, color='blue')\n","plt.xlabel(\"Engine size\")\n","plt.ylabel(\"Emission\")\n","plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["## Practice\n","Plot __CYLINDER__ vs the Emission, to see how linear is their relationship is:\n"]},{"cell_type":"code","execution_count":null,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[],"source":["# write your code here\n","\n","\n"]},{"cell_type":"markdown","metadata":{},"source":["Click here for the solution\n","\n","```python \n","plt.scatter(cdf.CYLINDERS, cdf.CO2EMISSIONS, color='blue')\n","plt.xlabel(\"Cylinders\")\n","plt.ylabel(\"Emission\")\n","plt.show()\n","\n","```\n","\n","\n"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["#### Creating train and test dataset\n","Train/Test Split involves splitting the dataset into training and testing sets that are mutually exclusive. After which, you train with the training set and test with the testing set. \n","This will provide a more accurate evaluation on out-of-sample accuracy because the testing dataset is not part of the dataset that have been used to train the model. Therefore, it gives us a better understanding of how well our model generalizes on new data.\n","\n","This means that we know the outcome of each data point in the testing dataset, making it great to test with! Since this data has not been used to train the model, the model has no knowledge of the outcome of these data points. So, in essence, it is truly an out-of-sample testing.\n","\n","Let's split our dataset into train and test sets. 80% of the entire dataset will be used for training and 20% for testing. We create a mask to select random rows using __np.random.rand()__ function: \n"]},{"cell_type":"code","execution_count":12,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[],"source":["msk = np.random.rand(len(df)) < 0.8\n","train = cdf[msk]\n","test = cdf[~msk]"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["### Simple Regression Model\n","Linear Regression fits a linear model with coefficients B = (B1, ..., Bn) to minimize the 'residual sum of squares' between the actual value y in the dataset, and the predicted value yhat using linear approximation. \n"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["#### Train data distribution\n"]},{"cell_type":"code","execution_count":null,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[],"source":["plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS, color='blue')\n","plt.xlabel(\"Engine size\")\n","plt.ylabel(\"Emission\")\n","plt.show()"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["#### Modeling\n","Using sklearn package to model data.\n"]},{"cell_type":"code","execution_count":21,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[{"name":"stdout","output_type":"stream","text":["Coefficients: [[39.06627836]]\n","Intercept: [125.0273184]\n"]}],"source":["from sklearn import linear_model\n","regr = linear_model.LinearRegression()\n","train_x = np.asanyarray(train[['ENGINESIZE']])\n","train_y = np.asanyarray(train[['CO2EMISSIONS']])\n","regr.fit(train_x, train_y)\n","# The coefficients\n","print ('Coefficients: ', regr.coef_)\n","print ('Intercept: ',regr.intercept_)"]},{"cell_type":"markdown","metadata":{},"source":["As mentioned before, __Coefficient__ and __Intercept__ in the simple linear regression, are the parameters of the fit line. \n","Given that it is a simple linear regression, with only 2 parameters, and knowing that the parameters are the intercept and slope of the line, sklearn can estimate them directly from our data. \n","Notice that all of the data must be available to traverse and calculate the parameters.\n"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["#### Plot outputs\n"]},{"cell_type":"markdown","metadata":{},"source":["We can plot the fit line over the data:\n"]},{"cell_type":"code","execution_count":22,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"outputs":[{"data":{"text/plain":["Text(0, 0.5, 'Emission')"]},"execution_count":22,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAjsAAAGwCAYAAABPSaTdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB+4ElEQVR4nO3deVyU1f4H8M8wCgICCgqo4JJZ5tZqRqVpmktmKHbvzUyt/LWJ5pJYdr3tpZdK61banlaSt5KszMwltUVzK9O0a2q4hKKlCSoKOpzfH8cZZp/zzDwzzzB83q/XvJAzZ57nPAM1X87zPd9jEkIIEBEREUWoKKMHQERERBRMDHaIiIgoojHYISIioojGYIeIiIgiGoMdIiIiimgMdoiIiCiiMdghIiKiiFbH6AGEg6qqKuzfvx8JCQkwmUxGD4eIiIgUCCFw7NgxNG3aFFFRnudvGOwA2L9/PzIzM40eBhEREflh3759yMjI8Pg8gx0ACQkJAOSblZiYaPBoiIiISEVZWRkyMzNtn+OeMNgBbLeuEhMTGewQERHVML5SUAxNUH700UdhMpkcHm3btrU9f+rUKeTm5iIlJQX169fH4MGDcfDgQYdj7N27F/3790dcXBxSU1ORl5eHM2fOhPpSiIiIKEwZPrPTvn17LFu2zPZ9nTrVQxo/fjw+//xzfPjhh0hKSsLo0aORk5OD7777DgBgsVjQv39/pKenY/Xq1Thw4ACGDx+OunXr4umnnw75tRAREVH4MTzYqVOnDtLT013aS0tL8eabb6KgoADXXnstAODtt9/GBRdcgO+//x5XXHEFlixZgm3btmHZsmVIS0vDRRddhCeeeAIPPPAAHn30UURHR7s9Z0VFBSoqKmzfl5WVBefiiIiIyHCG19nZsWMHmjZtinPOOQdDhw7F3r17AQAbN27E6dOn0atXL1vftm3bonnz5lizZg0AYM2aNejYsSPS0tJsffr06YOysjJs3brV4zmnTp2KpKQk24MrsYiIiCKXocFOly5dMHv2bCxevBizZs1CUVERunbtimPHjqGkpATR0dFo0KCBw2vS0tJQUlICACgpKXEIdKzPW5/zZPLkySgtLbU99u3bp++FERERUdgw9DZWv379bP/u1KkTunTpghYtWuCDDz5AbGxs0M4bExODmJiYoB2fiIiIwofht7HsNWjQAOeddx527tyJ9PR0VFZW4ujRow59Dh48aMvxSU9Pd1mdZf3eXR4QERER1T5hFewcP34cu3btQpMmTXDppZeibt26WL58ue357du3Y+/evcjKygIAZGVlYcuWLTh06JCtz9KlS5GYmIh27dqFfPxEREQUfgy9jTVx4kQMGDAALVq0wP79+/HII4/AbDZjyJAhSEpKwsiRIzFhwgQkJycjMTERY8aMQVZWFq644goAQO/evdGuXTsMGzYM+fn5KCkpwZQpU5Cbm8vbVERERATA4GDn999/x5AhQ3D48GE0btwYV199Nb7//ns0btwYADBjxgxERUVh8ODBqKioQJ8+fTBz5kzb681mMxYuXIh7770XWVlZiI+Px4gRI/D4448bdUlERBQmLBbgm2+AAweAJk2Arl0Bs9noUZERTEIIYfQgjFZWVoakpCSUlpZyuwgioghQWAiMHQv8/nt1W0YG8MILQE6OceMifal+fodVzg4REVGgCguBm25yDHQAoLhYthcWGjMuMg6DHSIiihgWi5zRcXfPwto2bpzsR7UHgx0iIooY33zjOqNjTwhg3z7Zj2oPBjtERBQxDhzQtx9FBgY7REQUMZo00bcfRQYGO0REFDG6dpWrrkwm98+bTEBmpuxHtQeDHSIiihhms1xeDrgGPNbvn3+e9XZqGwY7REQUUXJygI8+Apo1c2zPyJDtrLNT+xhaQZmIiCgYcnKA7GxWUCaJwQ4REUUksxno3t3oUVA44G0sIiIiimgMdoiIiCiiMdghIiKiiMZgh4iIiCIagx0iIiKKaAx2iIiIKKIx2CEiIqKIxmCHiIiIIhqDHSIiIopoDHaIiIgoojHYISIioojGYIeIiIgiGoMdIiIiimgMdoiIiCiiMdghIiKiiMZgh4iIiCIagx0iIiKKaAx2iIiIKKIx2CEiIqKIxmCHiIiIIhqDHSIiIopoDHaIiIgoojHYISIiouDZsgXYts3QIYRNsDNt2jSYTCaMGzfO1ta9e3eYTCaHxz333OPwur1796J///6Ii4tDamoq8vLycObMmRCPnoiIiBz873+AyQR06gS0bw+UlRk2lDqGndnO+vXr8eqrr6JTp04uz9155514/PHHbd/HxcXZ/m2xWNC/f3+kp6dj9erVOHDgAIYPH466devi6aefDsnYiYiIyM6xY0DbtsD+/Y7t9esbMx6EwczO8ePH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Y+SO5JWVctXVrl0yR2fUKM7oEBFFOtXPbwY7iJxgB9BevdmZr7o53mr8GBnsEBFR7aP6+c0E5QijZQWXO/6u6nIXZGVkyHyeYN7GIiIi8oXBTgRSXcHljj+rujzd9ioulu3BztshIiLyhgnK5CA1VVs/b8UMrW3BKGZIRESkisEOBUTLbS8iIiIjMNghB4cOaetnVDFDIiIiVQx2yIHW4oSh3C6CiIjIHwx2yIHW4oR6FzMkIiLSG4MdcqB1+wcjt4sgIiJSwWCHXGjd/sHI7SKIiIh8YQVlRFYFZT1prYjMCspERBRKrKBMAdNanDCQYoZERETBwttYREREFNEY7BAREVFE420s8og5O0REFAkY7JBbWncx567nREQUrngbKwJZLMDKlcD778uvWjfhtO5i7rznlXUX88LCwPoTERGFEpeeI7KWngc6w2KxAC1bet7c02SSxysqkreotPYnIiLSi+rnN2d2IogeMyxadzHnrudERBTuGOxECItFzui4m6ezto0b5/uWltZdzLnrORERhTsGOxFCrxkW7npORESRhsFOhNBrhoW7nhMRUaRhsBMh9Jph4a7nREQUaRjsRAg9Z1i46zkREUUSQ4Odr7/+GgMGDEDTpk1hMpmwYMECh+eFEHj44YfRpEkTxMbGolevXtixY4dDnyNHjmDo0KFITExEgwYNMHLkSBw/fjyEVxEe9J5hyckBdu8GVqwACgrk16Iiz4GL1v5EREShYmiwc+LECVx44YV4+eWX3T6fn5+P//znP3jllVewdu1axMfHo0+fPjh16pStz9ChQ7F161YsXboUCxcuxNdff4277rorVJcQVvSeYbHuYj5kiPzqK1DS2p+IiCgUwqaooMlkwscff4yBAwcCkLM6TZs2xf3334+JEycCAEpLS5GWlobZs2fj5ptvxi+//IJ27dph/fr1uOyyywAAixcvxvXXX4/ff/8dTZs2VTp3JBUVBLhHFRER1Q41vqhgUVERSkpK0KtXL1tbUlISunTpgjVr1gAA1qxZgwYNGtgCHQDo1asXoqKisHbtWo/HrqioQFlZmcMjknCGhYiIqFrYBjslJSUAgLS0NIf2tLQ023MlJSVITU11eL5OnTpITk629XFn6tSpSEpKsj0yMzN1Hj0RERGFi7ANdoJp8uTJKC0ttT327dtn9JCIiIgoSMI22ElPTwcA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2ID77rsPjz/+OLZv347FixejW7dubvteeeWVOHDggO3x1VdfoV69erb+33zzDYYPH46xY8di27ZtePXVVzF79mw89dRTWt86IvKXsZuuE1GkGDFihDCbzSI+Pt7h8dRTT9n6ABBTpkyxfX/8+HEBQHzxxRdCCCEeeOAB0aFDB4fj/vOf/xQAxF9//SWEEOLtt98WSUlJtucfeeQRERcXJ8rKymxteXl5okuXLkIIIU6dOiXi4uLE6tWrHY47cuRIMWTIELfXMn/+fJGYmOhwTHvXXHONGDt2rEv7n3/+Kc455xwxatQoW1vPnj3F008/7dDv3XffFU2aNHF7bCLSH3N2iEg3PXr0wKxZsxzanPNbOnXqZPt3fHw8EhMTcejQIQDA9u3b0blzZ4f+l19+uc/ztmzZ0iFZuEmTJrZj7ty5E+Xl5bjuuuscXlNZWYmLL77Y7fGuu+46tGjRAueccw769u2Lvn372m69eXL69GkMHjwYLVq0wAsvvGBr/+mnn/Ddd985zORYLBacOnUK5eXlXo9JRPpgsENEuomPj8e5557rtU/dunUdvjeZTKiqqgrovN6Oefz4cQDA559/jmbNmjn085Q8nZCQgB9++AErV67EkiVL8PDDD+PRRx/F+vXrPS57v/fee7Fv3z6sW7cOdepU/6/1+PHjeOyxx5CTk+Pymnr16ilfIxH5j8EOEYWN888/H4sWLXJoW79+fUDHbNeuHWJiYrB3715cc801yq+rU6cOevXqhV69euGRRx5BgwYN8NVXX7kNWqZPn44PPvgAq1evRkpKisNzl1xyCbZv3+4zCCSi4GGwQ0S6qaioQElJiUNbnTp10KhRI6XX33333Zg+fToeeOABjBw5Eps2bcLs2bMByNkafyQkJGDixIkYP348qqqqcPXVV6O0tBTfffcdEhMTMWLECJfXLFy4EL/99hu6deuGhg0bYtGiRaiqqsL555/v0nfZsmWYNGkSXn75ZTRq1Mh2/bGxsUhKSsLDDz+MG264Ac2bN8dNN92EqKgo/PTTT/j555/x5JNP+nVNRKQNV2MRkW4WL16MJk2aODyuvvpq5de3atUKH330EQoLC9GpUyfMmjXLthorkHo9TzzxBP71r39h6tSpuOCCC9C3b198/vnnaNWqldv+DRo0QGFhIa699lpccMEFeOWVV/D++++jffv2Ln2//fZbWCwW3HPPPQ7XPXbsWACyqOLChQuxZMkSdO7cGVdccQVmzJiBFi1a+H09RKQNKygTUVh76qmn8Morr2Dfvn1GD4WIaijexiKisDJz5kx07twZKSkp+O677/DMM89g9OjRRg+LiGowBjtEFFZ27NiBJ598EkeOHEHz5s1x//33Y/LkyUYPi4hqMN7GIiIioojGBGUiIiKKaAx2iIiIKKIx2CEiIqKIxmCHiIiIIhqDHSIiIopoDHaIiIgoojHYISIioojGYIeIiIgi2v8DHvolH1+HXf0AAAAASUVORK5CYII=","text/plain":[""]},"metadata":{},"output_type":"display_data"}],"source":["plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS, color='blue')\n","plt.plot(train_x, regr.coef_[0][0]*train_x + regr.intercept_[0], '-r')\n","plt.xlabel(\"Engine size\")\n","plt.ylabel(\"Emission\")"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["#### Evaluation\n","We compare the actual values and predicted values to calculate the accuracy of a regression model. Evaluation metrics provide a key role in the development of a model, as it provides insight to areas that require improvement.\n","\n","There are different model evaluation metrics, lets use MSE here to calculate the accuracy of our model based on the test set: \n","* Mean Absolute Error: It is the mean of the absolute value of the errors. This is the easiest of the metrics to understand since it’s just average error.\n","\n","* Mean Squared Error (MSE): Mean Squared Error (MSE) is the mean of the squared error. It’s more popular than Mean Absolute Error because the focus is geared more towards large errors. This is due to the squared term exponentially increasing larger errors in comparison to smaller ones.\n","\n","* Root Mean Squared Error (RMSE). \n","\n","* R-squared is not an error, but rather a popular metric to measure the performance of your regression model. It represents how close the data points are to the fitted regression line. The higher the R-squared value, the better the model fits your data. The best possible score is 1.0 and it can be negative (because the model can be arbitrarily worse).\n"]},{"cell_type":"code","execution_count":24,"metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false},"scrolled":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Mean absolute error: 24.71\n","Residual sum of squares (MSE): 1109.68\n","R2-score: 0.74\n"]}],"source":["from sklearn.metrics import r2_score\n","\n","test_x = np.asanyarray(test[['ENGINESIZE']])\n","test_y = np.asanyarray(test[['CO2EMISSIONS']])\n","test_y_ = regr.predict(test_x)\n","\n","print(\"Mean absolute error: %.2f\" % np.mean(np.absolute(test_y_ - test_y)))\n","print(\"Residual sum of squares (MSE): %.2f\" % np.mean((test_y_ - test_y) ** 2))\n","print(\"R2-score: %.2f\" % r2_score(test_y , test_y_) )"]},{"cell_type":"markdown","metadata":{},"source":["## Exercise\n"]},{"cell_type":"markdown","metadata":{},"source":["Lets see what the evaluation metrics are if we trained a regression model using the `FUELCONSUMPTION_COMB` feature.\n","\n","Start by selecting `FUELCONSUMPTION_COMB` as the train_x data from the `train` dataframe, then select `FUELCONSUMPTION_COMB` as the test_x data from the `test` dataframe\n"]},{"cell_type":"code","execution_count":34,"metadata":{},"outputs":[],"source":["train_x = train[['FUELCONSUMPTION_COMB']] #ADD CODE\n","test_x = test[['FUELCONSUMPTION_COMB']] #ADD CODE"]},{"cell_type":"markdown","metadata":{},"source":["Click here for the solution\n","\n","```python \n","train_x = train[[\"FUELCONSUMPTION_COMB\"]]\n","\n","test_x = test[[\"FUELCONSUMPTION_COMB\"]]\n","\n","```\n","\n","\n"]},{"cell_type":"markdown","metadata":{},"source":["Now train a Linear Regression Model using the `train_x` you created and the `train_y` created previously\n"]},{"cell_type":"code","execution_count":36,"metadata":{},"outputs":[{"data":{"text/html":["
LinearRegression()
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.
LinearRegression()
"],"text/plain":["LinearRegression()"]},"execution_count":36,"metadata":{},"output_type":"execute_result"}],"source":["regr = linear_model.LinearRegression()\n","\n","#ADD CODE\n","regr.fit(train_x, train_y)"]},{"cell_type":"markdown","metadata":{},"source":["Click here for the solution\n","\n","```python \n","regr = linear_model.LinearRegression()\n","\n","regr.fit(train_x, train_y)\n","\n","```\n","\n","\n"]},{"cell_type":"markdown","metadata":{},"source":["Find the predictions using the model's `predict` function and the `test_x` data\n"]},{"cell_type":"code","execution_count":37,"metadata":{},"outputs":[],"source":["predictions = regr.predict(test_x) #ADD CODE"]},{"cell_type":"markdown","metadata":{},"source":["Click here for the solution\n","\n","```python \n","predictions = regr.predict(test_x)\n","\n","```\n","\n","\n"]},{"cell_type":"markdown","metadata":{},"source":["Finally use the `predictions` and the `test_y` data and find the Mean Absolute Error value using the `np.absolute` and `np.mean` function like done previously\n"]},{"cell_type":"code","execution_count":41,"metadata":{},"outputs":[{"data":{"text/plain":["20.51132686641435"]},"execution_count":41,"metadata":{},"output_type":"execute_result"}],"source":["#ADD CODE\n","np.mean(np.absolute(test_y - predictions))\n"]},{"cell_type":"markdown","metadata":{},"source":["Click here for the solution\n","\n","```python \n","print(\"Mean Absolute Error: %.2f\" % np.mean(np.absolute(predictions - test_y)))\n","\n","```\n","\n","\n"]},{"cell_type":"markdown","metadata":{},"source":["We can see that the MAE is much worse when we train using `ENGINESIZE` than `FUELCONSUMPTION_COMB`\n"]},{"cell_type":"markdown","metadata":{"button":false,"new_sheet":false,"run_control":{"read_only":false}},"source":["
Want to learn more?
\n","\n","IBM SPSS Modeler is a comprehensive analytics platform that has many machine learning algorithms. It has been designed to bring predictive intelligence to decisions made by individuals, by groups, by systems – by your enterprise as a whole. A free trial is available through this course, available here: SPSS Modeler\n","\n","Also, you can use Watson Studio to run these notebooks faster with bigger datasets. Watson Studio is IBM's leading cloud solution for data scientists, built by data scientists. With Jupyter notebooks, RStudio, Apache Spark and popular libraries pre-packaged in the cloud, Watson Studio enables data scientists to collaborate on their projects without having to install anything. Join the fast-growing community of Watson Studio users today with a free account at Watson Studio\n","\n"]},{"cell_type":"code","execution_count":42,"metadata":{},"outputs":[],"source":["### delete Fuel Consumption.csv ###\n","!rm FuelConsumption.csv"]},{"cell_type":"markdown","metadata":{},"source":["### Thank you for completing this lab!\n","\n","\n","## Author\n","\n","Saeed Aghabozorgi\n","\n","\n","### Other Contributors\n","\n","Joseph Santarcangelo\n","\n","Azim Hirjani\n","\n","\n","## Change Log\n","\n","\n","| Date (YYYY-MM-DD) | Version | Changed By | Change Description |\n","|---|---|---|---|\n","| 2020-11-03 | 2.1 | Lakshmi Holla | Changed URL of the csv |\n","| 2020-08-27 | 2.0 | Lavanya | Moved lab to course repo in GitLab |\n","| | | | |\n","| | | | |\n","\n","\n","##