handson-ml/01_the_machine_learning_lan...

1622 lines
350 KiB
Plaintext
Raw Permalink Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
2016-09-27 23:31:21 +02:00
"**Chapter 1 The Machine Learning landscape**\n",
2016-09-27 16:39:16 +02:00
"\n",
"_This notebook contains the code examples in chapter 1. You'll also find the exercise solutions at the end of the notebook. The rest of this notebook is used to generate `lifesat.csv` from the original data sources, and some of this chapter's figures._\n",
"\n",
"You're welcome to go through the code in this notebook if you want, but the real action starts in the next chapter."
2016-09-27 16:39:16 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<table align=\"left\">\n",
" <td>\n",
" <a href=\"https://colab.research.google.com/github/ageron/handson-ml3/blob/main/01_the_machine_learning_landscape.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>\n",
" </td>\n",
" <td>\n",
" <a target=\"_blank\" href=\"https://kaggle.com/kernels/welcome?src=https://github.com/ageron/handson-ml3/blob/main/01_the_machine_learning_landscape.ipynb\"><img src=\"https://kaggle.com/static/images/open-in-kaggle.svg\" /></a>\n",
" </td>\n",
"</table>"
]
},
2016-09-27 16:39:16 +02:00
{
"cell_type": "markdown",
"metadata": {},
2016-09-27 16:39:16 +02:00
"source": [
2021-10-19 12:15:36 +02:00
"# Setup"
2016-09-27 16:39:16 +02:00
]
},
2024-10-03 10:34:08 +02:00
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
2021-10-20 07:39:09 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This project requires Python 3.7 or above:"
2021-10-20 07:39:09 +02:00
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"import sys\n",
"\n",
2022-02-19 11:03:20 +01:00
"assert sys.version_info >= (3, 7)"
]
},
2021-10-20 07:39:09 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Scikit-Learn ≥1.0.1 is required:"
2021-10-20 07:39:09 +02:00
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"from packaging import version\n",
"import sklearn\n",
"\n",
"assert version.parse(sklearn.__version__) >= version.parse(\"1.0.1\")"
]
},
2021-10-20 07:39:09 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's define the default font sizes, to plot pretty figures:"
2021-10-20 07:39:09 +02:00
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
2021-10-20 07:39:09 +02:00
"\n",
"plt.rc('font', size=12)\n",
"plt.rc('axes', labelsize=14, titlesize=14)\n",
"plt.rc('legend', fontsize=12)\n",
"plt.rc('xtick', labelsize=10)\n",
"plt.rc('ytick', labelsize=10)"
]
},
2021-10-20 07:39:09 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Make this notebook's output stable across runs:"
2021-10-20 07:39:09 +02:00
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"np.random.seed(42)"
]
},
2021-10-19 12:15:36 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Code example 1-1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is the code I used to generate the `lifesat.csv` dataset. You can safely skip this."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a function to save the figures:"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"from pathlib import Path\n",
"\n",
"# Where to save the figures\n",
"IMAGES_PATH = Path() / \"images\" / \"fundamentals\"\n",
"IMAGES_PATH.mkdir(parents=True, exist_ok=True)\n",
"\n",
"def save_fig(fig_id, tight_layout=True, fig_extension=\"png\", resolution=300):\n",
" path = IMAGES_PATH / f\"{fig_id}.{fig_extension}\"\n",
" if tight_layout:\n",
" plt.tight_layout()\n",
" plt.savefig(path, format=fig_extension, dpi=resolution)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load and prepare Life satisfaction data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To create `lifesat.csv`, I downloaded the Better Life Index (BLI) data from [OECD's website](http://stats.oecd.org/index.aspx?DataSetCode=BLI) (to get the Life Satisfaction for each country), and World Bank GDP per capita data from [OurWorldInData.org](https://ourworldindata.org/grapher/gdp-per-capita-worldbank). The BLI data is in `datasets/lifesat/oecd_bli.csv` (data from 2020), and the GDP per capita data is in `datasets/lifesat/gdp_per_capita.csv` (data up to 2020).\n",
"\n",
"If you want to grab the latest versions, please feel free to do so. However, there may be some changes (e.g., in the column names, or different countries missing data), so be prepared to have to tweak the code."
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 17,
"metadata": {},
2024-10-03 10:34:08 +02:00
"outputs": [],
"source": [
2024-10-03 10:34:08 +02:00
"import pandas as pd\n",
"import urllib.request\n",
"\n",
"datapath = Path() / \"datasets\" / \"lifesat\"\n",
"datapath.mkdir(parents=True, exist_ok=True)\n",
"\n",
"data_root = \"https://github.com/ageron/data/raw/main/\"\n",
"for filename in (\"oecd_bli.csv\", \"gdp_per_capita.csv\"):\n",
" if not (datapath / filename).is_file():\n",
" print(\"Downloading\", filename)\n",
" url = data_root + \"lifesat/\" + filename\n",
" urllib.request.urlretrieve(url, datapath / filename)"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"oecd_bli = pd.read_csv(datapath / \"oecd_bli.csv\")\n",
"gdp_per_capita = pd.read_csv(datapath / \"gdp_per_capita.csv\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2021-10-19 12:15:36 +02:00
"Preprocess the GDP per capita data to keep only the year 2020:"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 19,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>GDP per capita (USD)</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Country</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Afghanistan</th>\n",
" <td>1978.961579</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Africa Eastern and Southern</th>\n",
" <td>3387.594670</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Africa Western and Central</th>\n",
" <td>4003.158913</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Albania</th>\n",
" <td>13295.410885</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Algeria</th>\n",
" <td>10681.679297</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" GDP per capita (USD)\n",
"Country \n",
"Afghanistan 1978.961579\n",
"Africa Eastern and Southern 3387.594670\n",
"Africa Western and Central 4003.158913\n",
"Albania 13295.410885\n",
"Algeria 10681.679297"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 19,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2021-10-19 12:15:36 +02:00
"gdp_year = 2020\n",
"gdppc_col = \"GDP per capita (USD)\"\n",
"lifesat_col = \"Life satisfaction\"\n",
"\n",
"gdp_per_capita = gdp_per_capita[gdp_per_capita[\"Year\"] == gdp_year]\n",
"gdp_per_capita = gdp_per_capita.drop([\"Code\", \"Year\"], axis=1)\n",
"gdp_per_capita.columns = [\"Country\", gdppc_col]\n",
"gdp_per_capita.set_index(\"Country\", inplace=True)\n",
"\n",
"gdp_per_capita.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Preprocess the OECD BLI data to keep only the `Life satisfaction` column:"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 20,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Indicator</th>\n",
" <th>Air pollution</th>\n",
" <th>Dwellings without basic facilities</th>\n",
" <th>Educational attainment</th>\n",
" <th>Employees working very long hours</th>\n",
" <th>Employment rate</th>\n",
" <th>Feeling safe walking alone at night</th>\n",
" <th>Homicide rate</th>\n",
" <th>Household net adjusted disposable income</th>\n",
" <th>Household net wealth</th>\n",
" <th>Housing expenditure</th>\n",
" <th>...</th>\n",
" <th>Personal earnings</th>\n",
" <th>Quality of support network</th>\n",
" <th>Rooms per person</th>\n",
" <th>Self-reported health</th>\n",
" <th>Stakeholder engagement for developing regulations</th>\n",
" <th>Student skills</th>\n",
" <th>Time devoted to leisure and personal care</th>\n",
" <th>Voter turnout</th>\n",
" <th>Water quality</th>\n",
" <th>Years in education</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Country</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Australia</th>\n",
" <td>5.0</td>\n",
" <td>NaN</td>\n",
" <td>81.0</td>\n",
" <td>13.04</td>\n",
" <td>73.0</td>\n",
" <td>63.5</td>\n",
" <td>1.1</td>\n",
" <td>32759.0</td>\n",
" <td>427064.0</td>\n",
" <td>20.0</td>\n",
" <td>...</td>\n",
" <td>49126.0</td>\n",
" <td>95.0</td>\n",
" <td>NaN</td>\n",
" <td>85.0</td>\n",
" <td>2.7</td>\n",
" <td>502.0</td>\n",
" <td>14.35</td>\n",
" <td>91.0</td>\n",
" <td>93.0</td>\n",
" <td>21.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Austria</th>\n",
" <td>16.0</td>\n",
" <td>0.9</td>\n",
" <td>85.0</td>\n",
" <td>6.66</td>\n",
" <td>72.0</td>\n",
" <td>80.6</td>\n",
" <td>0.5</td>\n",
" <td>33541.0</td>\n",
" <td>308325.0</td>\n",
" <td>21.0</td>\n",
" <td>...</td>\n",
" <td>50349.0</td>\n",
" <td>92.0</td>\n",
" <td>1.6</td>\n",
" <td>70.0</td>\n",
" <td>1.3</td>\n",
" <td>492.0</td>\n",
" <td>14.55</td>\n",
" <td>80.0</td>\n",
" <td>92.0</td>\n",
" <td>17.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Belgium</th>\n",
" <td>15.0</td>\n",
" <td>1.9</td>\n",
" <td>77.0</td>\n",
" <td>4.75</td>\n",
" <td>63.0</td>\n",
" <td>70.1</td>\n",
" <td>1.0</td>\n",
" <td>30364.0</td>\n",
" <td>386006.0</td>\n",
" <td>21.0</td>\n",
" <td>...</td>\n",
" <td>49675.0</td>\n",
" <td>91.0</td>\n",
" <td>2.2</td>\n",
" <td>74.0</td>\n",
" <td>2.0</td>\n",
" <td>503.0</td>\n",
" <td>15.70</td>\n",
" <td>89.0</td>\n",
" <td>84.0</td>\n",
" <td>19.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Brazil</th>\n",
" <td>10.0</td>\n",
" <td>6.7</td>\n",
" <td>49.0</td>\n",
" <td>7.13</td>\n",
" <td>61.0</td>\n",
" <td>35.6</td>\n",
" <td>26.7</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>90.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2.2</td>\n",
" <td>395.0</td>\n",
" <td>NaN</td>\n",
" <td>79.0</td>\n",
" <td>73.0</td>\n",
" <td>16.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Canada</th>\n",
" <td>7.0</td>\n",
" <td>0.2</td>\n",
" <td>91.0</td>\n",
" <td>3.69</td>\n",
" <td>73.0</td>\n",
" <td>82.2</td>\n",
" <td>1.3</td>\n",
" <td>30854.0</td>\n",
" <td>423849.0</td>\n",
" <td>22.0</td>\n",
" <td>...</td>\n",
" <td>47622.0</td>\n",
" <td>93.0</td>\n",
" <td>2.6</td>\n",
" <td>88.0</td>\n",
" <td>2.9</td>\n",
" <td>523.0</td>\n",
" <td>14.56</td>\n",
" <td>68.0</td>\n",
" <td>91.0</td>\n",
" <td>17.3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 24 columns</p>\n",
"</div>"
],
"text/plain": [
"Indicator Air pollution Dwellings without basic facilities \\\n",
"Country \n",
"Australia 5.0 NaN \n",
"Austria 16.0 0.9 \n",
"Belgium 15.0 1.9 \n",
"Brazil 10.0 6.7 \n",
"Canada 7.0 0.2 \n",
"\n",
"Indicator Educational attainment Employees working very long hours \\\n",
"Country \n",
"Australia 81.0 13.04 \n",
"Austria 85.0 6.66 \n",
"Belgium 77.0 4.75 \n",
"Brazil 49.0 7.13 \n",
"Canada 91.0 3.69 \n",
"\n",
"Indicator Employment rate Feeling safe walking alone at night \\\n",
"Country \n",
"Australia 73.0 63.5 \n",
"Austria 72.0 80.6 \n",
"Belgium 63.0 70.1 \n",
"Brazil 61.0 35.6 \n",
"Canada 73.0 82.2 \n",
"\n",
"Indicator Homicide rate Household net adjusted disposable income \\\n",
"Country \n",
"Australia 1.1 32759.0 \n",
"Austria 0.5 33541.0 \n",
"Belgium 1.0 30364.0 \n",
"Brazil 26.7 NaN \n",
"Canada 1.3 30854.0 \n",
"\n",
"Indicator Household net wealth Housing expenditure ... Personal earnings \\\n",
"Country ... \n",
"Australia 427064.0 20.0 ... 49126.0 \n",
"Austria 308325.0 21.0 ... 50349.0 \n",
"Belgium 386006.0 21.0 ... 49675.0 \n",
"Brazil NaN NaN ... NaN \n",
"Canada 423849.0 22.0 ... 47622.0 \n",
"\n",
"Indicator Quality of support network Rooms per person Self-reported health \\\n",
"Country \n",
"Australia 95.0 NaN 85.0 \n",
"Austria 92.0 1.6 70.0 \n",
"Belgium 91.0 2.2 74.0 \n",
"Brazil 90.0 NaN NaN \n",
"Canada 93.0 2.6 88.0 \n",
"\n",
"Indicator Stakeholder engagement for developing regulations Student skills \\\n",
"Country \n",
"Australia 2.7 502.0 \n",
"Austria 1.3 492.0 \n",
"Belgium 2.0 503.0 \n",
"Brazil 2.2 395.0 \n",
"Canada 2.9 523.0 \n",
"\n",
"Indicator Time devoted to leisure and personal care Voter turnout \\\n",
"Country \n",
"Australia 14.35 91.0 \n",
"Austria 14.55 80.0 \n",
"Belgium 15.70 89.0 \n",
"Brazil NaN 79.0 \n",
"Canada 14.56 68.0 \n",
"\n",
"Indicator Water quality Years in education \n",
"Country \n",
"Australia 93.0 21.0 \n",
"Austria 92.0 17.0 \n",
"Belgium 84.0 19.3 \n",
"Brazil 73.0 16.2 \n",
"Canada 91.0 17.3 \n",
"\n",
"[5 rows x 24 columns]"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 20,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2021-10-19 12:15:36 +02:00
"oecd_bli = oecd_bli[oecd_bli[\"INEQUALITY\"]==\"TOT\"]\n",
"oecd_bli = oecd_bli.pivot(index=\"Country\", columns=\"Indicator\", values=\"Value\")\n",
"\n",
"oecd_bli.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2021-10-19 12:15:36 +02:00
"Now let's merge the life satisfaction data and the GDP per capita data, keeping only the GDP per capita and Life satisfaction columns:"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 21,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>GDP per capita (USD)</th>\n",
" <th>Life satisfaction</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Country</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>South Africa</th>\n",
" <td>11466.189672</td>\n",
" <td>4.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Colombia</th>\n",
" <td>13441.492952</td>\n",
" <td>6.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Brazil</th>\n",
" <td>14063.982505</td>\n",
" <td>6.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Mexico</th>\n",
" <td>17887.750736</td>\n",
" <td>6.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Chile</th>\n",
" <td>23324.524751</td>\n",
" <td>6.5</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" GDP per capita (USD) Life satisfaction\n",
"Country \n",
"South Africa 11466.189672 4.7\n",
"Colombia 13441.492952 6.3\n",
"Brazil 14063.982505 6.4\n",
"Mexico 17887.750736 6.5\n",
"Chile 23324.524751 6.5"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 21,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2021-10-19 12:15:36 +02:00
"full_country_stats = pd.merge(left=oecd_bli, right=gdp_per_capita,\n",
" left_index=True, right_index=True)\n",
"full_country_stats.sort_values(by=gdppc_col, inplace=True)\n",
"full_country_stats = full_country_stats[[gdppc_col, lifesat_col]]\n",
"\n",
"full_country_stats.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To illustrate the risk of overfitting, I use only part of the data in most figures (all countries with a GDP per capita between `min_gdp` and `max_gdp`). Later in the chapter I reveal the missing countries, and show that they don't follow the same linear trend at all."
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 22,
2021-10-19 12:15:36 +02:00
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>GDP per capita (USD)</th>\n",
" <th>Life satisfaction</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Country</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Russia</th>\n",
" <td>26456.387938</td>\n",
" <td>5.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Greece</th>\n",
" <td>27287.083401</td>\n",
" <td>5.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Turkey</th>\n",
" <td>28384.987785</td>\n",
" <td>5.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Latvia</th>\n",
" <td>29932.493910</td>\n",
" <td>5.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Hungary</th>\n",
" <td>31007.768407</td>\n",
" <td>5.6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" GDP per capita (USD) Life satisfaction\n",
"Country \n",
"Russia 26456.387938 5.8\n",
"Greece 27287.083401 5.4\n",
"Turkey 28384.987785 5.5\n",
"Latvia 29932.493910 5.9\n",
"Hungary 31007.768407 5.6"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 22,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
2021-10-19 12:15:36 +02:00
"source": [
"min_gdp = 23_500\n",
"max_gdp = 62_500\n",
2021-10-19 12:15:36 +02:00
"\n",
"country_stats = full_country_stats[(full_country_stats[gdppc_col] >= min_gdp) &\n",
" (full_country_stats[gdppc_col] <= max_gdp)]\n",
"country_stats.head()"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 23,
2021-10-19 12:15:36 +02:00
"metadata": {},
"outputs": [],
"source": [
"country_stats.to_csv(datapath / \"lifesat.csv\")\n",
"full_country_stats.to_csv(datapath / \"lifesat_full.csv\")"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 24,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
2024-10-03 10:34:08 +02:00
"image/png": "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
2022-02-19 10:24:54 +01:00
"text/plain": [
2024-10-03 10:34:08 +02:00
"<Figure size 500x300 with 1 Axes>"
2022-02-19 10:24:54 +01:00
]
},
2024-10-03 10:34:08 +02:00
"metadata": {},
2022-02-19 10:24:54 +01:00
"output_type": "display_data"
}
],
"source": [
2022-02-19 06:18:08 +01:00
"country_stats.plot(kind='scatter', figsize=(5, 3), grid=True,\n",
2021-10-19 12:15:36 +02:00
" x=gdppc_col, y=lifesat_col)\n",
"\n",
"min_life_sat = 4\n",
"max_life_sat = 9\n",
"\n",
"position_text = {\n",
" \"Turkey\": (29_500, 4.2),\n",
" \"Hungary\": (28_000, 6.9),\n",
" \"France\": (40_000, 5),\n",
2021-10-19 12:15:36 +02:00
" \"New Zealand\": (28_000, 8.2),\n",
" \"Australia\": (50_000, 5.5),\n",
" \"United States\": (59_000, 5.3),\n",
" \"Denmark\": (46_000, 8.5)\n",
"}\n",
"\n",
"for country, pos_text in position_text.items():\n",
2021-10-19 12:15:36 +02:00
" pos_data_x = country_stats[gdppc_col].loc[country]\n",
" pos_data_y = country_stats[lifesat_col].loc[country]\n",
" country = \"U.S.\" if country == \"United States\" else country\n",
2021-10-19 12:15:36 +02:00
" plt.annotate(country, xy=(pos_data_x, pos_data_y),\n",
" xytext=pos_text, fontsize=12,\n",
2021-10-19 12:15:36 +02:00
" arrowprops=dict(facecolor='black', width=0.5,\n",
2022-02-19 06:18:08 +01:00
" shrink=0.08, headwidth=5))\n",
" plt.plot(pos_data_x, pos_data_y, \"ro\")\n",
"\n",
2021-10-19 12:15:36 +02:00
"plt.axis([min_gdp, max_gdp, min_life_sat, max_life_sat])\n",
"\n",
"save_fig('money_happy_scatterplot')\n",
"plt.show()"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 25,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>GDP per capita (USD)</th>\n",
" <th>Life satisfaction</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Country</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Turkey</th>\n",
" <td>28384.987785</td>\n",
" <td>5.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Hungary</th>\n",
" <td>31007.768407</td>\n",
" <td>5.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>France</th>\n",
" <td>42025.617373</td>\n",
" <td>6.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>New Zealand</th>\n",
" <td>42404.393738</td>\n",
" <td>7.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Australia</th>\n",
" <td>48697.837028</td>\n",
" <td>7.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Denmark</th>\n",
" <td>55938.212809</td>\n",
" <td>7.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>United States</th>\n",
" <td>60235.728492</td>\n",
" <td>6.9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" GDP per capita (USD) Life satisfaction\n",
"Country \n",
"Turkey 28384.987785 5.5\n",
"Hungary 31007.768407 5.6\n",
"France 42025.617373 6.5\n",
"New Zealand 42404.393738 7.3\n",
"Australia 48697.837028 7.3\n",
"Denmark 55938.212809 7.6\n",
"United States 60235.728492 6.9"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 25,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"highlighted_countries = country_stats.loc[list(position_text.keys())]\n",
2021-10-19 12:15:36 +02:00
"highlighted_countries[[gdppc_col, lifesat_col]].sort_values(by=gdppc_col)"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 26,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
2024-10-03 10:34:08 +02:00
"image/png": "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
2022-02-19 10:24:54 +01:00
"text/plain": [
2024-10-03 10:34:08 +02:00
"<Figure size 500x300 with 1 Axes>"
2022-02-19 10:24:54 +01:00
]
},
2024-10-03 10:34:08 +02:00
"metadata": {},
2022-02-19 10:24:54 +01:00
"output_type": "display_data"
}
],
"source": [
2022-02-19 06:18:08 +01:00
"country_stats.plot(kind='scatter', figsize=(5, 3), grid=True,\n",
2021-10-19 12:15:36 +02:00
" x=gdppc_col, y=lifesat_col)\n",
"\n",
"X = np.linspace(min_gdp, max_gdp, 1000)\n",
"\n",
"w1, w2 = 4.2, 0\n",
"plt.plot(X, w1 + w2 * 1e-5 * X, \"r\")\n",
2021-10-19 12:15:36 +02:00
"plt.text(40_000, 4.9, fr\"$\\theta_0 = {w1}$\", color=\"r\")\n",
"plt.text(40_000, 4.4, fr\"$\\theta_1 = {w2}$\", color=\"r\")\n",
"\n",
"w1, w2 = 10, -9\n",
"plt.plot(X, w1 + w2 * 1e-5 * X, \"g\")\n",
2021-10-19 12:15:36 +02:00
"plt.text(26_000, 8.5, fr\"$\\theta_0 = {w1}$\", color=\"g\")\n",
"plt.text(26_000, 8.0, fr\"$\\theta_1 = {w2} \\times 10^{{-5}}$\", color=\"g\")\n",
"\n",
"w1, w2 = 3, 8\n",
"plt.plot(X, w1 + w2 * 1e-5 * X, \"b\")\n",
2021-10-19 12:15:36 +02:00
"plt.text(48_000, 8.5, fr\"$\\theta_0 = {w1}$\", color=\"b\")\n",
"plt.text(48_000, 8.0, fr\"$\\theta_1 = {w2} \\times 10^{{-5}}$\", color=\"b\")\n",
"\n",
"plt.axis([min_gdp, max_gdp, min_life_sat, max_life_sat])\n",
"\n",
"save_fig('tweaking_model_params_plot')\n",
"plt.show()"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 27,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"θ0=3.75, θ1=6.78e-05\n"
]
}
],
"source": [
"from sklearn import linear_model\n",
"\n",
2021-10-19 12:15:36 +02:00
"X_sample = country_stats[[gdppc_col]].values\n",
"y_sample = country_stats[[lifesat_col]].values\n",
"\n",
"lin1 = linear_model.LinearRegression()\n",
"lin1.fit(X_sample, y_sample)\n",
"\n",
"t0, t1 = lin1.intercept_[0], lin1.coef_[0][0]\n",
2021-10-19 12:15:36 +02:00
"print(f\"θ0={t0:.2f}, θ1={t1:.2e}\")"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 28,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
2024-10-03 10:34:08 +02:00
"image/png": "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
2022-02-19 10:24:54 +01:00
"text/plain": [
2024-10-03 10:34:08 +02:00
"<Figure size 500x300 with 1 Axes>"
2022-02-19 10:24:54 +01:00
]
},
2024-10-03 10:34:08 +02:00
"metadata": {},
2022-02-19 10:24:54 +01:00
"output_type": "display_data"
}
],
"source": [
2022-02-19 06:18:08 +01:00
"country_stats.plot(kind='scatter', figsize=(5, 3), grid=True,\n",
2021-10-19 12:15:36 +02:00
" x=gdppc_col, y=lifesat_col)\n",
"\n",
"X = np.linspace(min_gdp, max_gdp, 1000)\n",
"plt.plot(X, t0 + t1 * X, \"b\")\n",
"\n",
"plt.text(max_gdp - 20_000, min_life_sat + 1.9,\n",
2021-10-19 12:15:36 +02:00
" fr\"$\\theta_0 = {t0:.2f}$\", color=\"b\")\n",
"plt.text(max_gdp - 20_000, min_life_sat + 1.3,\n",
2021-10-19 12:15:36 +02:00
" fr\"$\\theta_1 = {t1 * 1e5:.2f} \\times 10^{{-5}}$\", color=\"b\")\n",
"\n",
"plt.axis([min_gdp, max_gdp, min_life_sat, max_life_sat])\n",
"\n",
"save_fig('best_fit_model_plot')\n",
"plt.show()"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 29,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/plain": [
"37655.1803457421"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 29,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2021-10-19 12:15:36 +02:00
"cyprus_gdp_per_capita = gdp_per_capita[gdppc_col].loc[\"Cyprus\"]\n",
"cyprus_gdp_per_capita"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 30,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/plain": [
"6.301656332738056"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 30,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cyprus_predicted_life_satisfaction = lin1.predict([[cyprus_gdp_per_capita]])[0, 0]\n",
"cyprus_predicted_life_satisfaction"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 31,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
2024-10-03 10:34:08 +02:00
"image/png": "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
2022-02-19 10:24:54 +01:00
"text/plain": [
2024-10-03 10:34:08 +02:00
"<Figure size 500x300 with 1 Axes>"
2022-02-19 10:24:54 +01:00
]
},
2024-10-03 10:34:08 +02:00
"metadata": {},
2022-02-19 10:24:54 +01:00
"output_type": "display_data"
}
],
"source": [
2022-02-19 06:18:08 +01:00
"country_stats.plot(kind='scatter', figsize=(5, 3), grid=True,\n",
2021-10-19 12:15:36 +02:00
" x=gdppc_col, y=lifesat_col)\n",
"\n",
"X = np.linspace(min_gdp, max_gdp, 1000)\n",
"plt.plot(X, t0 + t1 * X, \"b\")\n",
"\n",
"plt.text(min_gdp + 22_000, max_life_sat - 1.1,\n",
2021-10-19 12:15:36 +02:00
" fr\"$\\theta_0 = {t0:.2f}$\", color=\"b\")\n",
"plt.text(min_gdp + 22_000, max_life_sat - 0.6,\n",
2021-10-19 12:15:36 +02:00
" fr\"$\\theta_1 = {t1 * 1e5:.2f} \\times 10^{{-5}}$\", color=\"b\")\n",
"\n",
"plt.plot([cyprus_gdp_per_capita, cyprus_gdp_per_capita],\n",
" [min_life_sat, cyprus_predicted_life_satisfaction], \"r--\")\n",
"plt.text(cyprus_gdp_per_capita + 1000, 5.0,\n",
2021-10-19 12:15:36 +02:00
" fr\"Prediction = {cyprus_predicted_life_satisfaction:.2f}\", color=\"r\")\n",
"plt.plot(cyprus_gdp_per_capita, cyprus_predicted_life_satisfaction, \"ro\")\n",
"\n",
"plt.axis([min_gdp, max_gdp, min_life_sat, max_life_sat])\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 32,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>GDP per capita (USD)</th>\n",
" <th>Life satisfaction</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Country</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>South Africa</th>\n",
" <td>11466.189672</td>\n",
" <td>4.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Colombia</th>\n",
" <td>13441.492952</td>\n",
" <td>6.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Brazil</th>\n",
" <td>14063.982505</td>\n",
" <td>6.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Mexico</th>\n",
" <td>17887.750736</td>\n",
" <td>6.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Chile</th>\n",
" <td>23324.524751</td>\n",
" <td>6.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Norway</th>\n",
" <td>63585.903514</td>\n",
" <td>7.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Switzerland</th>\n",
" <td>68393.306004</td>\n",
" <td>7.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Ireland</th>\n",
" <td>89688.956958</td>\n",
" <td>7.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Luxembourg</th>\n",
" <td>110261.157353</td>\n",
" <td>6.9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" GDP per capita (USD) Life satisfaction\n",
"Country \n",
"South Africa 11466.189672 4.7\n",
"Colombia 13441.492952 6.3\n",
"Brazil 14063.982505 6.4\n",
"Mexico 17887.750736 6.5\n",
"Chile 23324.524751 6.5\n",
"Norway 63585.903514 7.6\n",
"Switzerland 68393.306004 7.5\n",
"Ireland 89688.956958 7.0\n",
"Luxembourg 110261.157353 6.9"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 32,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2021-10-19 12:15:36 +02:00
"missing_data = full_country_stats[(full_country_stats[gdppc_col] < min_gdp) |\n",
" (full_country_stats[gdppc_col] > max_gdp)]\n",
"missing_data"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
2021-10-19 12:15:36 +02:00
"position_text_missing_countries = {\n",
" \"South Africa\": (20_000, 4.2),\n",
" \"Colombia\": (6_000, 8.2),\n",
" \"Brazil\": (18_000, 7.8),\n",
" \"Mexico\": (24_000, 7.4),\n",
" \"Chile\": (30_000, 7.0),\n",
2021-10-19 12:15:36 +02:00
" \"Norway\": (51_000, 6.2),\n",
" \"Switzerland\": (62_000, 5.7),\n",
" \"Ireland\": (81_000, 5.2),\n",
" \"Luxembourg\": (92_000, 4.7),\n",
"}"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 34,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
2024-10-03 10:34:08 +02:00
"image/png": "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
2022-02-19 10:24:54 +01:00
"text/plain": [
2024-10-03 10:34:08 +02:00
"<Figure size 800x300 with 1 Axes>"
2022-02-19 10:24:54 +01:00
]
},
2024-10-03 10:34:08 +02:00
"metadata": {},
2022-02-19 10:24:54 +01:00
"output_type": "display_data"
}
],
"source": [
2022-02-19 06:18:08 +01:00
"full_country_stats.plot(kind='scatter', figsize=(8, 3),\n",
2021-10-19 12:15:36 +02:00
" x=gdppc_col, y=lifesat_col, grid=True)\n",
"\n",
2021-10-19 12:15:36 +02:00
"for country, pos_text in position_text_missing_countries.items():\n",
" pos_data_x, pos_data_y = missing_data.loc[country]\n",
2021-10-19 12:15:36 +02:00
" plt.annotate(country, xy=(pos_data_x, pos_data_y),\n",
" xytext=pos_text, fontsize=12,\n",
2021-10-19 12:15:36 +02:00
" arrowprops=dict(facecolor='black', width=0.5,\n",
2022-02-19 06:18:08 +01:00
" shrink=0.08, headwidth=5))\n",
" plt.plot(pos_data_x, pos_data_y, \"rs\")\n",
"\n",
"X = np.linspace(0, 115_000, 1000)\n",
"plt.plot(X, t0 + t1 * X, \"b:\")\n",
"\n",
"lin_reg_full = linear_model.LinearRegression()\n",
2021-10-19 12:15:36 +02:00
"Xfull = np.c_[full_country_stats[gdppc_col]]\n",
"yfull = np.c_[full_country_stats[lifesat_col]]\n",
"lin_reg_full.fit(Xfull, yfull)\n",
"\n",
"t0full, t1full = lin_reg_full.intercept_[0], lin_reg_full.coef_[0][0]\n",
"X = np.linspace(0, 115_000, 1000)\n",
"plt.plot(X, t0full + t1full * X, \"k\")\n",
"\n",
"plt.axis([0, 115_000, min_life_sat, max_life_sat])\n",
"\n",
"save_fig('representative_training_data_scatterplot')\n",
"plt.show()"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 35,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
2024-10-03 10:34:08 +02:00
"image/png": "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
2022-02-19 10:24:54 +01:00
"text/plain": [
2024-10-03 10:34:08 +02:00
"<Figure size 800x300 with 1 Axes>"
2022-02-19 10:24:54 +01:00
]
},
2024-10-03 10:34:08 +02:00
"metadata": {},
2022-02-19 10:24:54 +01:00
"output_type": "display_data"
}
],
"source": [
"from sklearn import preprocessing\n",
"from sklearn import pipeline\n",
"\n",
2022-02-19 06:18:08 +01:00
"full_country_stats.plot(kind='scatter', figsize=(8, 3),\n",
2021-10-19 12:15:36 +02:00
" x=gdppc_col, y=lifesat_col, grid=True)\n",
"\n",
"poly = preprocessing.PolynomialFeatures(degree=10, include_bias=False)\n",
"scaler = preprocessing.StandardScaler()\n",
"lin_reg2 = linear_model.LinearRegression()\n",
"\n",
"pipeline_reg = pipeline.Pipeline([\n",
" ('poly', poly),\n",
" ('scal', scaler),\n",
" ('lin', lin_reg2)])\n",
"pipeline_reg.fit(Xfull, yfull)\n",
"curve = pipeline_reg.predict(X[:, np.newaxis])\n",
"plt.plot(X, curve)\n",
2021-10-19 12:15:36 +02:00
"\n",
"plt.axis([0, 115_000, min_life_sat, max_life_sat])\n",
"\n",
"save_fig('overfitting_model_plot')\n",
"plt.show()"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 36,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/plain": [
"Country\n",
"New Zealand 7.3\n",
"Sweden 7.3\n",
"Norway 7.6\n",
"Switzerland 7.5\n",
"Name: Life satisfaction, dtype: float64"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 36,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"w_countries = [c for c in full_country_stats.index if \"W\" in c.upper()]\n",
2021-10-19 12:15:36 +02:00
"full_country_stats.loc[w_countries][lifesat_col]"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 37,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>GDP per capita (USD)</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Country</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Malawi</th>\n",
" <td>1486.778248</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rwanda</th>\n",
" <td>2098.710362</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Zimbabwe</th>\n",
" <td>2744.690758</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Africa Western and Central</th>\n",
" <td>4003.158913</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Papua New Guinea</th>\n",
" <td>4101.218882</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Lower middle income</th>\n",
" <td>6722.809932</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Eswatini</th>\n",
" <td>8392.717564</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Low &amp; middle income</th>\n",
" <td>10293.855325</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Arab World</th>\n",
" <td>13753.707307</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Botswana</th>\n",
" <td>16040.008473</td>\n",
" </tr>\n",
" <tr>\n",
" <th>World</th>\n",
" <td>16194.040310</td>\n",
" </tr>\n",
" <tr>\n",
" <th>New Zealand</th>\n",
" <td>42404.393738</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Sweden</th>\n",
" <td>50683.323510</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Norway</th>\n",
" <td>63585.903514</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Switzerland</th>\n",
" <td>68393.306004</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" GDP per capita (USD)\n",
"Country \n",
"Malawi 1486.778248\n",
"Rwanda 2098.710362\n",
"Zimbabwe 2744.690758\n",
"Africa Western and Central 4003.158913\n",
"Papua New Guinea 4101.218882\n",
"Lower middle income 6722.809932\n",
"Eswatini 8392.717564\n",
"Low & middle income 10293.855325\n",
"Arab World 13753.707307\n",
"Botswana 16040.008473\n",
"World 16194.040310\n",
"New Zealand 42404.393738\n",
"Sweden 50683.323510\n",
"Norway 63585.903514\n",
"Switzerland 68393.306004"
]
},
2024-10-03 10:34:08 +02:00
"execution_count": 37,
2022-02-19 10:24:54 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2021-10-19 12:15:36 +02:00
"all_w_countries = [c for c in gdp_per_capita.index if \"W\" in c.upper()]\n",
"gdp_per_capita.loc[all_w_countries].sort_values(by=gdppc_col)"
]
},
{
"cell_type": "code",
2024-10-03 10:34:08 +02:00
"execution_count": 38,
"metadata": {},
2022-02-19 10:24:54 +01:00
"outputs": [
{
"data": {
2024-10-03 10:34:08 +02:00
"image/png": "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
2022-02-19 10:24:54 +01:00
"text/plain": [
2024-10-03 10:34:08 +02:00
"<Figure size 800x300 with 1 Axes>"
2022-02-19 10:24:54 +01:00
]
},
2024-10-03 10:34:08 +02:00
"metadata": {},
2022-02-19 10:24:54 +01:00
"output_type": "display_data"
}
],
"source": [
2022-02-19 06:18:08 +01:00
"country_stats.plot(kind='scatter', x=gdppc_col, y=lifesat_col, figsize=(8, 3))\n",
2021-10-19 12:15:36 +02:00
"missing_data.plot(kind='scatter', x=gdppc_col, y=lifesat_col,\n",
" marker=\"s\", color=\"r\", grid=True, ax=plt.gca())\n",
"\n",
"X = np.linspace(0, 115_000, 1000)\n",
"plt.plot(X, t0 + t1*X, \"b:\", label=\"Linear model on partial data\")\n",
2021-10-19 12:15:36 +02:00
"plt.plot(X, t0full + t1full * X, \"k-\", label=\"Linear model on all data\")\n",
"\n",
"ridge = linear_model.Ridge(alpha=10**9.5)\n",
2021-10-19 12:15:36 +02:00
"X_sample = country_stats[[gdppc_col]]\n",
"y_sample = country_stats[[lifesat_col]]\n",
"ridge.fit(X_sample, y_sample)\n",
"t0ridge, t1ridge = ridge.intercept_[0], ridge.coef_[0][0]\n",
2021-10-19 12:15:36 +02:00
"plt.plot(X, t0ridge + t1ridge * X, \"b--\",\n",
" label=\"Regularized linear model on partial data\")\n",
2022-02-19 06:18:08 +01:00
"plt.legend(loc=\"lower right\")\n",
"\n",
"plt.axis([0, 115_000, min_life_sat, max_life_sat])\n",
"\n",
"save_fig('ridge_model_plot')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise Solutions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Machine Learning is about building systems that can learn from data. Learning means getting better at some task, given some performance measure.\n",
"2. Machine Learning is great for complex problems for which we have no algorithmic solution, to replace long lists of hand-tuned rules, to build systems that adapt to fluctuating environments, and finally to help humans learn (e.g., data mining).\n",
"3. A labeled training set is a training set that contains the desired solution (a.k.a. a label) for each instance.\n",
"4. The two most common supervised tasks are regression and classification.\n",
"5. Common unsupervised tasks include clustering, visualization, dimensionality reduction, and association rule learning.\n",
"6. Reinforcement Learning is likely to perform best if we want a robot to learn to walk in various unknown terrains, since this is typically the type of problem that Reinforcement Learning tackles. It might be possible to express the problem as a supervised or semi-supervised learning problem, but it would be less natural.\n",
"7. If you don't know how to define the groups, then you can use a clustering algorithm (unsupervised learning) to segment your customers into clusters of similar customers. However, if you know what groups you would like to have, then you can feed many examples of each group to a classification algorithm (supervised learning), and it will classify all your customers into these groups.\n",
"8. Spam detection is a typical supervised learning problem: the algorithm is fed many emails along with their labels (spam or not spam).\n",
"9. An online learning system can learn incrementally, as opposed to a batch learning system. This makes it capable of adapting rapidly to both changing data and autonomous systems, and of training on very large quantities of data.\n",
"10. Out-of-core algorithms can handle vast quantities of data that cannot fit in a computer's main memory. An out-of-core learning algorithm chops the data into mini-batches and uses online learning techniques to learn from these mini-batches.\n",
"11. An instance-based learning system learns the training data by heart; then, when given a new instance, it uses a similarity measure to find the most similar learned instances and uses them to make predictions.\n",
"12. A model has one or more model parameters that determine what it will predict given a new instance (e.g., the slope of a linear model). A learning algorithm tries to find optimal values for these parameters such that the model generalizes well to new instances. A hyperparameter is a parameter of the learning algorithm itself, not of the model (e.g., the amount of regularization to apply).\n",
"13. Model-based learning algorithms search for an optimal value for the model parameters such that the model will generalize well to new instances. We usually train such systems by minimizing a cost function that measures how bad the system is at making predictions on the training data, plus a penalty for model complexity if the model is regularized. To make predictions, we feed the new instance's features into the model's prediction function, using the parameter values found by the learning algorithm.\n",
"14. Some of the main challenges in Machine Learning are the lack of data, poor data quality, nonrepresentative data, uninformative features, excessively simple models that underfit the training data, and excessively complex models that overfit the data.\n",
"15. If a model performs great on the training data but generalizes poorly to new instances, the model is likely overfitting the training data (or we got extremely lucky on the training data). Possible solutions to overfitting are getting more data, simplifying the model (selecting a simpler algorithm, reducing the number of parameters or features used, or regularizing the model), or reducing the noise in the training data.\n",
"16. A test set is used to estimate the generalization error that a model will make on new instances, before the model is launched in production.\n",
"17. A validation set is used to compare models. It makes it possible to select the best model and tune the hyperparameters.\n",
"18. The train-dev set is used when there is a risk of mismatch between the training data and the data used in the validation and test datasets (which should always be as close as possible to the data used once the model is in production). The train-dev set is a part of the training set that's held out (the model is not trained on it). The model is trained on the rest of the training set, and evaluated on both the train-dev set and the validation set. If the model performs well on the training set but not on the train-dev set, then the model is likely overfitting the training set. If it performs well on both the training set and the train-dev set, but not on the validation set, then there is probably a significant data mismatch between the training data and the validation + test data, and you should try to improve the training data to make it look more like the validation + test data.\n",
"19. If you tune hyperparameters using the test set, you risk overfitting the test set, and the generalization error you measure will be optimistic (you may launch a model that performs worse than you expect)."
]
},
2019-07-10 17:08:12 +02:00
{
"cell_type": "code",
"execution_count": null,
"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",
2024-10-03 10:34:08 +02:00
"version": "3.10.11"
},
"metadata": {
"interpreter": {
"hash": "22b0ec00cd9e253c751e6d2619fc0bb2d18ed12980de3246690d5be49479dd65"
}
},
2016-09-27 16:39:16 +02:00
"nav_menu": {},
"toc": {
2016-09-27 16:39:16 +02:00
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 6,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": true
},
"toc_position": {
2016-09-27 16:39:16 +02:00
"height": "616px",
"left": "0px",
"right": "20px",
2016-09-27 16:39:16 +02:00
"top": "106px",
"width": "213px"
}
},
"nbformat": 4,
2020-04-06 09:13:12 +02:00
"nbformat_minor": 4
}