Commit f792a9a8 by Paktalin

experimented with physics lab data

parent cfc07411
{
"cells": [
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from jupyterthemes import jtplot\n",
"jtplot.style(theme='gruvboxd')"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [],
"source": [
"N = 50\n",
"D = 50"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [],
"source": [
"X = (np.random.random((N, D)) - 0.5) * 10\n",
"true_w = np.array([1, 0.5, -0.5] + [0]*(D-3))"
]
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {},
"outputs": [],
"source": [
"Y = X.dot(true_w) + np.random.randn(N)*0.5"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [],
"source": [
"MSEs = []\n",
"w = np.random.randn(D) / np.sqrt(D)"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"final MSE is 0.13998787535698537\n"
]
}
],
"source": [
"epochs = 100\n",
"lr = 0.0005\n",
"l1 = 10.0\n",
"for t in range(epochs):\n",
" Yhat = X.dot(w)\n",
" delta = Yhat - Y\n",
" w = w - lr*(X.T.dot(delta) + np.sign(w)*l1)\n",
" mse = delta.dot(delta) / N\n",
" MSEs.append(mse)\n",
"print('final MSE is', MSEs[len(MSEs)-1])"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 460.8x403.2 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(MSEs)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 460.8x403.2 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(true_w, label='true w')\n",
"plt.plot(w, label='w_map')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
{
"cells": [],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 2
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"from jupyterthemes import jtplot\n",
"jtplot.style(theme='gruvboxd')"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [],
"source": [
"N = 12"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"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>nr</th>\n",
" <th>temp_c</th>\n",
" <th>temp_k</th>\n",
" <th>metall_resistance</th>\n",
" <th>semicond_resistance</th>\n",
" <th>1/t</th>\n",
" <th>ln_R</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>28</td>\n",
" <td>301.15</td>\n",
" <td>27.7</td>\n",
" <td>75243.1</td>\n",
" <td>0.003321</td>\n",
" <td>11.228479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>30</td>\n",
" <td>303.15</td>\n",
" <td>28.0</td>\n",
" <td>62509.6</td>\n",
" <td>0.003299</td>\n",
" <td>11.043075</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>32</td>\n",
" <td>305.15</td>\n",
" <td>28.3</td>\n",
" <td>54535.2</td>\n",
" <td>0.003277</td>\n",
" <td>10.906602</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>34</td>\n",
" <td>307.15</td>\n",
" <td>28.6</td>\n",
" <td>50290.7</td>\n",
" <td>0.003256</td>\n",
" <td>10.825575</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>36</td>\n",
" <td>309.15</td>\n",
" <td>28.9</td>\n",
" <td>44116.9</td>\n",
" <td>0.003235</td>\n",
" <td>10.694598</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" nr temp_c temp_k metall_resistance semicond_resistance 1/t \\\n",
"0 1 28 301.15 27.7 75243.1 0.003321 \n",
"1 2 30 303.15 28.0 62509.6 0.003299 \n",
"2 3 32 305.15 28.3 54535.2 0.003277 \n",
"3 4 34 307.15 28.6 50290.7 0.003256 \n",
"4 5 36 309.15 28.9 44116.9 0.003235 \n",
"\n",
" ln_R \n",
"0 11.228479 \n",
"1 11.043075 \n",
"2 10.906602 \n",
"3 10.825575 \n",
"4 10.694598 "
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# load data\n",
"df = pd.read_csv('../files/resistance.csv', sep=';', decimal=',')\n",
"df.columns = ['nr', 'temp_c', 'temp_k', 'metall_resistance', 'semicond_resistance', '1/t', 'ln_R']\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [],
"source": [
"def process_features(df):\n",
" return df['temp_c'].head(N)"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [],
"source": [
"def process_targets(df):\n",
" return df['ln_R'].head(N)"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [],
"source": [
"df.columns = ['nr', 'temp_c', 'temp_k', 'metall_resistance', 'semicond_resistance', '1/t', 'ln_R']"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [],
"source": [
"features = process_features(df)\n",
"targets = process_targets(df)"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 460.8x403.2 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(features, targets)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {},
"outputs": [],
"source": [
"# transform data to numpy array\n",
"X = np.vstack([np.ones(N), features.values]).T\n",
"Y = targets.values"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {},
"outputs": [],
"source": [
"# make predictions\n",
"w = np.linalg.solve(X.T.dot(X), X.T.dot(Y))\n",
"Yhat = X.dot(w)"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAFQCAYAAAB+lUNGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl4E3X+B/D3TNIkvW9KeiRBUKAsK4KioCCuRWU9cIF2EVABEXQVRREvxBVRRDkU8AAvQEGksKwXq27R5QcCK6JbUY6CSpK2CaWl9KJN0jb9/dE0tvRK07ST4/16njwlk5nOt59O+WTyzncipOh61YGIiMgNotQDICIi38UmQkREbmMTISIit7GJEBGR29hEiIjIbXKpB9CauJgIVFZZpR4GEREBCAlWoqi4rNlyr2wicTER2LjqYamHQUREjUx5YEWzRuKVTaThDGTmvFdRZbFJPBrXCACiI8NxtrQcnHjTOtbJNayTa1in9nmiRsEqBd5cen+Lrw55ZRNpUGWx+cxLWgKAYKUSlVVWHsxtYJ1cwzq5hnVqX1fXiME6ERG5jU2EiIjcxiZCRERuYxMhIiK3sYkQEZHb2ESIiMhtbCJEROQ2NhEiInIbmwgREbmNTYSIiNzml01EjNBCnjwSYoRW6qEQEfk1r752ljsUfTOg6JUGQZSjzl4D28mdsOVkSj0sIiK/5FdnImKkztlAAEAQ5VD0SoMYrpF4ZERE/sm/mki4xtlAGgiiHGKkTpoBERH5Ob9qIvYyA+rsNU2W1dlrYC/VSzMgIiI/16EmMmJoKpYtmNZsef8+yVi/4sE2t51060i8v/IhbF37GJ55+DbExUR0bKQusJcZYDu509lI6jORLNjLjR7fFxERuRisi4KAW2+4AlMzrsWJ30xNHksbcTHumTIGVdbWP4HwmuEDcc3wP2Lus+/ibGkFZk6+HnNn3YonXnivc6NvgS0nEzXmbyFGaGEvM8BeZvD4PoiIqJ5LZyLTJ6Zh2JB+yPz0mybLb067DOPHDMemf+5qc/uI8BBs+XQPTp8pRXVNLT776iD690lxe9DtsZcZUJO3mw2EiKiLuXQmsv3z/SguqcDoEYOaLN9z4Ag+3fkd/thf1+b2H3/5bZP7l19yEQx5p9vdr+C4+QLhvK/UMtbJNayTa1in9nmiRm1t61ITKS6paHF5Sdm5Dg/misF9cdvYkXjqpY3trhsdGY5gpbLD+5BSTJTnsx5/xDq5hnVyDevUvs7USKVStPpYt042vGHUYNw96To8vyoTh4+3H3afLS1HZZW1G0bWeQLqf0nFJWWok3owXox1cg3r5BrWqX2eqFFIcOtP5rutiUwZNwo3XnspnljyPo7/lu/SNnWOmy/xxTFLgXVyDevkGtapfZ2pUVvbdUsTueqyVNw8eigeeuZtmAqKu2OXRETUDbqsicyedhMAYPW6z3DbrSMRGqzEa8/f02Sd8Xe/AHsdnz8QEfmqDjWRrD3ZyNqT3Wz5oaN63P7AiibLVq/7zPnv++avcXN4RETkzfzqsidERNS9/LKJRNXWQuTLZEREXc4vm8gLJhPW5OUhsrZW6qEQEfk1v2wif+/ZExG1tcjU63GhxSL1cIiI/JZfNpHTQUG4XaPBgZAQbDYYcH1ZmdRDIiLyS3738bgNqkURC3r2xGGVCi+ZTEi1WLAyPh52gVfZISLyFL88E3ESBHwYHY1pGg3+UlqKN/LyEMGchIjIY/y7iTj8EBKCdJ0OkQ05idU3rsdFROTtAqKJAEBBUBDu0GhwMCQEm/V6XMechIio0/w2E2mJTRTxlCMnWWoyIdVqxaq4OOYkRERuCpgzESdBwOboaEzXaDC+pIQ5CRFRJwReE3H4PiQEE3Q6RDEnISJyW8A2EaA+J7m9UU4ymjkJEVGHBHQTAX7PSVb06IFlJhMeLCzkdbeIiFwU8E0EACAI+CA6GndpNJjgyEnCmZMQEbWLTaSRg475JNG1tdiq16MPcxIiojaxiZznVFAQpmg0+D4kBB8aDBhdXi71kIiIvBabSAtsooj5PXtiRXw8luXnMychImoFm0hrHDnJDI0G6SUleJ05CRFRM2wi7fjOMZ8kxjGfpDdzEiIiJzYRF5xyzCf5X3AwthgMSGNOQkQEgE3EZVZRxJNqNV6Ji8Py/Hw8UFgIgTkJEQU4NpGOEARsjInBDI0GGcxJiIjYRNzxnWM+SRxzEiIKcGwibjI75pP82JCT1KoAAGKERuKRERF1HzaRTrCKIh5Xq/Fq6mis+PUn3JWbh5DLHoKib4bUQyMi6hZsIp0kRvXCtrT5uP/Wl3BrwWks37EQ0YlXQAznGQkR+T82kU4SwzUQRDl+SB6EGQMHIO7cGWz48B70lkdKPTQioi7HJtJJ9jID6uw1AIACpRIz01ficEI/fPDtdvyJ80mIyM+xiXSSvcwA28mdzkZiEWV44qKhWBUXi1fy83E/55MQkR+TSz0Af2DLyUSt+b9QiUDVgeWoLTPi/ZgY5CiVeNlkQn+rFY+p1aiQyaQeKhGRR/FMxEPsZcYmXwHgQGgo0nU69KyuxhaDAb04n4SI/EyHmsiIoalYtmBas+X9+yRj/YoH29x29IhBeO+Vh7D9rSfw2N/GQ6kI6thIfZQpKAiTtFr8rFIh02DANcxJiMiPuNREREHAuDHDMO/ecRAgNHksbcTFWDRvCmTy1l+quUDTEzMmXYenl23C5NnLERqixMSxIzo3ch9iFUU8plbj1bg4rMzPx33MSYjIT7jURKZPTMOwIf2Q+ek3TZbfnHYZxo8Zjk3/3NXm9qOG/QF7vj0Mfd5pVFls2Lh9F24YNdjtQfskQcCGmBjcnZKCySUlWJ2fj1Bed4uIfJxLwfr2z/ejuKQCo0cMarJ8z4Ej+HTnd/hjf12b26ckxiH7yEnn/fxTxYiODENYaDAqzlW1up3guPkC4byvrTkQGop0rRar8/ORaTBgdlISTiqVXT08r+FqnQId6+Qa1ql9nqhRW9u61ESKSypaXF5Sds6lAaiUCthsNc77Vmu1Y3lQm00kOjIcwT72H2xMVES761gBzI6NxqO/6ZFpNGBR797YGxPd9YPzIq7UiVgnV7FO7etMjVQqRauPdctbfK22aigUv+9KqawP1asstja3O1tajsoq33hHk4D6X1JxSRlcTTvmxMXhTpkMi46fwNq4OLwRG4s6wb+fU7lTp0DEOrmGdWqfJ2oUEtz6k/luaSK5piIk94x13k/qGYvikgqcq7S0uV2d4+ZLOjRmQcD6mBgcUyqxwmRCP4sFj6vVOBcA80l88XcrBdbJNaxT+zpTo7a265Z5Iv/3359x9RV/QB+dGsEqBaaMuxq79v/UHbv2Cf8NDcUErRaJjvkkOs4nISIf0WVNZPa0mzB72k0AgF/0Zqzd+AWenJ2OjaseRnlFFdZnftVVu/ZJJoUCk7VaHHXMJxnF+SRE5AM69HJW1p5sZO3Jbrb80FE9bn9gRZNlq9d91uT+V3sP4au9h9wYYuCwiCLmqdWYWlyMVfn5WBMgOQkR+S5eO8vbCALWx8YiR6XCivx89A+gnISIfA+vneWl9oeGYoJOh6SGnMTW9jvZiIikwCbixfIVCkzSanFMqUSmXo9RFS3P1yEikgqbiJeziCIeSUzEG7GxWJWXh3uLinjdLSLyGsxEfIEgYJ0jJ1men49UiwWPqdWoZE5CRBLjmYgP2efISZKZkxCRl2AT8TENOclxpRJb9HpczZyEiCTEJuKDqkQRcxMTsTY2Fqvz8nAPcxIikggzEV8lCHg3NhbHGuUkjzMnIaJuxjMRH7fP8TnuGkdOomVOQkTdiE3ED+QpFLhNq8UJx3ySkcxJiKibsIn4ODFCC3nySFijeuHhxES8GRuLV/PyMKuoCGBOQkRdjJmID1P0zYCiVxoEUY46ew1sJ3finZxMHG2UkzzBnISIuhDPRHyUGKlzNhAAEEQ5FL3SIIZrsC80FBk6HbTMSYioi7GJ+CgxXONsIA0EUQ4xUgcAyD0vJxnBnISIugCbiI+ylxlQZ69psqzOXgN7qd55v0oU8XBiIt6KjcVreXmYyZyEiDyMTcRH2csMsJ3c6Wwk9ZlIFuzlxqYrCgLejo3FvcnJmF5cjFdMJoTY7RKMmIj8EYN1H2bLyUSN+VuIEVrYywywlxlaXXdvWBjSdTq8mp+PD/V63J+cDKNC0Y2jJSJ/xDMRH2cvM6Amb3ebDaRBQ07yqyMnuYo5CRF1EptIgKkURTyUmIi3Y2Pxel4e7j5zhjkJEbmNL2cFIkdOckypxDKTCakWC+ar1agU+ZyCiDqG/2sEsG/CwpCh06G31YrNBgNSOJ+EiDqITSTAGRUKTNTp8JtCga3MSYiog9hEyJmTvOPISWYwJyEiFzEToXqCgLccOclSR07yFHMSImoH/4egJvY4cpI+Vis+YE5CRO1gE6FmjAoFJmq10CsUyNTrcSVzEiJqBZsItahSJsOcxESsi4nBG3l5uIs5CRG1gJkItU4Q8GZcHI6pVFhqMmGAYz6JNaqXS5daISL/xzMRatduR05yodWKD0+V4MIB0xD8x6kIGT4fir4ZUg+PiCTEJkIuMSgUuO2PI5HXox82fHA3Ltd/2+SDsIgoMLGJkMssURfgiZsX44NLb8PLHz2C27/bCEGQOT8Ii4gCDzMRcpm9zAB7nR3rLp+K4/EX4tnPF6JvwTE8GQbUtL85EfmhDp2JjBiaimULpjnvJybEYNmCafjo7SfxxuJ70bd3UqvbThk3CptWz8XWNY9hwYN/RWR4iPujJkk0/iCsvRdciTsnrkVv0yFsPLwXSZxPQhSQXGoioiBg3JhhmHfvOAgQnMufnJ2OA9knMH7WEmz/Yj/mz86AKAjNtr/y0v646rJU/G3+GkyavRzVNTWYcdt1nvspqNvYcjJRue95VB1aj5yj7yFDHY3coCBs0+sx/Nw5qYdHRN3MpSYyfWIahg3ph8xPv3EuS0mMgzohBtt27ENtrR1Zu7NRZbFi8MDezbZPUsdCEOqbkYD66QZWW7XHfgjqXo0/CKtSJsODSUnYEBODNbm5mMb5JEQBxaVMZPvn+1FcUoHRIwY5l6UkxsFcUAx7o8/rzj9VDE1SPA4e+qXJ9rv2/YQx1wzB5tceQa3djjzzGcxd+E67+xUcN18gnPc1oAgC1sbF4ahjPkmq1Yqne/aEpYXrbgV0nTqAdXIN69Q+T9SorW1daiLFJc0ve6FSKmCzNY1TrbZqKBVBzXcil+HQkZN4fPEGVFRa8NCMW/DgXTfj+dVb29xvdGQ4gpVKV4boNWKiIqQegmQOR0VgVmw0Fh8/gS15eZh/0YUwq1r+/QVynTqCdXIN69S+ztRIpVK0+pjb786yWquhUDTdXKkIQpWlecB6z+1j8PXeQygoKgEArN30Jd5f+RBC3v4ElVXWVvdxtrS8zce9iYD6X1JxSRkC+cWcMwDSk1PwgtmMNw/9hLlJSdgfGup8nHVyDevkGtapfZ6oUUhw60/m3W4iuaYiqHtEQxQE2B2vgSepY7Hj64PN1o2PiYBc/vtLG7W1tai121Hb6KWwltQ5br7EF8fsaRUyGR5ISsI9Z85gTW4uVsTHY31MDNDoTResk2tYJ9ewTu3rTI3a2s7tyYZGUyEKCkswcexIyGUyjB4xCGEhKhw6qm+27nc/nkDGTVchLiYCSkUQpv91NL7LPgGrleG6v6oTBLwRF4cHkpPxtzNnsNRshqqdJw1E5Hs6Ndlw0cotmDPjFoy/cTjMBcVY+PJmVFfX5ySL5k3GzzlGbPlkD97fvgtyuQwrF94NmUzE/37+DSve/NgjPwB5t11hYcjQavFqfj42GQx4ICkJvvECJRG5okNNJGtPNrL2ZDvvm0+fxWOLN7S47oKlm5z/rq6uwZubvsSbm750c5jky/RKJf6q1WKJ2YytBgMWKoPwb76fhsgv8NpZ1C3OOXKSjdHRWHbsOO4sLuZ8EiI/wGtnUbdpyEnyYqPx1IlfkWqxtDqfhIh8A/96qdvti47GX7VapFos2GQwIJHX3SLyWWwiJImGnMQcFIRtBgMu53W3iHwSmwhJ5pxMhtmOnOSt3FzmJEQ+iJkISapOEPB6XByOKpV4yWxGqsWCvzMnIfIZ/Eslr/Cf8HBkaLX4Q0NOUs2JqES+gE2EvMZJR05yyvH5JMxJiLwfmwh5lQqZDPcnJWFTVBTeys3FHcxJiLwaMxHyOnWCgNfi43FUpcKLZjMGOOaTWJmTEHkd/lWS1/o6PBx/1Wox0GLBB8xJiLwSmwh5td+USmRotSiQy7FVr8dQ5iREXoVNhLxehUyG+5KTsdmRk9zOnITIazATIZ9QJwh4vfelOJ5Uh8U/f4UBjvkkzEmIpMW/QPIJir4ZCBk+H/vTnsHUKetwcW0QNhkMUDMnIZIUmwh5PTFSB0WvNAhi/YmzIa4Ppt7xPgpV4diq1+My5iREkmETIa8nhmucDaRBZXAUHrj0L9gSFYW3c3MxhTkJkSSYiZDXs5cZUGevadJI6uw1qC0zYLVjPskSx3ySZ5iTEHUr/rWR17OXGWA7uRN19hoA9Q3EdjIL9nIjAGCnYz7JoKoqbDQa0ZM5CVG34ZkI+QRbTiZqzN9CjNDCXmaAvczQ5PFflUpk6HRYajJhm16Ph5KS8F1IiESjJQocPBMhn2EvM6Amb3ezBtKgXCbDvcnJyIyKwttGIyYzJyHqcjwTIb9SJwhY5chJXmiUk9iYkxB1Cf5lkV/KCg/HRK0Wg5mTEHUpNhHyW78olUjX6VAsk2GrXo9LKyulHhKR32ETIb9WLpPhb8nJ2BYVhXeMRkw6e5Y5CZEHMRMhv2cXBKyMj8cRlQovmEwYYLFgYUICcxIiD+BfEQWMrPBwTNTpMKSyEu8bjUhgTkLUaWwiFFB+ccwnKZHJsE2vxxDmJESdwiZCAafMMZ9kW1QU3jUacRtzEiK3MROhgNSQkxxVKrHYMZ/kWeYkRB3GvxgKaP+OiMBtOh0urazEe8xJiDqMTYQC3glHTlLqmE8ymDkJkcs69HLWiKGpGHv95Xhk0ToAQGJCDB6eORZ9tGqYT5/FK+98gpxf81vcduTlA3Bn+p8QHRmGX/RmrHjzY5wqPNv5n4DIAxpykgeKirDOaMSShARsjooCBEHqoRF5NZfORERBwLgxwzDv3nEQ8Psf1ZOz03Eg+wTGz1qC7V/sx/zZGRBb+KO76IJEzJ52E5a+8U9MmLkEOb/mY86MWzz3UxB5gF0Q8Ep8POYlJmLu6dNYdOoUlGEpkCePhBihlXp4RF7JpSYyfWIahg3ph8xPv3EuS0mMgzohBtt27ENtrR1Zu7NRZbFi8MDezba/YdQQfJJ1AMd+zYO9rg4bt+/Cmvc/99xPQeRBDTnJ5dUi3s/Lh6bXjQgZPh+KvhlSD43I67jURLZ/vh/znluHgsIS57KUxDiYC4pht9udy/JPFUOTFN9s+z66nrBV12DpU9Pw4evz8Ph941FWUdXufgUfu/nimFmnlm+/9bgQUye9iQpFKN7bNBUX5/0PipQrIQtPYZ287MY6dU+NWuNSJlJcUtFsmUqpgM1W02SZ1VYNpSKo2bphocH485+G4Jnlm5F/6gzuuX0MHr13HB5/YUOb+42ODEewUunKEL1GTFSE1EPwCd5fpxLYfl6Kx9XA3TUqvP6POVil0+LjHvFAN47d++vkHVin9nWmRiqVotXH3J4nYrVWQ6FourlSEYQqi63ZutXVNdi55zBO5hYAAN7b9jU+fH0eglWKFtdvcLa0HJVVVneH2K0E1P+SikvKwGlrrfOVOokRGgQPnQtBlGPV5cDhE/+Hp7NehK68GotiQlHdxfNJfKVOUmOd2ueJGoUEt/5k3u2/hFxTEdQ9opsE6UnqWOSai5qtm3fqDMJCVb/vVBRht9dBaOedL3U+dvPFMbNOLd9qy4yw5e5FnRgEyIOxs28abr/qTgwtPY33jEbEV1ezTl5yY526p0atcbuJGE2FKCgswcSxIyGXyTB6xCCEhahw6Ki+2bo79/yI66++BBddkIgguQx3pv8J3//0i8+cZVBgsuVkonLf86g6tB6V+57H4VO7kaHTodxx3a1LOJ+EqHOXPVm0cgvmzLgF428cDnNBMRa+vBnV1fU5yaJ5k/FzjhFbPtmD/d8fw5qNX+DRe8chJiocP+cYsOLNjz3yAxB1JXuZoclnupfKZJiVnIw5hYVYn5uL53v0QGZ0tIQjJJJWh5pI1p5sZO3Jdt43nz6Lxxa3HI4vWLqp6ba7s5G1O7vFdYl8iV0QsKJHDxxVqfCc47pbzyUkdHlOQuSNeNQTuenziAjcptVimOO6W/G87hYFIDYRok44rlIhQ6fDOVHEP/R6DGJOQgGGTYSok0pkMsxKScEnkZHYkJuL9JKS9jci8hP8PBEiD6gVBCzr0QNHGuUkz/fowZyE/B6PcCIP+pcjJ7ny3DlsyM1FfE1N+xsR+TA2ESIPy1GpkK7ToUoQsE2vx6Cq9q8TR+Sr2ESIukCJTIaZKSn4NCICG4xG5iTkt5iJEHWR83OSVIsFixMSUM0PuiI/wjMRoi72r4gITNJqcdW5c1hvNDInIb/CJkLUDY6pVEjXamF15CQXMychP8EmQtRNSuRy3J2Sgs8iIvCe0YgJzEnIDzATIepGtYKApT164IhSiUWnTmEAcxLycTwTIZLAjshITNZqMaKiAuuMRsQxJyEfxSZCJJGjKhUm6HSwOXKSPzInIR/EJkIkoYac5F/h4XjfaMR45iTkY5iJEEmsVhDwUkICjqhUzpxkSUKC1MMicgnPRIi8xGeRkZik1WJkRQXeNRoRY7NJPSSidrGJEHmRhpykWhDw1s+HmZOQ12MTIfIyDTnJf2Ji8J7RiHHMSciLMRMh8kK1goBXdVr8IIhY2Cgn4XwS8jY8EyHyYp865pOMcuQksZxPQl6GTYTIyx1x5CS1jvkkA5mTkBdhEyHyAWflctyVkoIvHfNJ/sKchLwEMxEiH1ErCFjimE/SOCepYU5CEuKZCJGP+cSRk1zjuO4WcxKSEpsIkQ86Pyf5A3MSkgibCJGPOiuXY0ZKCv4dHo6NRiNuZU5CEmAmQuTDagQBL5yXk7zInIS6Ec9EiLyQGKFp8rU9Hzuuu/WnhutuMSehbsImQuRlFH0zEDx0LgAgeOhcKPpmuLTdEZUK6Tod6gBs0+sxgDkJdQM2ESIvIkbqoOiVBkGsf6VZEOVQ9EqDGO7aGUmxXI67NBrsDA/HJqMRY0tLu3K4RMxEiLyJGK6pbyD2aucyQZRDjNTBXm506XvUCAIWJyTgcKOc5KUePZiTUJfgmQiRF7GXGVBnb5pn1NlrYC/Vd/h7fRwZickaDdLKy/EOcxLqIh1qIiOGpmLZgmnO+4kJMVi2YBo+evtJvLH4XvTtndTu97hjwjVYvmB6x0dKFADsZQbYTu50NpI6ew1sJ7NcPgs53+HgYKTrdBAAbGVOQl3ApSYiCgLGjRmGefeOg4DfT4mfnJ2OA9knMH7WEmz/Yj/mz86A2MYp84W9EjHhxis7P2oiP2bLyUTVgeUAgKoDy2HL2dqp73dGLsd0jQZfMSehLuBSE5k+MQ3DhvRD5qffOJelJMZBnRCDbTv2obbWjqzd2aiyWDF4YO8Wv0eQXIY5M27B519/75mRE/kxe5mxydfOashJnklIwMJTp/BEQQHkdXUe+d4U2FwK1rd/vh/FJRUYPWKQc1lKYhzMBcWw2+3OZfmniqFJisfBQ780+x53TPgTvv1fDswFZ9FHp3ZpcILj5guE875Sy1gn13RVnT6OisKvSiVW5eejn8WCh5OSUCz33ffX8Hhqnydq1Na2Lh09xSUVzZaplArYbE2DOqutGkpFULN1+/dJxiV/uABz/v42rhk+0JVdAgCiI8MRrFS6vL43iImKkHoIPoF1ck1X1MkcFYGZsTF49sQv+IfRiCcvuhDHw0I9vp/uxOOpfZ2pkUqlaPUxt5+CWK3VUCiabq5UBKHKYmuyTBEkx5wZt2Dpmn+ipra2Q/s4W1qOyiqru0PsVgLqf0nFJWXgiwStY51c09V1OgPgjsREPFZQgNcPH8Hfe/bEJ5GRXbCnrsXjqX2eqFFIcOtP5t1uIrmmIqh7REMUBNgdr60mqWOx4+uDTda78IJEJMRHY8kTd9bvUC5DkFyGbWsfx4RZS9rcR53j5kt8ccxSYJ1c05V1qhYEPNez5+/zSexBWDHgOtgqcmEvM3TRXrsGj6f2daZGbW3ndhMxmgpRUFiCiWNHIvPTb3DN8IEIC1Hh0FF9k/UO5xhx613PO++PHjEIN4wajLmL3nV310TkQf+MioLhohux4odP0P/4D3jiz8/gdMFB2HIypR4a+YBOTTZctHILLk7VYcuaRzH2+sux8OXNqK6uz0kWzZuMv94ywiODJKKuI0bqcHzwnbhz8jrI6mrx3ua7MTA0xeVLrVBg69CZSNaebGTtyXbeN58+i8cWb2hx3QVLN7n0PYhIWg2XWikOjcF9E1Zhzq5VeHvLfVjY70p8JPXgyOv57nv7iMgjGi61Iohy1MiCsOzauTjWow8W7nwJ/aKisLRHD9TyulvUCl47iyjAtXSplX+EKDBFo8H15eV4OzcX0bzuFrWCZyJEBFtOJmrM30KM0MJeZoC9zICfHNfdejk/H9v0esxOTsYRlUrqoZKX4ZkIEQGoPyOpydvd5O29RY7rbv1fWBg2GQy4idfdovPwTISI2lQtCHjWMZ/kecfnkyxjTkIOPBMhIpf8IyoKt2s0GFNejrdycxHFnITAJkJEHXAoOBgTdDoo6uqwTa9Hf4tF6iGRxNhEiKhDiuRyTNNosNuRk9zInCSgMRMhog5ryEmOqFRY7MhJljMnCUg8EyEit22LisIdGg1uZE4SsNhEiKhTfnTkJEpHTtKPOUlAYRMhok4rlMsxVaPBnrAwfGAw4M9lZVIPiboJMxEi8ohqQcBCR07ygtmMARYLVsTHMyfxczwTISKP2hoVhTs1GtxUVlafk3TwE03Jt7CJEJHHZTtyElVdHbbq9ejLnMRvsYkQUZcolMtxZ0oK9oaGYjNzEr/FTISIuky1KOIZx3W3XjCALQmqAAAR1klEQVSbkWqx4GXmJH6FZyJE1OW2RkXhzpQU3FJaijeZk/gVNhEi6hbZISEYr9MhxG5HJnMSv8EmQkTdpjAoCHdoNNgfEoLNBgPGMCfxecxEiKhbVYsi/q5W47BKhSUmk3M+iZ05iU/imQgRSSIzOhpTNRrcUl6BtworEB2ilnpI5AY2ESKSzOFLpuKOOz9EuDIKW385hgE9r5Z6SNRBbCJEJAkxUgdFrzScieiJe9Jfw3eaS/H+Nxswploh9dCoA5iJEJEkxHANBLH+v6BquQKLRz+OYwn98OLXy5EaHYWXmZP4BJ6JEJEk7GUG1Nkbff6IIOAfA2/GtL5DMLa0FGvz8hDJ+SRej02EiCRhLzPAdnKns5HU2WtgO5mF71GOCTodwmtrkanX40LOJ/FqfDmLiCRjy8lEjflbiBFa2MsMsJcZAACng4Jwu0aDpwsK8KHBgPlqNb6IiJB4tNQSNhEiklTj5tFYtShigeO6Wy+aTEi1WPAKcxKvw5eziMh7CQI+jI7GNI0Gt5aWYg1zEq/DJkJEXu+HkBCk63SIYE7iddhEiMgnFDiuu/Wd47pb1/O6W16hQ5nIiKGpGHv95Xhk0ToAQGJCDB6eORZ9tGqYT5/FK+98gpxf85ttJ5OJmDnpeoy4fABkMhEHfzyB19/7HOcq+WyCiFxnE0U85chJXnJcd2tjZLjUwwpoLp2JiIKAcWOGYd694yDg91DrydnpOJB9AuNnLcH2L/Zj/uwMiC2EXuk3Xoneup645/HXMfWhV6BSKTBz0nWe+ymIKHAIAjZHR2O6RoO/lJbixWPHEcGcRDIuNZHpE9MwbEg/ZH76jXNZSmIc1Akx2LZjH2pr7cjanY0qixWDB/Zutr1KpcDmj3ajrKISVRYbvtz1P/S/MMVzPwURBZzvG3KSmpr6nMRqlXpIAcmlJrL98/2Y99w6FBSWOJelJMbBXFAMu93uXJZ/qhiapPhm26/P/Arf//Sr8/7ll1wEfd7pzoybiAgFQUGYPaA/DoaEYLNej+uYk3Q7lzKR4pKKZstUSgVstpomy6y2aigVQW1+rxuvvRQjLx+AOc+83e5+BcfNFwjnfaWWsU6uYZ1cI6A+J2mYT7LMZMI6qxWr4uI4n8TBE8dSW9u6PdnQaq2GQtF0c6UiCFUWW6vbTBk3CjddexmefPF95J860+4+oiPDEaxUujtEScREcVatK1gn17BOromJjsS/oyNREBuNZ0/8goG1NXi2T29UyDmfukFnjiWVqvUrK7td4VxTEdQ9oiEKAux1dQCAJHUsdnx9sNm6giBgzoxbMOAiDR569h2YC4pd2sfZ0nJUVvnG65wC6n9JxSVlqJN6MF6MdXIN6+Sa8+v0NYAjGi1eyc/H2h9/wv3JyfjFx56IeponjqWQ4NZr6PY8EaOpEAWFJZg4diTkMhlGjxiEsBAVDh3VN1t33JhhGNhPi7kdaCAAUOdjN18cM+vkvTfWyb06mR3X3WrISdLKypptI0RoIUseCSFCK/n4paiRu9+jJZ0611u0cgvmzLgF428cDnNBMRa+vBnV1fU5yaJ5k/FzjhFbPtmDiWNHQKVUYP3Lc5zbnjlbhhnzXu3M7omIWmQTRcxvlJO8a7VitSMnUfTNgKJXGgRR7rhy8E7YcjKlHrLP6lATydqTjaw92c775tNn8djiDS2uu2DpJue/02e96ObwiIjcJAj4IDoax5VKvJKfj1SLBY/2uwK1jgYCAIIoh6JXGmpM/4W93CjxgH0TL3tCRH7tYEgIJuh0iK6txZYj36F3cdNmIYhyiJE6aQbnB9hEiMjvnXLkJP8LDcM7m+/GqBO7nI/V2WtgL9VLNjZfxyZCRAHBKop4IjYcq/tdjed3PI179q4Fam2wncziS1mdwDdRE1HgEARsqNbj6EWXYMUPW9D72A7M6xENm0wm9ch8Fs9EiCjgHEA50jVJiLVWIFOvR29ed8ttbCJEFJDMQUGYotEgOzgYWwwGpJWXSz0kn8QmQkQByyqKeEKtxitxcVien4/ZhYUQ6tqaWkfnYxMhosAmCNgYE4MZKSmYWFKC1/PyEM7PJ3EZmwgREYDvQkMxQadDvOPzSS5gTuISNhEiIgdzUBAma7X40ZGTXMucpF1sIkREjVhFEY+r1VgVF4eX8/NxP3OSNrGJEBGdTxDwviMnua2kBK/m5yOMOUmL2ESIiFpxIDQU6TodEqqrscVgQC/mJM2wiRARtcHkyEl+VqmQaTDgGuYkTbCJEBG1wyqKeEytxuq4OKzMz8d9zEmc2ESIiFwhCHjPkZNMKinBauYkANhEiIg6pCEnUTMnAcAmQkTUYcxJfscmQkTkBosjJ3nVkZP8ragoIHMSfp4IEZG7BAEbYmJwTKnEyyYT+lsseFytxrkA+nwSnokQEXXSt6GhmKDVItGRk+hayUnECC3kySMhRmi7eYRdh2ciREQeYFIoMFmrxbOnTiHTYMCjajV2hYc7H1f0zYCiVxoEUY46ew1sJ3fClpMp4Yg9g2ciREQeYhFFPKpW47W4OKxqlJOIkTpnAwEAQZRD0SsNYrhG4hF3HpsIEZEnOXKSmSkpmHL2LFbl5yM8uKezgThXE+UQI3XSjNGD2ESIiLrAfxvlJJv+uxUpZ042ebzOXgN7qV6awXkQmwgRURdpyEmOKmRYv2k6rvxlNwA4MpEs2MuNEo+w8xisExF1IYsoYp5ajanFxXjp0yewttcQrImNQa0fNBCATYSIqOsJAtbHxiJHpcIK/Q/odzoEj6nVqPSD+SR8OYuIqJvsd3yOe1LDfBKbTeohdRqbCBFRN8p35CQ5SiW26PW4uqJC6iF1CpsIEVE3qxJFPJKYiDWxsVidl4d7fPi6W8xEiIikIAhY58hJlufno7/Fgid8MCfhmQgRkYT2OT6fROPISbQ+lpN0qImMGJqKZQumOe8nJsRg2YJp+OjtJ/HG4nvRt3dSq9tm3HwVNr/2CLatfRz33j4GgiC4P2oiIj+Sp1BgklaL40olMvV6jPShnMSlJiIKAsaNGYZ5946DgN//839ydjoOZJ/A+FlLsP2L/Zg/OwNiC83hisF9ccOowXjg6bcwY95q9L8wBddffYnnfgoiIh9XJYqYm5iItbGxeDUvDzOLigAfyElcaiLTJ6Zh2JB+yPz0G+eylMQ4qBNisG3HPtTW2pG1OxtVFisGD+zdbPtrhg/E5//5HoVnSlFSdg5bP/sGN4wa7LmfgojIHwgC3o2NxT0pKZhWXIyV+fkI8fLPcXepiWz/fD/mPbcOBYUlzmUpiXEwFxTDbrc7l+WfKoYmKb7Z9inqOOSaipqsl9LCeucTfOzmi2Nmnbz3xjoFbp32h4YiQ6eDtlFOInWNWuPSu7OKS5q/PqdSKmCz1TRZZrVVQ6kIar6uqum6Vls1VC2sd77oyHAEK5WuDNFrxERFSD0En8A6uYZ1co0/1qkKwP2x0Xj815PYajBgYZ/e+DY6yu3v15kaqVSKVh9z+y2+Vms1FIqmmysVQaiyNH9nwfnrtrbe+c6WlqOyquVPCPM2Aup/ScUlZfD+VzGlwzq5hnVyTSDUaXZ8PKbLZHgh5zhei4vDm7GxQAfemOSJGoUEt/5k3u0mkmsqgrpHNERBgN0R/iSpY7Hj64PN1zUXIVkd67yfpI5Frrmo2Xrnq3PcfIkvjlkKrJNrWCfX+HWdBAHvxMbimFKJ5SYT+luteFKtRqXYsRkanalRW9u5PU/EaCpEQWEJJo4dCblMhtEjBiEsRIVDR/XN1t21/yfcdO1lUPeIRmREKNJvvBK79v3k7q6JiALO3rAwpOt06GWzYbPBAI2XzCfp1GTDRSu34OJUHbaseRRjr78cC1/ejOrq+uxj0bzJ+OstIwAA+w4ew2dfHcRL86firRfvw885BnySdaDzoyciCiC5CgVu02rxq0KBTL0eV7kwn0SM0DT56mkdejkra082svZkO++bT5/FY4s3tLjugqWbmtzftmMvtu3Y68YQiYioQaUo4uHERMwoLsbreXlYHR+Pt2JiWsxJFH0zoEi5Eji4AMFD58KWuxe2nEyPjoeXPSEi8jWCgLdjY/G35GTcdeYMXjaZENJougUAiJE6KHqlOT/bXRDlUPRKgxju2TMSNhEiIh/1TVgYMnQ6XODISVIa5SRiuMbZQBoIohxipM6jY2ATISLyYUZHTvKbQoGtjXISe5kBdfamc/nq7DWwl+o9un82ESIiH1cpingoMRHvxMbi9bw8zDhzBvZSPWwndzobSZ29BraTWbB7+LPd+XkiRET+QBDwlmM+yVKTCakWC56q+xBV5v9CJQJVB5ajtsyzDQTgmQgRkV/Z48hJ+lit+MBgQFLRLwAAexc0EIBNhIjI7xgVCkzUaqF3zCcZWlLS/kZuYhMhIvJDlTIZ5iQmYl1MDOae1ENx3luAPYWZCBGRvxIEvBkXh3/10sJWfq5LdsEzESIiP1clk3XZ92YTISIit7GJEBGR29hEiIjIbWwiRETkNjYRIiJyG5sIERG5jU2EiIjcxiZCRERuYxMhIiK3sYkQEZHbvPraWcEqhdRDcJkAQKVSICRYiTqpB+PFWCfXsE6uYZ3a54katfV/sVc2kZBgJQDgzaX3SzwSIiJqEBKsRGWVtckyIUXXyysbeFxMRLPBEhGRNEKClSgqLmu23CvPRAC0OFgiIpJGa0/qGawTEZHb2ESIiMhtbCJEROQ2r81EvN01wwdiyrhRiIkKR66pEGve/wJHTuSib+8kzJ52E5J7xuI3YwGWrf0nTAXFUg9XMq3Vafyfh2NqxrWoqal1rnvXI6tRXFIu4WilpUmMx6vPzcKsJ16HuaCYx1Irzq8Tj6WmWqtHfGxElxxPbCJuSFbH4v5pN+Gx59fjF70ZY64ZgqcezMCdD63E03Mm4q0P/o1vDhxBxs1XYe6sWzH32XelHrIkWqvTpPuXo7e2J97a9CU+yTog9TC9giiKeHjmWCgU9X+SQUFyHkstOL9OAHgsnaelegQFybF60cwuOZ74cpYb8sxnMPn+5fhFb0aQXIawUBXKyqtwcX8dzlVasGv/T6iprcWHH++GLrkHUhLjpB6yJFqrEwBcoOmJ34wFEo/Qe0y85SocPm503uex1LLz6wTwWDpfS/XoyuOJTcRNFqsNvbU98dG783H7+Gvw5qYvkZIYh1xzkXMde10dThWWQJMYL+FIpdVSnYKC5EhWxyL9pivx4Wvz8Prz92DooAulHqpkemkSMPLyP2DD1q+dy3gsNddSnXgsNdVaPbryeGIT6QR93mncMu05rF73GeY/mIFglRI2W02TdazWaiiVQRKN0DucX6eoiFAcOZGLT/79LaY8sALrt36NJ+5PD8hn2XKZDHNn3opV734KW/Xvx45KqeCx1EhrdeKx1FRr9QhWdd3xxCbSCbW1dtTW2pG1Oxuni0pgq65p8lotACiVQaiy2CQaoXc4v079+iTj0efX4/uffkVNbS0OZB/Hj0dO4rKLA+8Z5OS/XI1DR/U4ciK3yXKrrZrHUiOt1anwTCmPpUZaq4fF2nXHE4N1NwwddCFuSrsMTy/7wLksSC5DnrkIo0dc7FwmCgJ69ohGrqmopW/j91qrU0xUGCbceCW27dj7+/IgeZNnmIHiqqGpiIkKw3UjL3Eue/W5WVj97mdI7hnrXBbox1Jrddr+r32w2mp4LDn00iRgyMA+Ldajq44nnom44cRJM1Iv1OCqy1IhiiJuHj0UMpkMP/z0K8LDQjB6xCDIZTJMHDsSplNnkGcOzD/8tuo05S9X44rBfSEIAkYMTUW/PsnYd/Co1EPudnc/+irGz1yCCbPqbwBw/1Nrse/gUR5LjbRWp53f/MhjqZHKKmur9eiq48lrL8Do7f7YX4d7ptyAhPgoHD9pwmvrdyDPfAZ9dGo8MP0mJKvj8JvxFJav/Qjm02elHq5kWqvTFYP7YlrGtUiIi0J+QTHWbvwCh47qpR6u5L7Y+AymzV0Fc0Exj6U2NK4Tj6WmWqtHVx1PbCJEROQ2vpxFRERuYxMhIiK3sYkQEZHb2ESIiMhtbCJEROQ2NhEiInIbmwgREbmNTYSIiNzGJkJERG77f57RAvjAo1GJAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 460.8x403.2 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# plot original data with predictions\n",
"plt.scatter(X[:,1], Y)\n",
"plt.plot(X[:,1], Yhat, color='red')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [],
"source": [
"# calculate r2\n",
"d1 = Y - Yhat\n",
"d2 = Y - Y.mean()\n",
"ssr = d1.dot(d1)\n",
"sst = d2.dot(d2)\n",
"r2 = 1 - ssr / sst"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"r2 is equal 0.9932580427504316\n"
]
}
],
"source": [
"print('r2 is equal', r2)"
]
},
{
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment