{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise 1 - Implementing the logistic function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Task**:\n",
"Implement the logistic function\n",
"\n",
"$$ \\sigma(x) = \\frac{e^x}{1+e^x} = \\frac{1}{1+e^{-x}}$$"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"#def sigma(x):\n",
" # Put your definition here"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Solution**:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"def sigma(x):\n",
" s = np.exp(-x)\n",
" return 1 / (1. + s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we want to investigate how the shape of the logistic function changes for an affine linear input, i.e.,\n",
"\n",
"$$ \\sigma(\\beta_0 + \\beta_1 x) $$\n",
"\n",
"for different values of $\\beta_0$ and $\\beta_1$.\n",
"\n",
"**Task**: Take your time and try different values.\n",
"What happens for negative/positive values of $\\beta_1$?\n",
"What role does $\\beta_0$ play?\n",
"\n",
"**You have nothing to implement here, only evaluate the cells below.**"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"def my_sigma(b0, b1) : return sigma(b0 + b1 * x)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8cbc0286157147d589ebb702655091b5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(FloatSlider(value=0.0, description='b0', max=10.0, min=-10.0, step=1.0), FloatSlider(val…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"from ipywidgets import interactive\n",
"def f(b0, b1):\n",
" plt.figure(1)\n",
" x = np.linspace(-10,10,1001)\n",
" plt.plot(x, sigma(b0 + b1*x))\n",
" plt.plot(x,0.5*np.ones(x.shape))\n",
" plt.ylim(-0.1, 1.1)\n",
" plt.xlabel('x')\n",
" plt.ylabel('p(x)')\n",
" plt.show()\n",
"\n",
"interactive_plot = interactive(f, b0=(-10.0, 10.0, 1.0), b1=(-3., 3., 0.2))\n",
"output = interactive_plot.children[-1]\n",
"output.layout.height = '350px'\n",
"interactive_plot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise 2 - Logistic regression in practice"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this lab, we want to investigate the `Default` data set known from the lecture.\n",
"We first load the necessary modules.\n",
"The command\n",
" \n",
" plt.rcParams['figure.figsize'] = [13, 5]\n",
" \n",
"changes the size of the figure (in inches)."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"plt.rcParams['figure.figsize'] = [13, 5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Task**: Download the file `Default.csv` from the webpage and read it using the `pandas` function `read_csv`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Solution**:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"D = pd.read_csv('./datasets/Default.csv',index_col =0, decimal=',')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Task**: Inspect the data using the methods you've learned so far, e.g., `describe`, `hist`, `head`, etc."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Solution**:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" default | \n",
" student | \n",
" balance | \n",
" income | \n",
"
\n",
" \n",
" \n",
" \n",
" 1 | \n",
" No | \n",
" No | \n",
" 729.526495 | \n",
" 44361.625074 | \n",
"
\n",
" \n",
" 2 | \n",
" No | \n",
" Yes | \n",
" 817.180407 | \n",
" 12106.134700 | \n",
"
\n",
" \n",
" 3 | \n",
" No | \n",
" No | \n",
" 1073.549164 | \n",
" 31767.138947 | \n",
"
\n",
" \n",
" 4 | \n",
" No | \n",
" No | \n",
" 529.250605 | \n",
" 35704.493935 | \n",
"
\n",
" \n",
" 5 | \n",
" No | \n",
" No | \n",
" 785.655883 | \n",
" 38463.495879 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" default student balance income\n",
"1 No No 729.526495 44361.625074\n",
"2 No Yes 817.180407 12106.134700\n",
"3 No No 1073.549164 31767.138947\n",
"4 No No 529.250605 35704.493935\n",
"5 No No 785.655883 38463.495879"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"D.head()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" balance | \n",
" income | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 10000.000000 | \n",
" 10000.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 835.374886 | \n",
" 33516.981876 | \n",
"
\n",
" \n",
" std | \n",
" 483.714985 | \n",
" 13336.639563 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000 | \n",
" 771.967729 | \n",
"
\n",
" \n",
" 25% | \n",
" 481.731105 | \n",
" 21340.462903 | \n",
"
\n",
" \n",
" 50% | \n",
" 823.636973 | \n",
" 34552.644802 | \n",
"
\n",
" \n",
" 75% | \n",
" 1166.308386 | \n",
" 43807.729272 | \n",
"
\n",
" \n",
" max | \n",
" 2654.322576 | \n",
" 73554.233495 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" balance income\n",
"count 10000.000000 10000.000000\n",
"mean 835.374886 33516.981876\n",
"std 483.714985 13336.639563\n",
"min 0.000000 771.967729\n",
"25% 481.731105 21340.462903\n",
"50% 823.636973 34552.644802\n",
"75% 1166.308386 43807.729272\n",
"max 2654.322576 73554.233495"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"D.describe()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[,\n",
" ]],\n",
" dtype=object)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"