{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Univariate Linear Regression Demo\n", "\n", "_Source: 🤖[Homemade Machine Learning](https://github.com/trekhleb/homemade-machine-learning) repository_\n", "\n", "> ☝Before moving on with this demo you might want to take a look at:\n", "> - 📗[Math behind the Linear Regression](https://github.com/trekhleb/homemade-machine-learning/tree/master/homemade/linear_regression)\n", "> - ⚙️[Linear Regression Source Code](https://github.com/trekhleb/homemade-machine-learning/blob/master/homemade/linear_regression/linear_regression.py)\n", "\n", "**Linear regression** is a linear model, e.g. a model that assumes a linear relationship between the input variables `(x)` and the single output variable `(y)`. More specifically, that output variable `(y)` can be calculated from a linear combination of the input variables `(x)`.\n", "\n", "**Univariate Linear Regression** is a linear regression that has only _one_ input parameter and one output label.\n", "\n", "> **Demo Project:** In this demo we will build a model that will predict `Happiness.Score` for the countries based on `Economy.GDP.per.Capita` parameter." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# To make debugging of linear_regression module easier we enable imported modules autoreloading feature.\n", "# By doing this you may change the code of linear_regression library and all these changes will be available here.\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "# Add project root folder to module loading paths.\n", "import sys\n", "sys.path.append('../..')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import Dependencies\n", "\n", "- [pandas](https://pandas.pydata.org/) - library that we will use for loading and displaying the data in a table\n", "- [numpy](http://www.numpy.org/) - library that we will use for linear algebra operations\n", "- [matplotlib](https://matplotlib.org/) - library that we will use for plotting the data\n", "- [linear_regression](https://github.com/trekhleb/homemade-machine-learning/blob/master/src/linear_regression/linear_regression.py) - custom implementation of linear regression" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Import 3rd party dependencies.\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "# Import custom linear regression implementation.\n", "from homemade.linear_regression import LinearRegression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load the Data\n", "\n", "In this demo we will use [World Happindes Dataset](https://www.kaggle.com/unsdsn/world-happiness#2017.csv) for 2017." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CountryHappiness.RankHappiness.ScoreWhisker.highWhisker.lowEconomy..GDP.per.Capita.FamilyHealth..Life.Expectancy.FreedomGenerosityTrust..Government.Corruption.Dystopia.Residual
0Norway17.5377.5944457.4795561.6164631.5335240.7966670.6354230.3620120.3159642.277027
1Denmark27.5227.5817287.4622721.4823831.5511220.7925660.6260070.3552800.4007702.313707
2Iceland37.5047.6220307.3859701.4806331.6105740.8335520.6271630.4755400.1535272.322715
3Switzerland47.4947.5617727.4262271.5649801.5169120.8581310.6200710.2905490.3670072.276716
4Finland57.4697.5275427.4104581.4435721.5402470.8091580.6179510.2454830.3826122.430182
5Netherlands67.3777.4274267.3265741.5039451.4289390.8106960.5853840.4704900.2826622.294804
6Canada77.3167.3844037.2475971.4792041.4813490.8345580.6111010.4355400.2873722.187264
7New Zealand87.3147.3795107.2484901.4057061.5481950.8167600.6140620.5000050.3828172.046456
8Sweden97.2847.3440957.2239051.4943871.4781620.8308750.6129240.3853990.3843992.097538
9Australia107.2847.3566517.2113491.4844151.5100420.8438870.6016070.4776990.3011842.065211
\n", "
" ], "text/plain": [ " Country Happiness.Rank Happiness.Score Whisker.high Whisker.low \\\n", "0 Norway 1 7.537 7.594445 7.479556 \n", "1 Denmark 2 7.522 7.581728 7.462272 \n", "2 Iceland 3 7.504 7.622030 7.385970 \n", "3 Switzerland 4 7.494 7.561772 7.426227 \n", "4 Finland 5 7.469 7.527542 7.410458 \n", "5 Netherlands 6 7.377 7.427426 7.326574 \n", "6 Canada 7 7.316 7.384403 7.247597 \n", "7 New Zealand 8 7.314 7.379510 7.248490 \n", "8 Sweden 9 7.284 7.344095 7.223905 \n", "9 Australia 10 7.284 7.356651 7.211349 \n", "\n", " Economy..GDP.per.Capita. Family Health..Life.Expectancy. Freedom \\\n", "0 1.616463 1.533524 0.796667 0.635423 \n", "1 1.482383 1.551122 0.792566 0.626007 \n", "2 1.480633 1.610574 0.833552 0.627163 \n", "3 1.564980 1.516912 0.858131 0.620071 \n", "4 1.443572 1.540247 0.809158 0.617951 \n", "5 1.503945 1.428939 0.810696 0.585384 \n", "6 1.479204 1.481349 0.834558 0.611101 \n", "7 1.405706 1.548195 0.816760 0.614062 \n", "8 1.494387 1.478162 0.830875 0.612924 \n", "9 1.484415 1.510042 0.843887 0.601607 \n", "\n", " Generosity Trust..Government.Corruption. Dystopia.Residual \n", "0 0.362012 0.315964 2.277027 \n", "1 0.355280 0.400770 2.313707 \n", "2 0.475540 0.153527 2.322715 \n", "3 0.290549 0.367007 2.276716 \n", "4 0.245483 0.382612 2.430182 \n", "5 0.470490 0.282662 2.294804 \n", "6 0.435540 0.287372 2.187264 \n", "7 0.500005 0.382817 2.046456 \n", "8 0.385399 0.384399 2.097538 \n", "9 0.477699 0.301184 2.065211 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Load the data.\n", "data = pd.read_csv('../../data/world-happiness-report-2017.csv')\n", "\n", "# Print the data table.\n", "data.head(10)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Print histograms for each feature to see how they vary.\n", "histohrams = data.hist(grid=False, figsize=(10, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Split the Data Into Training and Test Subsets\n", "\n", "In this step we will split our dataset into _training_ and _testing_ subsets (in proportion 80/20%).\n", "\n", "Training data set will be used for training of our linear model. Testing dataset will be used for validating of the model. All data from testing dataset will be new to model and we may check how accurate are model predictions." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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9Xud8C61O+qY8OhKgJSU87zltVz/+Grq6vc2tXv946tTbrcQyHmTTjbZvn071dXVVFdX07lzZ7p27dr0ec+ePb7auPTSS1m/fn3MOvfeey8PPvhgOkRm8ODB9OjRg759+9KzZ0+uuuoqdu7cGfOcxsZGpk2blpb+w3n88cdZt25d2ts1CoObnlzbpOxD1O9Vbnpybczz5i2vZdC0hRw28SkGTVvIvOW1zY5PX7C+SdmHqKvfy/QFsf8PiwGb4cegQ4cOrFixAoApU6aw//77c8011zSro6qoKiUl3mPn73//+7j9XHnllakLG8bs2bObBqVrr72W0aNH88ILL0StH1L4EydOTKscjz/+OCUlJfTs2TOt7Rp5yKo58MJU2LkJ2naDIZP4bLd39sjPdtdHbcbP7H3zDu+cNdHKi4mCm+HHG/3TwTvvvEOvXr347ne/S+/evfn4448ZO3YsNTU19O7dm6lTpzbVHTx4MCtWrKChoYGqqiomTpxIv379OP744/n0008BuPHGG7nzzjub6k+cOJGBAwfSo0cPXn31VQC+/PJLzjnnHHr16sW5555LTU1N02AUjdatW/PLX/6SDRs2sHatM2saOXIkRx99NL1792bWLCf3xsSJE9m1axfV1dVcfPHFUes1NDTwve99jz59+nDUUUdx9913A7BhwwaGDRvG0Ucfzbe//W3efvttXn75ZZ5++mnGjx9PdXU1H3zwQZruvpF3rJoDT46DnRsBdf4+OY6zShJNcOZv9t6lqsLz3GjlxURBzfAzabtbt24df/jDH6ipqQFg2rRptG/fnoaGBk4++WTOPfdcevXq1eycnTt3cuKJJzJt2jSuvvpq7r//fs9ZtaqyZMkS5s+fz9SpU3nmmWe455576Ny5M4899hgrV65kwIABvuRs1aoVffv2Zd26dfTu3ZsHHniA9u3bs3v3bmpqajjnnHOYNm0as2bNajaAeNV7++232bZtG6tXO/d0xw4n7evYsWOZNWsWRxxxBIsWLeLHP/4xzz77LGeeeSbnnnsuo0bFynFuFDwvTIX6iNl1fR0TW89h/leDW1Svqoi+N8PP7H3CsB7N9ABARVkpE4b1SFDwwqOgZviZtN0dccQRTcoe4KGHHmLAgAEMGDCAt956izfffLPFORUVFZxxxhkAHH300VFnvaNHj25R55VXXuGCCy4AoF+/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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Split data set on training and test sets with proportions 80/20.\n", "# Function sample() returns a random sample of items.\n", "train_data = data.sample(frac=0.8)\n", "test_data = data.drop(train_data.index)\n", "\n", "# Decide what fields we want to process.\n", "input_param_name = 'Economy..GDP.per.Capita.'\n", "output_param_name = 'Happiness.Score'\n", "\n", "# Split training set input and output.\n", "x_train = train_data[[input_param_name]].values\n", "y_train = train_data[[output_param_name]].values\n", "\n", "# Split test set input and output.\n", "x_test = test_data[[input_param_name]].values\n", "y_test = test_data[[output_param_name]].values\n", "\n", "# Plot training data.\n", "plt.scatter(x_train, y_train, label='Training Dataset')\n", "plt.scatter(x_test, y_test, label='Test Dataset')\n", "plt.xlabel(input_param_name)\n", "plt.ylabel(output_param_name)\n", "plt.title('Countries Happines')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we may visualize the data sets to see theirs shape." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Init and Train Linear Regression Model\n", "\n", "> ☝🏻This is the place where you might want to play with model configuration.\n", "\n", "- `polynomial_degree` - this parameter will allow you to add additional polynomial features of certain degree. More features - more curved the line will be.\n", "- `num_iterations` - this is the number of iterations that gradient descent algorithm will use to find the minimum of a cost function. Low numbers may prevent gradient descent from reaching the minimum. High numbers will make the algorithm work longer without improving its accuracy.\n", "- `learning_rate` - this is the size of the gradient descent step. Small learning step will make algorithm work longer and will probably require more iterations to reach the minimum of the cost function. Big learning steps may couse missing the minimum and growth of the cost function value with new iterations.\n", "- `regularization_param` - parameter that will fight overfitting. The higher the parameter, the simplier is the model will be.\n", "- `polynomial_degree` - the degree of additional polynomial features (`x1^2 * x2, x1^2 * x2^2, ...`). This will allow you to curve the predictions.\n", "- `sinusoid_degree` - the degree of sinusoid parameter multipliers of additional features (`sin(x), sin(2*x), ...`). This will allow you to curve the predictions by adding sinusoidal component to the prediction curve." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initial cost: 226677.33\n", "Optimized cost: 3143.57\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Model Parameters
05.419745
10.932169
\n", "
" ], "text/plain": [ " Model Parameters\n", "0 5.419745\n", "1 0.932169" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Set up linear regression parameters.\n", "num_iterations = 500 # Number of gradient descent iterations.\n", "regularization_param = 0 # Helps to fight model overfitting.\n", "learning_rate = 0.01 # The size of the gradient descent step.\n", "polynomial_degree = 0 # The degree of additional polynomial features.\n", "sinusoid_degree = 0 # The degree of sinusoid parameter multipliers of additional features.\n", "\n", "# Init linear regression instance.\n", "linear_regression = LinearRegression(x_train, y_train, polynomial_degree, sinusoid_degree)\n", "\n", "# Train linear regression.\n", "(theta, cost_history) = linear_regression.train(\n", " learning_rate,\n", " regularization_param,\n", " num_iterations\n", ")\n", "\n", "# Print training results.\n", "print('Initial cost: {:.2f}'.format(cost_history[0]))\n", "print('Optimized cost: {:.2f}'.format(cost_history[-1]))\n", "\n", "# Print model parameters\n", "theta_table = pd.DataFrame({'Model Parameters': theta.flatten()})\n", "theta_table.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analyze Gradient Descent Progress\n", "\n", "The plot below illustrates how the cost function value changes over each iteration. You should see it decreasing. \n", "\n", "In case if cost function value increases it may mean that gradient descent missed the cost function minimum and with each step it goes further away from it. In this case you might want to reduce the learning rate parameter (the size of the gradient step).\n", "\n", "From this plot you may also get an understanding of how many iterations you need to get an optimal value of the cost function. In current example you may see that there is no much sense to increase the number of gradient descent iterations over 500 since it will not reduce cost function significantly. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot gradient descent progress.\n", "plt.plot(range(num_iterations), cost_history)\n", "plt.xlabel('Iterations')\n", "plt.ylabel('Cost')\n", "plt.title('Gradient Descent Progress')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot the Model Predictions\n", "\n", "Since our model is trained now we may plot its predictions over the training and test datasets to see how well it fits the data." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Get model predictions for the trainint set.\n", "predictions_num = 100\n", "x_predictions = np.linspace(x_train.min(), x_train.max(), predictions_num).reshape(predictions_num, 1);\n", "y_predictions = linear_regression.predict(x_predictions)\n", "\n", "# Plot training data with predictions.\n", "plt.scatter(x_train, y_train, label='Training Dataset')\n", "plt.scatter(x_test, y_test, label='Test Dataset')\n", "plt.plot(x_predictions, y_predictions, 'r', label='Prediction')\n", "plt.xlabel('Economy..GDP.per.Capita.')\n", "plt.ylabel('Happiness.Score')\n", "plt.title('Countries Happines')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate the value of cost function for the training and test data set. The less this value is, the better." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train cost: 3143.57\n", "Test cost: 311.14\n" ] } ], "source": [ "train_cost = linear_regression.get_cost(x_train, y_train, regularization_param)\n", "test_cost = linear_regression.get_cost(x_test, y_test, regularization_param)\n", "\n", "print('Train cost: {:.2f}'.format(train_cost))\n", "print('Test cost: {:.2f}'.format(test_cost))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's now render the table of prediction values that our trained model does for unknown data (for test dataset). You should see that predicted happiness score should be quite similar to the known happiness score fron the test dataset." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Economy GDP per CapitaTest Happiness ScorePredicted Happiness ScorePrediction Diff
01.4435727.4696.7754030.693597
11.4057067.3146.6800270.633974
21.2527856.6526.2948500.357150
31.1073536.6355.9285390.706461
41.5306246.3446.994667-0.650667
50.9097846.0035.4309050.572094
61.3208795.6116.466366-0.855366
71.1018035.5255.914559-0.389559
80.9325375.4935.4882150.004785
90.9255795.3115.470689-0.159689
\n", "
" ], "text/plain": [ " Economy GDP per Capita Test Happiness Score Predicted Happiness Score \\\n", "0 1.443572 7.469 6.775403 \n", "1 1.405706 7.314 6.680027 \n", "2 1.252785 6.652 6.294850 \n", "3 1.107353 6.635 5.928539 \n", "4 1.530624 6.344 6.994667 \n", "5 0.909784 6.003 5.430905 \n", "6 1.320879 5.611 6.466366 \n", "7 1.101803 5.525 5.914559 \n", "8 0.932537 5.493 5.488215 \n", "9 0.925579 5.311 5.470689 \n", "\n", " Prediction Diff \n", "0 0.693597 \n", "1 0.633974 \n", "2 0.357150 \n", "3 0.706461 \n", "4 -0.650667 \n", "5 0.572094 \n", "6 -0.855366 \n", "7 -0.389559 \n", "8 0.004785 \n", "9 -0.159689 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_predictions = linear_regression.predict(x_test)\n", "\n", "test_predictions_table = pd.DataFrame({\n", " 'Economy GDP per Capita': x_test.flatten(),\n", " 'Test Happiness Score': y_test.flatten(),\n", " 'Predicted Happiness Score': test_predictions.flatten(),\n", " 'Prediction Diff': (y_test - test_predictions).flatten()\n", "})\n", "\n", "test_predictions_table.head(10)" ] } ], "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.0" } }, "nbformat": 4, "nbformat_minor": 2 }