{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example Linear Regression\n", "\n", "In this example (generalized) linear regression, as introduced [in the previous section](LinReg) is implemented and applied for estimating a function $f()$ that maps the speed of long distance runners to their heartrate. \n", "\n", "$$\n", "heartrate = f(speed)\n", "$$\n", "\n", "For training the model, a set of 30 samples is applied, each containing the speed (in m/s) of a runner and the heartrate measured at this speed. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> Note that in this example input data consists of the single feature *speed*, i.e. it is 1-dimensional (d=1). All functions implemented below are tailored to this one-dimensional case." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Required Modules:" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "#%matplotlib inline\n", "import numpy as np\n", "import pandas as pd\n", "import math\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read data from file. The first column contains an ID, the second column is the speed in m/s and the third column is the heartrate in beats/s." ] }, { "cell_type": "code", "execution_count": 48, "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", "
speedheartrate
14.50155.15
25.00166.68
34.50164.37
45.25160.82
54.50148.51
64.75169.83
75.00188.01
85.50187.90
94.50157.96
105.25178.29
115.25179.55
125.50203.81
134.00150.74
144.50171.78
155.00172.52
164.25148.92
174.25160.02
185.00183.83
195.00156.67
205.00162.40
215.00171.39
224.00156.10
234.50153.15
244.75161.35
254.25163.16
265.25165.42
275.25189.25
284.25165.56
295.25172.35
304.00158.07
\n", "
" ], "text/plain": [ " speed heartrate\n", "1 4.50 155.15\n", "2 5.00 166.68\n", "3 4.50 164.37\n", "4 5.25 160.82\n", "5 4.50 148.51\n", "6 4.75 169.83\n", "7 5.00 188.01\n", "8 5.50 187.90\n", "9 4.50 157.96\n", "10 5.25 178.29\n", "11 5.25 179.55\n", "12 5.50 203.81\n", "13 4.00 150.74\n", "14 4.50 171.78\n", "15 5.00 172.52\n", "16 4.25 148.92\n", "17 4.25 160.02\n", "18 5.00 183.83\n", "19 5.00 156.67\n", "20 5.00 162.40\n", "21 5.00 171.39\n", "22 4.00 156.10\n", "23 4.50 153.15\n", "24 4.75 161.35\n", "25 4.25 163.16\n", "26 5.25 165.42\n", "27 5.25 189.25\n", "28 4.25 165.56\n", "29 5.25 172.35\n", "30 4.00 158.07" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataframe=pd.read_csv(\"HeartRate.csv\",header=None,sep=\";\",decimal=\",\",index_col=0,names=[\"speed\",\"heartrate\"])\n", "dataframe" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of samples: 30\n" ] } ], "source": [ "numdata=dataframe.shape[0]\n", "print(\"Number of samples: \",numdata)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the function `calculateWeights(X,r,deg)` the weights are calculated by applying the already introduced equation\n", "\n", "$$\n", "w=\\left( D^T D\\right)^{-1} D^T r\n", "$$\n", "\n", "The function is tailored to the case, where input data consists of only a single feature. However, the function is implemented such that, it can not only be applied to learn a linear function, but a polynomial of arbitrary degree. The degree of the polynomial can be set by the `deg`-argument of the function." ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [], "source": [ "def calculateWeights(X,r,deg):\n", " numdata=X.shape[0]\n", " D=np.zeros((numdata,deg+1))\n", " for p in range(numdata):\n", " for ex in range(deg+1):\n", " D[p][ex]=math.pow(float(X[p]),ex)\n", " DT=np.transpose(D)\n", " DTD=np.dot(DT,D)\n", " y=np.dot(DT,r)\n", " w=np.linalg.lstsq(DTD,y,rcond=None)[0]\n", " return w" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [], "source": [ "features=dataframe[\"speed\"].values\n", "targets=dataframe[\"heartrate\"].values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Learn linear function\n", "First, we learn the best linear function \n", "\n", "$$\n", "heartrate = w_0+w_1 \\cdot speed\n", "$$\n", "\n", "by setting the `deg`-argument of the function `calculateWeights()` to 1:" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Calculated weights:\n", "w0 = 67.68\n", "w1 = 20.93\n" ] } ], "source": [ "degree=1\n", "w=calculateWeights(features,targets,degree)\n", "print('Calculated weights:')\n", "for i in range(len(w)):\n", " print(\"w%d = %3.2f\"%(i,w[i]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The learned model and the training samples are plotted below:" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "data": { "image/png": "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EYlMUgOZmXUkCGNF7v5UOHm7mQ0O5w8GdoTTy4DhDR4+DNhy/Drdfb67T3H3Kf37909e8SIiIiIpksyzLA0oBF539x80mPU0cGd4+07gdw2m32pmWWaWD4wCViSrPhEREZHWIjOJ654JfBhYa2arw2n/D/g28ISZzQFKgZsA3P01M3sCWE9whua97l6XxPpEREREWoWkBTJ3j9F4XxjARU08Zh4wL1k1iYiIiLRGGqlfREREJGIKZCIiIiIRUyATERERiZgCmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREZGIKZCJiIiIREyBTERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxBTIRERERCKmQCYiIiISMQUyERERkYgpkImIiIhETIFMREREJGIKZCIiIiIRUyATERERiZgCmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREZGIKZCJiIiIREyBTERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxBTIRERERCKmQCYiIiISMQUyERERkYgpkImIiIhETIFMREREJGIKZCIiIiIRUyATERERiZgCmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREZGIJS2QmdkCM9thZusaTJtkZkvNbK2ZPWNmPRrM+6KZbTCzN83s0mTVJSIiItLaJHMP2QPAZcdNux/4grtPAH4DfA7AzMYCtwLjwsf81Mw6JLE2ERERkVYjaYHM3f8B7Dlu8unAP8LbfwZuCG9fCzzm7lXuHgc2ANOSVZuIiIhIa5LqHrJ1wDXh7ZuA4eHtocCmBsuVhdPexczuMbOVZrZy586dSStUREREJFVSHchmA/ea2SqgO1AdTrdGlvXGVuDu8919irtP6d+/f5LKFBEREUmdzFQ+mbu/AVwCYGajgSvDWWUc3VsGMAzYksraRERERKKS0j1kZjYg/J4BfAn4eTjraeBW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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,8))\n", "plt.scatter(features,targets,marker='o', color='red')\n", "plt.title('heartrate vs. speed of long distance runners')\n", "plt.xlabel('speed in m/s')\n", "plt.ylabel('heartrate in bps')\n", "RES=0.05 # resolution of speed-axis\n", "# plot calculated linear regression \n", "minS=np.min(features)\n", "maxS=np.max(features)\n", "speedrange=np.arange(minS,maxS+RES,RES)\n", "hrrange=np.zeros(speedrange.shape[0])\n", "for si,s in enumerate(speedrange):\n", " hrrange[si]=np.sum([w[d]*s**d for d in range(degree+1)])\n", "plt.plot(speedrange,hrrange)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally the mean absolute distance (MAD) and the Mean Square Error (MSE) are calculated." ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "7.544456857402351\n", "MAD = 7.544456857402351\n", "MSE = 84.61650344232515\n" ] } ], "source": [ "pred=np.zeros(numdata)\n", "for si,x in enumerate(features):\n", " pred[si]=np.sum([w[d]*x**d for d in range(degree+1)])\n", " \n", "mad=1.0/numdata*np.sum(np.abs(pred-targets))\n", "mse=1.0/numdata*np.sum((pred-targets)**2)\n", "print(mad) \n", "print('MAD = ',mad) \n", "print('MSE = ',mse)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that here the metrics MAD and MSE have been calculated on the training data. Hence, the corresponding values describe how well the model is fitted to training data. But these values are useless for determining how good the model will perform on new data. Usually in Machine Learning performance metrics such as MAD and MSE are calculated on test-data. But in this example we haven't split the set of labeled data into a training- and a test-partition." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Learn quadratic function\n", "\n", "In order to learn the best quadratic function\n", "\n", "$$\n", "heartrate = w_0+w_1 \\cdot speed +w_2 \\cdot (speed)^2\n", "$$\n", "\n", "we repeat the steps for `deg=2`:" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Calculated weights:\n", "w0 = 445.13\n", "w1 = -140.19\n", "w2 = 17.04\n" ] } ], "source": [ "degree=2\n", "w=calculateWeights(features,targets,degree)\n", "print('Calculated weights:')\n", "for i in range(len(w)):\n", " print(\"w%d = %3.2f\"%(i,w[i]))" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,8))\n", "plt.scatter(features,targets,marker='o', color='red')\n", "plt.title('heartrate vs. speed of long distance runners')\n", "plt.xlabel('speed in m/s')\n", "plt.ylabel('heartrate in bps')\n", "RES=0.05 # resolution of speed-axis\n", "# plot calculated linear regression \n", "minS=np.min(features)\n", "maxS=np.max(features)\n", "speedrange=np.arange(minS,maxS+RES,RES)\n", "hrrange=np.zeros(speedrange.shape[0])\n", "for si,s in enumerate(speedrange):\n", " hrrange[si]=np.sum([w[d]*s**d for d in range(degree+1)])\n", "plt.plot(speedrange,hrrange)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6.914621088469685\n", "MAD = 6.914621088469685\n", "MSE = 74.97805153085808\n" ] } ], "source": [ "pred=np.zeros(numdata)\n", "for si,x in enumerate(features):\n", " pred[si]=np.sum([w[d]*x**d for d in range(degree+1)])\n", " \n", "mad=1.0/numdata*np.sum(np.abs(pred-targets))\n", "mse=1.0/numdata*np.sum((pred-targets)**2)\n", "print(mad) \n", "print('MAD = ',mad) \n", "print('MSE = ',mse)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Learn cubic function\n", "\n", "In order to learn the best cubic function\n", "\n", "$$\n", "heartrate = w_0+w_1 \\cdot speed +w_2 \\cdot (speed)^2 +w_3 \\cdot (speed)^3\n", "$$\n", "\n", "we repeat the steps for `deg=3`:" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Calculated weights:\n", "w0 = -1374.83\n", "w1 = 1025.96\n", "w2 = -230.63\n", "w3 = 17.44\n" ] } ], "source": [ "degree=3\n", "w=calculateWeights(features,targets,degree)\n", "print('Calculated weights:')\n", "for i in range(len(w)):\n", " print(\"w%d = %3.2f\"%(i,w[i]))" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "image/png": "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+/sDW8LtJcDgmLsPAkrrP6a7z3H3AncvyM3NTVzxIiIiIkmSyLMsDfgDsMLdfxGz6xHgsvD7y4B/xGyfYWYdzGwoMBKYl6j6RERERFJF2wQ+9onAZ4AlZrYw3PYt4EfAXDP7LFAMXATg7svMbC6wnOAMzevcvSaB9YmIiIikhIQFMnd/kYbHhQH8TyP3mQ3MTlRNIiIiIqlIM/WLiIiIREyBTERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxBTIRERERCKmQCYiIiISMQUyERERkYgpkImIiIhETIFMREREJGIKZCIiIiIRUyATERERiZgCmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREZGIKZCJiIiIREyBTERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxBTIRERERCKmQCYiIiISMQUyERERkYgpkImIiIhETIFMREREJGIKZCIiIiIRUyATERERiZgCmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREclo23ZXUV1TG2kNCmQiIiKSsWpqnavvm89n752Pu0dWhwKZiIiIZKzfP/cObxSXc8GUgZhZZHUokImIiEhGWlZawa+eWck5E/rzsYkDIq1FgUxEREQyzr4DNXzloUV0z27P/00fH2nrGEDbSJ9dREREJAK/fHolb2/exd1XHEuPzu2jLkctZCIiIpJZXluzjTkvrOGSaXmcNrpP1OUACmQiIiKSQXZXVXPjnxeR1zObWR8dE3U571GXpYiIiGSMmx9dTmn5XuZ+7ng6d0idGKQWMhEREckIzyzfzEPzN/C5U4ZTkN8z6nIOoUAmIiIird623VXc9LfFjOnfjS+fPirqct4nddrqRERERBLA3fnWw0vYubeaP101kfZtU689KvUqEhEREWlBf3tjI08u28yNHxnFUf26RV1OgxTIREREpNXaWL6X7z2yjKn5Pbnq5GFRl9MoBTIRERFplWprna/OXUStOz+7aCJtsqKdjb8pCmQiIiLSKt3z8jpeWbON/z13LHm9sqMup0kJ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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,8))\n", "plt.scatter(features,targets,marker='o', color='red')\n", "plt.title('heartrate vs. speed of long distance runners')\n", "plt.xlabel('speed in m/s')\n", "plt.ylabel('heartrate in bps')\n", "RES=0.05 # resolution of speed-axis\n", "# plot calculated linear regression \n", "minS=np.min(features)\n", "maxS=np.max(features)\n", "speedrange=np.arange(minS,maxS+RES,RES)\n", "hrrange=np.zeros(speedrange.shape[0])\n", "for si,s in enumerate(speedrange):\n", " hrrange[si]=np.sum([w[d]*s**d for d in range(degree+1)])\n", "plt.plot(speedrange,hrrange)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6.950713112061212\n", "MAD = 6.950713112061212\n", "MSE = 72.8395306512783\n" ] } ], "source": [ "pred=np.zeros(numdata)\n", "for si,x in enumerate(features):\n", " pred[si]=np.sum([w[d]*x**d for d in range(degree+1)])\n", " \n", "mad=1.0/numdata*np.sum(np.abs(pred-targets))\n", "mse=1.0/numdata*np.sum((pred-targets)**2)\n", "print(mad) \n", "print('MAD = ',mad) \n", "print('MSE = ',mse)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Same solution, now using Scikit Learn" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [], "source": [ "degree=3" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LinearRegression()\n", "Degree = 3\n", "Learned coefficients w0, w1, w2, ....:\n", "[-1374.8269195 1025.96432274 -230.63229039 17.43724445]\n" ] } ], "source": [ "from sklearn import linear_model\n", "speed=np.transpose(np.atleast_2d(dataframe.values[:,0]))\n", "for d in range(1,degree):\n", " newcol=np.transpose(np.atleast_2d(np.power(speed[:,0],d+1)))\n", " speed=np.concatenate((speed,newcol),axis=1)\n", "heartrate=dataframe.values[:,1]\n", "\n", "# Train Linear Regression Model\n", "reg=linear_model.LinearRegression()\n", "reg.fit(speed,heartrate)\n", "print(reg)\n", "\n", "# Parameters of Trained Model \n", "print(\"Degree = \",degree)\n", "print(\"Learned coefficients w0, w1, w2, ....:\")\n", "wlist=[reg.intercept_]\n", "wlist.extend(reg.coef_)\n", "w=np.array(wlist)\n", "print(w)" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmQAAAHwCAYAAAAIDnN0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABL/UlEQVR4nO3deXxU5dn/8c8V9rCELeyEsMsimxFcq/bRqlVL1dqiad2qVKt2s4stfbr58Ou+aW0rWrc2LnSxVWtd27orgrKjgCwhBCEsCUsgkOT6/XFOZIhZBszMmcl8369XXpM5Z5ZrTiaTb+77Pvdt7o6IiIiIRCcr6gJEREREMp0CmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUwynpmtM7PTo65DPjgzczMbcQT3MzO728x2mNm8BvZfbmYvtkyVR65+HWa228yGRVmTiLQMBTKRJGqJP+xmlh8Gj7YtVZdwEnAGMMjdp0ZdTLzcvYu7r2nqNmZ2qpmVJKsmETkyCmQiSRJvgDKzNomuRd5nCLDO3fdEXUimSqX3vf7ZkSgokIkEJpnZYjOrMLOHzKxj3Q4zO9fMFppZuZm9bGYTYvbdZGbvmNkuM1tuZufH7LvczF4ys1+a2XbgIeD3wPFhV1N5eLt7zOx3Zva4me0BTjOzc8zsTTPbaWYbzOx7MbU+H16Wh49zfPg4V5rZirDb7UkzG9LQCzWzJ8zs+nrbFpnZBWHX3S/NbEt4LBab2fjmDl5T9wtf3+/N7OnwOD0XW5uZHRXu225mb5vZJ2P2dTCzn5lZsZltDh+nU8z+r5nZJjMrNbMrm6lxgJk9Ej7PajO7Otz+WeBODv5cvh/H6z3BzF4PX+vrZnZCzL7/mtnN4c9+l5k9ZWa9Y/ZfambrzWybmf2vNdFlbma9wpp3WtCVOrze/ve6aM3so+F7cJeZbTSzr5pZZ+BfwIDwte0Oj8NUM3slfE9vMrPfmFn7eo97jZmtCt9Pt5mZxey/Onyv1b3vp8Qc47+aWZmZrTWzLzRxDBt63//XzK6KuU39LtpG66q7bfh+2RE+/9kx980xsz+Er3ejmf2fhSHQ3v+7+j0zGxG+VyvMbKuZPdToG0KkJbi7vvSV0V/AOmAeMADoCawArgn3TQG2ANOANsBl4e07hPsvCu+XBXwK2AP0D/ddDlQDNwBtgU7hthfrPf89QAVwYvg4HYFTgaPD6xOAzcDHw9vnAw60jXmMjwOrgTHhc30beLmR13sp8FLM9bFAOdABOBNYAHQHLHy8/nEcw0bvF76+XcCHwuf4dd0xADoDG4ArwrqnAFuBceH+XwGPhD+XrsCjwA/DfWeFx2V8+Dj3h8dlRCM1Pgf8Njy+k4Ay4H9iflYvNvH63tsf1rID+ExY88Xh9V7h/v8C7wCjwp/5f4EfxRzr3QRdpO2BnwEHgNMbed4Hgbnh6xsPbIytM/b1ApuAk8PvewBTwu9PBUrqPe4xwHFh/fkE7/kv1Xvcx8KfZ154rM6Kec9vBI4Nf9YjCFoYs8L3wHfC1zYMWAOc2chru4f3v+//C1zV0HGPo67Lw2N5NcHv6rVAKWDh/r8Dt4fHsg/B7/znmvhdfQCYFVPbSVF/VumrdX+phUwkcIu7l7r7doI/+pPC7VcDt7v7a+5e4+73AlUEf8xw9z+H96t194eAVUDsGKRSd7/V3avdfW8Tz/8Pd38pfJx97v5fd18SXl9M8MfhlCbu/zmCoLLC3auB/0fQ6tdQK9nD9fYVAn9z9yqCP2hdgaMI/pCtcPdNTTxvnebu9093fz58jlkErVGDgXMJugrvDo/RG8BfgU+ELR9XA1929+3uvit8XTPCx/wkcLe7L/Wgq/F7jRUXPtdJwDfC47uQoFXsM3G8tvrOAVa5+x/Dmh8A3gLOi7nN3e6+MvyZz+Xg++kTwKPu/qK77ycILw0uKBy23lwIfMfd97j7UuDeJuo6AIw1s27uviM8lg1y9wXu/mpY/zqCoFL//fUjdy9392LgPzGv4SrgJ+7+ugdWu/t6goCW6+4/cPf9Hoxtu4ODP6+GHPK+b+J28dQFsN7d73D3GoJj1R/oa2Z9gbMJQuced98C/LJebfV/Vw8QBM0B4Xsm8pM6pHVTIBMJvBvzfSXQJfx+CHBj2LVTbkE342CCVrG67qeFMfvGA71jHmtDnM9/yO3MbJqZ/Sfs+qkArqn3uPUNAX4dU8d2gtaLgfVvGAabf3Lwj9EMoCjc92/gN8BtwGYzm2Nm3ZorPo77bYi57e6wvgFh3dPqHd9CoB+QC2QDC2L2PRFuJ7x/7HFb30SJA4C6UBd7+/cdnzgMaOC56j9WY++nQ2p290pgWyPPk0vQWhPva7wQ+CiwPuxqO76xG5rZKDN7zMzeNbOdBEG3/vursdcwmKAFsL4hBF2jsT/LbwF9m6g53t+PeOo6ZF94bAn3DwHaAZtiarudoKWssVq+TvA7NM/MllkzXeIiH5QCmUjTNgCz3b17zFe2uz8QtjDdAVxP0F3VHVhK8CFep37rR4OtIQ1sv5+gq26wu+cQjD2zRm5bV+fn6tXZyd1fbuT5HgAuDv9odyJoaQge3P0Wdz8GGEfQ7fa1Rh7j0BfQ9P0G131jZl0Iuv1Kw7qfq1d3F3e/lqDrci9B92Xdvhx3r/sDvCn2cQm6sBpTCvQ0s671br8xntfWwGPVb3mM97E2AYPqrlgwHq5XI7ctI+hGi+s1hi1W0wlCxt8JWuag4ffL7wha9Ua6ezeC4GQN3K4hG6g3li1m+9p6P8uu7v7RJh6rfm17CEJ4nX5x1tScDQQt271jauvm7uMaq8Xd33X3q919AEEL9G/tCKZUEYmXAplI0+4ArglbrMzMOlsw4L4rwVgUJ/jDiZldQdBC1pTNwKDYAdSN6ErQorPPzKYCl8TsKwNqCcbo1Pk98E0zGxfWkmNmFzXx+I8ThIofAA+5e214v2PD19qO4I/jPqCmmVrjud9Hzeyk8HXfDLzm7hsIxgONMrPPmFm78OtYMxsT1nQH8Esz6xM+z0AzOzN8zLnA5WY21syyge82Vl/4XC8DPzSzjhacmPFZwpbBw/R4WPMlZtbWzD5FMDbssTju+xfgPAtOCmgPfJ9GglDY7fY3ggHm2WY2lmAM4/uYWXszKzSzHHc/AOzk4PHfDPQys5yYu3QNb7PbzI4iGG8VrzuBr5rZMeHvxIjwn5N5wE4z+4aZdTKzNmY23syOPYzHXghcEL7eEQQ/ow8s7D5/Cvi5mXUzsywzG25mjQ4DMLOLzKwuPO8g+F1v9ndB5EgpkIk0wd3nE4xj+g3Bh/JqggHAuPty4OfAKwR/9I4GXmrmIf8NLAPeNbOtTdzu88APzGwXwTijutaOuq6Y2cBLYffLce7+MPBj4MGwC2opwZiZxl5XFcEf+9MJWuPqdCMIQTsIuse2EQw8x8y+ZWb/auQhG71f6H6CwLSdYEB5YVjHLuAjBN2mpQRdTj8mGPwP8A2CY/5q+LqeAUaH9/0XwaD/f4e3+Xdjrzd0McEA9lKCcXTfdfenm7nP+7j7NoKxbzeGr/PrwLnu3tTPs+6+ywgGjj9I0Fq2i+CkkapG7nI9QZfbuwSD4O9u4uE/A6wLj9M1wKfD53yLoEV0Tfh+GQB8lSDk7yL4ucV9BqG7/5ng/Xd/eP+/Az3DAHkewZiutQQtnHcCOQ0+UMN+Cewn+H26lyMLzI25lOBkg+UE79O/EIwxa8yxwGtmtpugtfqL7r62BesROUTd2SciIglhZvcQnOX37ahrSTVh9205Qdeh/tiLZDC1kImIJJGZnRd2yXUmaEVcQjCViohkMAUyEZHkmk7QbVoKjARmuLoqRDKeuixFREREIqYWMhEREZGIKZCJiIiIRCytV7Tv3bu35+fnR12GiIiISLMWLFiw1d1zG9qX1oEsPz+f+fPnR12GiIiISLPMrNHlz9RlKSIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREZGIKZCJiIiIREyBTERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxBTIREREJHMVFUF+PmRlBZdFRZGU0TaSZxURERGJWlERzJwJlZXB9fXrg+sAhYVJLUUtZCIiIpKZZs06GMbqVFYG25NMgUxEREQyU3Hx4W1PIAUyERERyUx5eYe3PYEUyERERCQzzZ4N2dmHbsvODrYnmQKZiIiIZKbCQpgzB4YMAbPgcs6cpA/oB51lKSIiIpmssDCSAFafWshEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREZGIKZCJiIiIREyBTERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxBTIRERERCKmQCYiIiISsYQFMjMbbGb/MbMVZrbMzL4Ybu9pZk+b2arwskfMfb5pZqvN7G0zOzNRtYmIiIikkkS2kFUDN7r7GOA44DozGwvcBDzr7iOBZ8PrhPtmAOOAs4DfmlmbBNYnIiIikhISFsjcfZO7vxF+vwtYAQwEpgP3hje7F/h4+P104EF3r3L3tcBqYGqi6hMRERFJFUkZQ2Zm+cBk4DWgr7tvgiC0AX3Cmw0ENsTcrSTcJiIiItKqJTyQmVkX4K/Al9x9Z1M3bWCbN/B4M81svpnNLysra6kyRURERCKT0EBmZu0IwliRu/8t3LzZzPqH+/sDW8LtJcDgmLsPAkrrP6a7z3H3AncvyM3NTVzxIiIiIkmSyLMsDfgDsMLdfxGz6xHgsvD7y4B/xGyfYWYdzGwoMBKYl6j6RERERFJF2wQ+9onAZ4AlZrYw3PYt4EfAXDP7LFAMXATg7svMbC6wnOAMzevcvSaB9YmIiIikhIQFMnd/kYbHhQH8TyP3mQ3MTlRNIiIiIqlIM/WLiIiIREyBTERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxBTIRERERCKmQCYiIiISMQUyERERkYgpkImIiIhETIFMREREJGIKZCIiIiIRUyATERERiZgCmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREZGIKZCJiIiIREyBTERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxBTIRERERCKmQCYiIiISMQUyERERkYgpkImIiIhETIFMREREJGIKZCIiIiIRUyATERERiZgCmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREclo23ZXUV1TG2kNCmQiIiKSsWpqnavvm89n752Pu0dWhwKZiIiIZKzfP/cObxSXc8GUgZhZZHUokImIiEhGWlZawa+eWck5E/rzsYkDIq1FgUxEREQyzr4DNXzloUV0z27P/00fH2nrGEDbSJ9dREREJAK/fHolb2/exd1XHEuPzu2jLkctZCIiIpJZXluzjTkvrOGSaXmcNrpP1OUACmQiIiKSQXZXVXPjnxeR1zObWR8dE3U571GXpYiIiGSMmx9dTmn5XuZ+7ng6d0idGKQWMhEREckIzyzfzEPzN/C5U4ZTkN8z6nIOoUAmIiIird623VXc9LfFjOnfjS+fPirqct4nddrqRERERBLA3fnWw0vYubeaP101kfZtU689KvUqEhEREWlBf3tjI08u28yNHxnFUf26RV1OgxTIREREpNXaWL6X7z2yjKn5Pbnq5GFRl9MoBTIRERFplWprna/OXUStOz+7aCJtsqKdjb8pCmQiIiLSKt3z8jpeWbON/z13LHm9sqMup0kJ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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot training samples\n", "plt.figure(figsize=(10,8))\n", "plt.scatter(speed[:,0],heartrate,marker='o', color='red')\n", "plt.title('heartrate vs. speed of long distance runners')\n", "plt.xlabel('speed in m/s')\n", "plt.ylabel('heartrate in bps')\n", "#plt.hold(True)\n", "for si,s in enumerate(speedrange):\n", " hrrange[si]=np.sum([w[d]*s**d for d in range(degree+1)])\n", "plt.plot(speedrange,hrrange)\n", "plt.show()" ] }, { "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", "version": "3.8.0" }, "nav_menu": {}, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }