{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Title :\n", "Exercise: Linear and Polynomial Regression with Residual Analysis\n", "\n", "## Description :\n", "The goal of this exercise is to fit linear regression and polynomial regression to the given data. Plot the fit curves of both the models along with the data and observe what the residuals tell us about the two fits. \n", "\n", "\n", "\n", "## Data Description:\n", "\n", "## Instructions:\n", "- Read the poly.csv file into a dataframe.\n", "- Split the data into train and test subsets.\n", "- Fit a linear regression model on the entire data, using `LinearRegression()` object from Sklearn library.\n", "- Guesstimate the degree of the polynomial which would best fit the data.\n", "- Fit a polynomial regression model on the computed Polynomial Features using `LinearRegression()` object from sklearn library.\n", "- Plot the linear and polynomial model predictions along with the test data.\n", "- Compute the polynomial and linear model residuals using the formula below $\\epsilon = y_i - \\hat{y}$\n", "- Plot the histogram of the residuals and comment on your choice of the polynomial degree. \n", "\n", "## Hints: \n", "\n", "pd.DataFrame.head()\n", "Returns a pandas dataframe containing the data and labels from the file data.\n", "\n", "sklearn.model_selection.train_test_split()\n", "Splits the data into random train and test subsets.\n", "\n", "plt.subplots()\n", "Create a figure and a set of subplots.\n", "\n", "sklearn.preprocessing.PolynomialFeatures()\n", "Generates a new feature matrix consisting of all polynomial combinations of the features with degree less than or equal to the specified degree.\n", "\n", "sklearn.preprocessing.StandardScaler.fit_transform()\n", "Fits transformer to X and y with optional parameters fit_params and returns a transformed version of X.\n", "\n", "sklearn.linear_model.LinearRegression\n", "LinearRegression fits a linear model.\n", "\n", "sklearn.linear_model.LinearRegression.fit()\n", "Fits the linear model to the training data.\n", "\n", "sklearn.linear_model.LinearRegression.predict()\n", "Predict using the linear model.\n", "\n", "plt.plot()\n", "Plots x versus y as lines and/or markers.\n", "\n", "plt.axvline()\n", "Add a vertical line across the axes.\n", "\n", "ax.hist()\n", "Plots a histogram.\n", "\n", "**Note:** This exercise is auto-graded and you can try multiple attempts. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Import necessary libraries\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import PolynomialFeatures\n", "%matplotlib inline\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xy
0-3.292157-46.916988
10.799528-3.941553
2-0.936214-2.800522
3-4.722680-103.030914
4-3.602674-54.020819
\n", "
" ], "text/plain": [ " x y\n", "0 -3.292157 -46.916988\n", "1 0.799528 -3.941553\n", "2 -0.936214 -2.800522\n", "3 -4.722680 -103.030914\n", "4 -3.602674 -54.020819" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Read the data from 'poly.csv' into a Pandas dataframe\n", "df = pd.read_csv('poly.csv')\n", "\n", "# Take a quick look at the dataframe\n", "df.head()\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Get the column values for x & y as numpy arrays\n", "x = df[['x']].values\n", "y = df['y'].values\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Helper code to plot x & y to visually inspect the data\n", "fig, ax = plt.subplots()\n", "ax.plot(x,y,'x')\n", "ax.set_xlabel('$x$ values')\n", "ax.set_ylabel('$y$ values')\n", "ax.set_title('$y$ vs $x$')\n", "plt.show();\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Split the data into train and test sets\n", "# Set the train size to 0.8 and random state to 22\n", "x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.8, random_state=22)\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# Initialize a linear model\n", "model = LinearRegression()\n", "\n", "# Fit the model on the train data\n", "model.fit(x_train, y_train)\n", "\n", "# Get the predictions on the test data using the trained model\n", "y_lin_pred = model.predict(x_test)\n" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "### edTest(test_deg) ###\n", "\n", "# Guess the correct polynomial degree based on the above graph\n", "guess_degree = 4\n", "\n", "# Generate polynomial features on the train data\n", "x_poly_train= PolynomialFeatures(degree=guess_degree).fit_transform(x_train)\n", "\n", "# Generate polynomial features on the test data\n", "x_poly_test= PolynomialFeatures(degree=guess_degree).fit_transform(x_test)\n" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "# Initialize a model to perform polynomial regression\n", "polymodel = LinearRegression(fit_intercept=False)\n", "\n", "# Fit the model on the polynomial transformed train data\n", "polymodel.fit(x_poly_train, y_train)\n", "\n", "# Predict on the entire polynomial transformed test data\n", "y_poly_pred = polymodel.predict(x_poly_test)\n" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "# Helper code to visualise the results\n", "idx = np.argsort(x_test[:,0])\n", "x_test = x_test[idx]\n", "\n", "# Use the above index to get the appropriate predicted values for y_test\n", "# y_test values corresponding to sorted test data\n", "y_test = y_test[idx]\n", "\n", "# Linear predicted values \n", "y_lin_pred = y_lin_pred[idx]\n", "\n", "# Non-linear predicted values\n", "y_poly_pred= y_poly_pred[idx]\n" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# First plot x & y values using plt.scatter\n", "plt.scatter(x, y, s=10, label=\"Test Data\")\n", "\n", "# Plot the linear regression fit curve\n", "plt.plot(x_test, y_lin_pred, label=\"Linear fit\", color='k')\n", "\n", "# Plot the polynomial regression fit curve\n", "plt.plot(x_test, y_poly_pred, label=\"Polynomial fit\", color='red', alpha=0.6)\n", "\n", "# Assigning labels to the axes\n", "plt.xlabel(\"x values\")\n", "plt.ylabel(\"y values\")\n", "plt.legend()\n", "plt.show();\n" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "### edTest(test_poly_predictions) ###\n", "# Calculate the residual values for the polynomial model\n", "poly_residuals = y_test - y_poly_pred\n" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "### edTest(test_linear_predictions) ###\n", "# Calculate the residual values for the linear model\n", "lin_residuals = y_test - y_lin_pred\n" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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TEFBAWeccYYSL2lQ3H0m0fttAYysYJs7gDvqLago8vK3UxT+6ClyJy9/O13btKvVPov7eEWK1nRX9kKoI488kpUrV/L+++9TVFREenp6ybJmzZoBQcf94r5TlTUHFq8P0KRJk5LpJk2alOt79c0333DllVcyd+5cevTowW233RbT2FVl4y+ebtWqVcm8PXv28OGHH5aqmapo+7LcvVrDOVT2eqSmppbsK/I1nDhxIrNmzeLVV18lMzOTBQsW0LFjx5iPKclF92qspZpenXnppZcyefLkKmu7oHQB4e7cfPPNLFiwgAULFrBs2TIuueQS+vXrx7x588jIyODmm2/m9ttvjznWpk2blvQdc3e+/fZbAKZMmUJeXh7z5s1jwYIF7LfffuUKuuHDhzNjxgz2339/LrjggqjNAyJSO51btSGl+AvZjM6t2tTLcYYPH86UKVMAeO+99+jUqRNt27Ytt96FF17IeeedV2XZVXafX3zxBV999RUHHXRQtWMrLns6derEjh07SnWPqExxt4uZM2fSrl072rUrn7COGjWq1BWbxQlpZOyvv/46X3/9ddRtH3roIXbu3AlQ0jetTZs2bN++vdz6Q4cO5f3332fjxo0UFRUxdepUjjnmmErP4csvv2To0KHcfvvtdOrUidWrdYFRQ9ZgbxlUVqKGf/jqq6/48MMPOfzww5k6dSrHH388DzzwAMuWLePAAw/ksccei/pPNXToUFavXs1HH31UrgNrZU444QR+85vfcP7559O6dWvWrFlDamoqhYWFdOjQgbFjx9K6dWsmT55c7njXXnstmzZtom3btjzzzDMMHDgQCC6RnjdvHj/84Q956aWXSppAt27dSpcuXUhNTWX69OmsWrWqXDyrVq1i//3357LLLiM/P5+PPvqoXL8QEamdrm3aMbhbL/Lyt9O5VZta13ZV5LbbbuOiiy5iwIABtGzZkkceeSTqeueffz6//vWvS5rxKnPllVdyxRVXkJGRQdOmTZk8eXKpmq5YtW/fnssuu4yMjAx69+5NdnZ2TNvtu+++HHHEEWzbto2HHnoo6jr33HMPV111FQMGDKCwsJDhw4czceJEbr31Vs477zwGDx7MMcccE3VokBNPPJEFCxaQlZXFPvvsw8knn8wf/vAHxo8fzxVXXEGLFi348MMPS9ZPS0vjj3/8I8ceeyzuzsknn8zpp59e6Tn8/Oc/Z+nSpbg7I0eOLCm7pYFy96R/HHbYYV7W4sWLy82LtxUrVvghhxzil19+uWdkZPiZZ57p+fn5Pm3aNM/MzPT09HS/6KKL/JtvvnF392OOOcbnzJlTsv0f//hHP/fcc6s8Rv/+/UvNu/vuuz09Pd3T09N92LBhvmzZMn/jjTc8IyPDBw4c6FlZWSXHiTzmQw895H379vXhw4f7T37yE7/qqqvc3X3dunU+dOhQz87O9ptuuslbtWrl7u55eXk+bNgwP+yww/ySSy7xgw8+2FesWOHuXrLO5MmTvX///p6ZmelHHXWUL1++vNw5xPJeLcj9qloPafyAuZ4E5U9tH8laftXGM88842PHjk10GFUqW+Y2Zg39M9XYVFZ+mVdxOW4yyMrK8rLjXy1ZsoRDDjkkQREFVq5cyejRo1m0qNztKGMyevRorr/+ekaOjNqVpNGI5b2q7thcGuC28TOzee6eleg4aitZy6+auuaaa3j99dd57bXXSvqyJqsRI0bwt7/9jaysBv8xqlJD/kw1RpWVX42mqbEh2bJlC0OGDGHgwIGNPukSkcblH//4R6JDiNl7772X6BBEylHiVQu9e/euUW1X+/bty11RuGnTpqhJ2DvvvKOrV0RERBoJJV5JomPHjuUu7RYREZHGRcNJiIiIiMSJEi8RERGROFHiJSKyF4q8yXOxiRMnNvhBkIvPa+3atZx99tmVrnv33XeXDHwKcPLJJ5fcUkikvjSaPl4758+q0/21HDS0TvcnIpLsrrjiinrdf/E4Rk2aVO83f2FhIU2bVu/rqlu3blWObn/33XczduzYkvssvvbaa9U6hkhNqMarFqrzy6o+3HLLLUybNq3c/Pfee6/kRqs10bt3bzZu3Fib0ESkAbrtttv429/+BgRjYN14440MGTKEfv368Z///AeAoqIifv7zn5Odnc2AAQN44IEHgOC+sSNHjmTw4MFkZGTw0ksvAcF4h4cccghXXnklgwcPLne7m969e5ccZ8iQISxbtgyA8ePHc8MNN3Dsscdy44038uWXX3LiiSdy2GGHcfTRR/PZZ58BsGLFCg4//HCys7P5zW9+U7LflStXltxHsqioiJ/97GdkZGQwYMAA/vGPf3DPPfewdu1ajj32WI499tiSWIrLvjvvvJP09HTS09O5++67S53LZZddRv/+/Rk1ahS7du0CgtHvDz30UAYMGMCYMWPq9o2RRqXR1HglUiy/rGJRVFRESkpKzOtHux+jiDROBbk5FGzIJbVLGqlp3eNyzMLCQmbPns1rr73Gb3/7W6ZNm8a///1v2rVrx5w5c9i9ezdHHnkko0aNokePHrzwwgu0bduWjRs3MmzYME477TQAPv/8cx5++GH++c9/Rj1O27ZtmT17No8++ijXXXcdr7zyChDc23HatGmkpKQwcuRIJk6cSN++fZk1axZXXnkl7777Ltdeey0//vGPufDCC7nvvvui7n/SpEmsWLGC+fPn07RpUzZv3kyHDh248847mT59Op06dSq1/rx583j44YeZNWsW7s7QoUM55phj2HfffVm6dClTp07lwQcf5Ic//CHPPfccY8eO5U9/+hMrVqygWbNmaq6USqnGqw5E/rKaPHkyZ555JieeeCJ9+/blF7/4RaXbtm7dmltuuYWhQ4fy4Ycf8vjjjzNkyBAyMzO5/PLLKSoqoqioiPHjx5Oenk5GRgZ33XUXEPwiLE743njjDQ4++GCOOuoonn/++ZL9R/6CBUhPT2flypUAnHHGGRx22GH079+fSZMmlYstPz+fU045hYEDB5Kenl5ys1kRia+C3Bzy58zk2+VfkD9nJgW5OXE57plnngnAYYcdVlJuvPXWWzz66KNkZmYydOhQNm3aVHIfwV/+8pcMGDCA448/njVr1rB+/XoAevXqxbBhwyo8TvE9H88777xS9zU855xzSElJYceOHfz3v//lnHPOKSkbc3NzAfjggw9Ktr/gggui7n/atGlcccUVJc2VHTp0qPS8Z86cyQ9+8ANatWpF69atOfPMM0tq/Pr06UNmZma512XAgAGcf/75PP7449VuFpW9iz4d9WDBggXMnz+fZs2acdBBB3HNNdfQo0f0W9zk5+eTnp7O7bffzpIlS/jzn//MBx98QGpqKldeeSVTpkyhf//+rFmzpmSw1rK/pr755hsuu+wy3n33XQ488EDOPffcmOJ86KGH6NChA7t27SI7O5uzzjqr1GCtb7zxBt26dePVV18Fgptmi0j8FWzIhaKiYKKoKKj5ikOtV/HNrFNSUigsLASCflr/+Mc/OOGEE0qtO3nyZPLy8pg3bx6pqan07t2bb775BoBWrVpVehwzi/q8eLs9e/bQvn37Csc6jNwmGnevcp2y61ck8gbf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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Helper code to plot the residual values\n", "# Plot the histograms of the residuals for the two cases\n", "\n", "# Distribution of residuals\n", "fig, ax = plt.subplots(1,2, figsize = (10,4))\n", "bins = np.linspace(-20,20,20)\n", "ax[0].set_xlabel('Residuals')\n", "ax[0].set_ylabel('Frequency')\n", "\n", "# Plot the histograms for the polynomial regression\n", "ax[0].hist(poly_residuals, bins, label = \"poly_residuals\", color='#B2D7D0', alpha=0.6)\n", "\n", "# Plot the histograms for the linear regression\n", "ax[0].hist(lin_residuals, bins, label = \"lin_residuals\", color='#EFAEA4', alpha=0.6)\n", "\n", "ax[0].legend(loc = 'upper left')\n", "\n", "# Distribution of predicted values with the residuals\n", "ax[1].scatter(y_poly_pred, poly_residuals, s=10, color='#B2D7D0', label='Polynomial predictions')\n", "ax[1].scatter(y_lin_pred, lin_residuals, s = 10, color='#EFAEA4', label='Linear predictions' )\n", "ax[1].set_xlim(-75,75)\n", "ax[1].set_xlabel('Predicted values')\n", "ax[1].set_ylabel('Residuals')\n", "ax[1].legend(loc = 'upper left')\n", "\n", "fig.suptitle('Residual Analysis (Linear vs Polynomial)')\n", "plt.show();\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "⏸ Do you think that polynomial degree is appropriate. Experiment with a degree of polynomial of 2 and comment on what you observe for the residuals?" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "### edTest(test_chow1) ###\n", "# Type your answer within in the quotes given\n", "answer1 = '2 is better'\n" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }