{"id":380,"date":"2015-12-03T16:13:56","date_gmt":"2015-12-03T16:13:56","guid":{"rendered":"http:\/\/drsfenner.org\/blog\/?p=380"},"modified":"2025-02-12T00:42:09","modified_gmt":"2025-02-12T00:42:09","slug":"linear-regression-basic-solution-3","status":"publish","type":"post","link":"http:\/\/drsfenner.org\/blog\/2015\/12\/linear-regression-basic-solution-3\/","title":{"rendered":"Linear Regression Basic Solution"},"content":{"rendered":"<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Before we diverged into an investigation of representation\/storage of Python variables <span class=\"math inline\">\\(\\mathtt{X}\\)<\/span> and <span class=\"math inline\">\\(\\mathtt{Y}\\)<\/span> (math variables <span class=\"math inline\">\\(\\bf{X}\\)<\/span> and <span class=\"math inline\">\\(\\bf{Y}\\)<\/span>), we had the following equation:<\/p>\n<p><span class=\"math display\">\\[\\min RSS(\\beta)=(\\bf{y}-\\bf{X}\\beta)^T(\\bf{y}-\\bf{X}\\beta)\\]<\/span><\/p>\n<p>The question is, how do we solve it? Well, if you recall your calculus, you should remember (or I&#8217;ll remind you) that we can optimize (find the minima and maxima) of function by taking derivatives. Let&#8217;s back up to the summation version:<\/p>\n<p><span class=\"math display\">\\[RSS(\\beta)=\\sum_{i=1}^N (y_i-(\\beta_0+\\sum_{j=1}^px_{i}\\beta_j))^2\\]<\/span><\/p>\n<p><!--more--><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>When I&#8217;m wearing my computer scientist hat, I love to name things &#8212; and that means creating a variable. In this case, the weighted-sum of <span class=\"math inline\">\\(x\\)<\/span> and <span class=\"math inline\">\\(\\beta\\)<\/span> is <span class=\"math inline\">\\(f(x_i)\\)<\/span> (our predicted value for the input values making up <span class=\"math inline\">\\(x_i\\)<\/span>). And, <span class=\"math inline\">\\(y_i\\)<\/span> &#8211; <span class=\"math inline\">\\(f(x_i) = e_i\\)<\/span> is the <em>error<\/em> in our prediction for <span class=\"math inline\">\\(x_i\\)<\/span>. So, we can write: <span class=\"math display\">\\[RSS(\\beta) = \\sum_{i=1}^N (y_i &#8211; f(x_i))^2 = \\sum_{i=1}^N e_{i}^2\\]<\/span> We can also express the errors over the whole data set as <span class=\"math inline\">\\(E=Y-X\\beta\\)<\/span> and <span class=\"math inline\">\\(RSS(\\beta) = E^TE = dot(E,E)\\)<\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>The derivative of a sum is the sum of the derivatives. So, from the expanded form of <span class=\"math inline\">\\(RSS\\)<\/span>:<\/p>\n<p><span class=\"math display\">\\[RSS(\\beta)=\\sum_{i=1}^N (y_i-(\\beta_0+\\sum_{j=1}^px_{i}\\beta_j))^2\\]<\/span><\/p>\n<p>We can compute each of the derivatives with respect to the <span class=\"math inline\">\\(\\beta\\)<\/span>s:<\/p>\n<p><span class=\"math display\">\\[\\frac{\\partial RSS(\\beta)}{\\partial \\beta_j} = -2\\sum_{i=1}^Ne_ix_{ij}\\]<\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>This is a rather nice looking expression. It isn&#8217;t too complicated (<span class=\"math inline\">\\(e_i\\)<\/span> and <span class=\"math inline\">\\(x_ij\\)<\/span> are scalars). We&#8217;d like to do two things with it: (1) turn the sum-of-products (i.e., another dot product) into an actual dot product and (2) we&#8217;d like to account for all of the <span class=\"math inline\">\\(\\beta_j\\)<\/span> for <span class=\"math inline\">\\(j=0,\\dots,p\\)<\/span>. Since we want to set the derivative w.r.t. all of the <span class=\"math inline\">\\(beta_j\\)<\/span> equal to zero, we have a system of equations: <span class=\"math display\">\\[\\begin{eqnarray}<br \/>\n\\frac{\\partial RSS(\\beta)}{\\partial \\beta_0} &amp;=&amp; -2\\sum_{i=1}^Ne_ix_{i,0} &amp;= 0 \\\\<br \/>\n&amp; &amp;\\vdots&amp; \\\\<br \/>\n\\frac{\\partial RSS(\\beta)}{\\partial \\beta_j} &amp;=&amp; -2\\sum_{i=1}^Ne_ix_{i,j} &amp;= 0 \\\\<br \/>\n&amp; &amp;\\vdots&amp; \\\\<br \/>\n\\frac{\\partial RSS(\\beta)}{\\partial \\beta_p} &amp;=&amp; -2\\sum_{i=1}^Ne_ix_{i,p} &amp;= 0<br \/>\n\\end{eqnarray}\\]<\/span> Recall that <span class=\"math inline\">\\(x_{i,0} = 1\\)<\/span> for all <span class=\"math inline\">\\(i\\)<\/span>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Conceptually, we&#8217;re taking a column of the data-matrix <span class=\"math inline\">\\(X\\)<\/span> computing the dot-product with the error values. That is, the error of example one times the value of first examples&#8217;s feature (and then adding those up over all examples). We need the &#8220;row-column&#8221; rule of matrix multiplication to pull together a data-matrix column and the errors. A little thought leads to: <span class=\"math display\">\\[\\frac{\\partial RSS(\\beta)}{\\partial \\beta} = -2 X^TE\\]<\/span> The rules for matrix multiplication take row of <span class=\"math inline\">\\(X^T\\)<\/span> (a column of <span class=\"math inline\">\\(X\\)<\/span>) times the column-vector <span class=\"math inline\">\\(E\\)<\/span>. Just what we needed to concisely represent the dot-products and the system of equations.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>We can now do some relatively straight forward manipulations to get an explicit, closed-form, solution for <span class=\"math inline\">\\(\\beta\\)<\/span>: <span class=\"math display\">\\[\\begin{eqnarray}<br \/>\n\\frac{\\partial RSS(\\beta)}{\\partial \\beta} = -2 X^TE = -2 X^T(Y-X\\beta) &amp;=&amp; 0 \\\\<br \/>\nX^TX\\beta &amp;=&amp; X^TY \\\\<br \/>\n\\beta&amp;=&amp;(X^TX)^{-1}X^TY<br \/>\n\\end{eqnarray}\\]<\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>One note, the product of <span class=\"math inline\">\\(X\\)<\/span>-related terms on the LHS (left hand side), <span class=\"math inline\">\\((X^TX)^{-1}X^T\\)<\/span>, has a special name: the pseudo-inverse, or Moore-Penrose inverse, of <span class=\"math inline\">\\(X\\)<\/span>. The next to last equation also has a special name: the normal equation(s) (depending on whether you are talking in matrix terms or scalar terms).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h3 id=\"on-to-some-code\">On to Some Code<\/h3>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[1]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\" highlight hl-ipython2\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">numpy<\/span> <span class=\"kn\">as<\/span> <span class=\"nn\">np<\/span>\n\n<span class=\"kn\">import<\/span> <span class=\"nn\">numpy.linalg<\/span> <span class=\"kn\">as<\/span> <span class=\"nn\">nla<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">scipy.linalg<\/span> <span class=\"kn\">as<\/span> <span class=\"nn\">sla<\/span>\n\n<span class=\"kn\">import<\/span> <span class=\"nn\">matplotlib.pyplot<\/span> <span class=\"kn\">as<\/span> <span class=\"nn\">plt<\/span>\n<span class=\"o\">%<\/span><span class=\"k\">matplotlib<\/span> inline\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[2]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\" highlight hl-ipython2\">\n<pre><span class=\"n\">n_obs<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">100<\/span>\n<span class=\"n\">n_ftr<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span>  <span class=\"c\"># misnomer, we really have a constant term also<\/span>\n<span class=\"k\">def<\/span> <span class=\"nf\">f<\/span><span class=\"p\">(<\/span><span class=\"n\">x<\/span><span class=\"p\">):<\/span>  \n    <span class=\"k\">return<\/span> <span class=\"mi\">1<\/span><span class=\"o\">+<\/span><span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">x<\/span><span class=\"p\">,<\/span><span class=\"mi\">2<\/span><span class=\"o\">**<\/span><span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">arange<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span><span class=\"n\">n_ftr<\/span><span class=\"o\">+<\/span><span class=\"mi\">1<\/span><span class=\"p\">))<\/span>\n\n<span class=\"n\">X<\/span> <span class=\"o\">=<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">random<\/span><span class=\"o\">.<\/span><span class=\"n\">uniform<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"mi\">10<\/span><span class=\"p\">,(<\/span><span class=\"n\">n_obs<\/span><span class=\"p\">,<\/span><span class=\"n\">n_ftr<\/span><span class=\"p\">))<\/span>\n<span class=\"n\">noise<\/span> <span class=\"o\">=<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">random<\/span><span class=\"o\">.<\/span><span class=\"n\">normal<\/span><span class=\"p\">(<\/span><span class=\"mf\">0.0<\/span><span class=\"p\">,<\/span> <span class=\"mf\">2.0<\/span><span class=\"p\">,<\/span> <span class=\"n\">n_obs<\/span><span class=\"p\">)<\/span>\n\n<span class=\"n\">Y<\/span> <span class=\"o\">=<\/span> <span class=\"n\">f<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"n\">noise<\/span>\n\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">scatter<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span><span class=\"n\">Y<\/span><span class=\"p\">,<\/span> <span class=\"n\">color<\/span><span class=\"o\">=<\/span><span class=\"s\">'r'<\/span><span class=\"p\">)<\/span> <span class=\"c\"># Y's are exact + noise<\/span>\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">plot<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span><span class=\"n\">f<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">),<\/span> <span class=\"s\">'b'<\/span><span class=\"p\">)<\/span>       <span class=\"c\"># f(X) is exact<\/span>\n\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">axis<\/span><span class=\"p\">([<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"mi\">25<\/span><span class=\"p\">,<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"mi\">25<\/span><span class=\"p\">]);<\/span>\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"output_wrapper\">\n<div class=\"output\">\n<div class=\"output_area\">\n<div class=\"prompt\"><\/div>\n<div class=\"output_png output_subarea \"><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAAEACAYAAACuzv3DAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAGPVJREFUeJzt3X+MZWV9x\/HPd3Z34qAmdJgKxFDhjyq62cBCakmwzlSdmTU21E0aGowNsbHaxKqV+aPgCkwJE3\/UpfxhYgyiwVawrWbpQmRnR8tQJkapgIusIpqC8QcsjmgLce3+mG\/\/OOfOPffM\/XHuuefce368X8nN3nvuufc+e\/bme5\/9Pt\/neczdBQAor7FRNwAAMBgCOQCUHIEcAEqOQA4AJUcgB4CSI5ADQMl1DeRmdp6Z3W9mR83scTP7QHh80cx+amaPhrc9w2kuACDOutWRm9k5ks5x9++Y2cskPSzp7ZKulPSCu98ynGYCADrZ3u1Jd39W0rPh\/RfN7PuSXhk+bTm3DQCQQOIcuZmdL2m3pG+Gh95vZkfM7HYzOzOHtgEAEkgUyMO0ypclfdDdX5T0aUkXSLpY0jOS9ufWQgBAV11z5JJkZjsk3SvpPne\/tc3z50u6x913xY6ziAsApODufaWue1WtmKTbJX0vGsTN7NzIaXslfbdDY7i568Ybbxx5G4py41pwLbgW3W9pdB3slHS5pHdKeszMHg2PfVjSVWZ2sSSX9JSk96b6dADAwHpVraypfa\/9vnyaAwDoFzM7h2BmZmbUTSgMrkUT16KJazGYnoOdqd\/YzPN6bwCoKjOTZznYCQAoPgI5AJQcgRwASo5ADgAlRyAHgJIjkANAyRHIAaDkCOQAUHIEcgAoOQI5AJQcgRwASo5ADgAlRyDH4JaXpbm54La8POrWALXD6ocYzPKytHevdPx48HhiQjpwQJqfH227gJJi9UMM3\/79zSAuBff3sxc3MEwEcgAoOQI5BrOwEKRTGiYmgmMAhoYcOQa3vNxMpywskB8HBpAmR04gB4ACYbATAGqIQI70qB8HCoHUCtKhfhzIBakVDA\/140BhEMgBoOQI5EiH+nGgMMiRIz3qx4HMUUcOACXHYCcA1BCBHABKjkAOACVHIAeAkiOQIz9M4QeGgqoVZKtRkri+Lh09Kp04ERxnCj+QCOWHGK34+iuSrtdN+hPdqz\/UQ9LsrHT48AgbCBRf5uWHZnaemd1vZkfN7HEz+0B4fNLMVszsSTM7bGZnDtJwVERs\/ZUv6C90s67Xr8XXA8hTrxz5SUkfcvedki6T9D4ze62kayWtuPurJX09fIyqSpHr\/rnO1dX6gt6qr2peh5nCD+Sor9SKmd0t6VPhbdrdj5nZOZJW3f3C2LmkVqqgn+Vqw3P9+HGNKfi3992XSFNTTOEHEsp1ZqeZnS9pt6RvSTrb3Y+FTx2TdHY\/H4oBDLsSpJ\/laufnpQMHNoP4L\/\/tP6RHHgny4gRxIDfbk5xkZi+T9BVJH3T3F8yaPxbu7mbWtuu9uLi4eX9mZkYzMzODtBXx3vHa2mgqQdbXOz5le4K2vOIV0uSfvWlYLQJKa3V1VaurqwO9R8\/UipntkHSvpPvc\/dbw2BOSZtz9WTM7V9L9pFaGYG5OWllpPZZ3JcjysnTFFc0yQkkaH5cOHtzyA3LPPcGpksQ\/PZBOHlUrJul2Sd9rBPHQQUlXh\/evlnR3Px+KEpmfl3bubD124sSW9Io7QRwYlV458sslvVPSH5vZo+Ftj6SPSZo1syclvSl8jLyNajOHqamep4yF36SHHsq5LQC2YEJQ2YxiM4celSuRIRN648CAmNmJwCDBvtNrOxx\/z3uk224LDvPPDQyOQI7+6r4HfO3GhrRtW3Cff2ogG+wQhP7qvgd8bSOI33RTinYCyAyBHKlE8+LXXz+6dgAgkFfPIJUtCV976aXN+6RUgNEjR15FeQx2hsiLA\/lisBO5a6RUrrkmeeodQHIMdqK3ARbdiubFW4I4W7oBI0WPvE4GKE3sOOlnkHJHAFvQI0d3KUsTT59u3t\/y2zxIuSOATBDI0VmYMtkeLnb8hjeMtjkA2iOQ10k\/pYlhysRWmkvkPviRNvnv6enmilm93hNALsiR102S0sTlZekd75A9\/8vNQy7buvZ5PD8+NhZM89y3L8e\/AFBtlB9icGFwPn38\/7RdQXLcFX6n4oF8FBtdABWXJpAn2uoNNRIOXm4P993cqceD46RMgMIiR44tTM3\/ST2uXdLkZPuSwlFtdAGgBamVOmuTL2+pF5f1rgsfxUYXQIWRI0dybSbynP7yAW1\/WxCIfXYuOJ7xWi0AuiOQI7k2A5WNlMpLXtI6xycxZnkCA2NmZ5EVfD2SaF68bRBP0n5meQIjQdXKMMR7qmtro++pLiwE7Th+vCWIt\/1PVBHbD2ATPfJhKGJPdX5eOnBAp9\/SDMYdM2FJ208VCzASBPI6m5\/X9q8dyvT9dOBAMClodpZeOzAkDHYOQ0EHAbcsTdup4qSg7QeqiKqVIitYWV7bIN4tWBes\/UBVEciRyKlT0o4dwf3NfyLWTQEKgfJDJNII4gCqgUBeMx23bKPiBCgtAnmNdAziUrqKk4JPcgLqghx5TbTNi0f1O5hJJQuQCwY70VHX3niaoMzgKJALBjvRVtcgLhVz5imAxAjkFdcziKfF4ChQGATyCjt1qnm\/axBPE5SZjg8UBjnyCuurN87MTaAQchnsNLPPSXqbpOfcfVd4bFHSuyX9IjztOnc\/FHsdgXyEckupAMhVXoOdn5e0J3bMJd3i7rvDW4ZL6GFQBHGgXnoGcnd\/UNKv2jzV1y8GhiNxXhxAZQwy2Pl+MztiZreb2ZmZtQgDYR0VoH7SBvJPS7pA0sWSnpFE0XEBkFIB6inVnp3u\/lzjvpl9VtI97c5bXFzcvD8zM6OZmZk0H4cECOJAOa2urmp1dXWg90hUfmhm50u6J1K1cq67PxPe\/5CkP3D3d8ReQ9XKkPRcRwVAaeRStWJmd0n6hqTXmNlPzOwvJX3czB4zsyOSpiV9KFWL0V3C1QXJiwP1xoSgokq4kBUpFaBaWDSrShIsZEUQByARyEuLenEADQTyolpYkMbHm4\/Hx1sWsiIvDqCBQF5CpFQARBHIi2r\/funEiebjEyek\/fsJ4gC2IJCXyMmNbZv3227XxkbIQC1RflhUbcoP7fhvNp9uubRshAxUBuWHZRbvUcd24OkYxCX23ARqLtVaK7WX9W468R712lqzRz0\/3zsvvr4+2OcDKDVSK\/3KI40xNyetrLQe271bmprSyY1tGv\/6fZI6BPHlZemKK1oHRsfHpYMHSa0AJZQmtUKPvF+d0hhZB80jR6SNDY2rx49hvLpFknbuJIgDNUKOPEtpK0fiu9iPjUkbG7JIEPfZueTvNzWV\/FwApUcg71c86E5MBMcaKZeVleC2d28zmPcK8LGBTV10UWsQ77arXqf2RFGaCFSbu+dyC966og4dcp+dDW6HDgXHZmfdgzR289Z4fmKieWxiovmaDk7cu7x5eqLXtGtP9Lk+Px\/A6ISxs694y2BnVtoNWM7OBn+2O374cMe3aqlSmTxLuuYaad++bNvV5fMBjA515KOUJMWRQEsQl0nPPy8tLZESAdARgTwr0Tz37t3ShRcGFSXT04kD\/JYg3jDIBJ+MfmAAFBflh1lqlPzFJ\/fs2yc98EDwuMMEopMnm\/d9dk5a2XJK+jYdOJDtBCYAhUKOPGspc9ItvfFDrJ0C1BUTgkpq6xR8etEAkqNHnrU+p\/CzvjiAqDQ9cgJ5HhIuqnXyZHM3t7peKgCtCOQlQ28cQBx15HnIaXo7QRxAVuiRd5PTzjsEcQCd0CPPWg4777TUi7vS9fhZBAtABOWHQ9YY3JTUfWegTtK8BkCl0SPvJuPp7VtSKml6\/OzPCSCGQN5NfJ3wAXq+meTFl5elhx9O\/1rSMUAlMdg5BB3rxfsZTI2f25BkADanQVsA2aOOvKC69sYbk4fW14PHU1PtJxG1W8NlclK6887eAZk1yYHSYK2VAuqZUum0YmKSHvOll9KrBkCOPE+J8+JJBjAHGXhlTXKg0gjkOdlSLz6oQQZeMxy0BVA85MiTSrgQVkNfVSoMRgIIMdiZl2EsTdvnDwWAasolkJvZ5yS9TdJz7r4rPDYp6V8kvUrS05KudPdfx15XnUDeR9UH66gAGERea618XtKe2LFrJa24+6slfT18XHuZ58UBIIGegdzdH5T0q9jhKyTdEd6\/Q9LbM25XsSSs+mhZRwUAhiRt1crZ7n4svH9M0tkZtaeYElR9kFIBMCoDTwhydzez6oauBIOQBHEAo5Q2kB8zs3Pc\/VkzO1fSc+1OWlxc3Lw\/MzOjmZmZlB83IgmWjCUvDmAQq6urWl1dHeg9EpUfmtn5ku6JVK18QtIv3f3jZnatpDPd\/drYa4pbtZK01C9BtQq9cQBZyqVqxczukvQNSa8xs5+Y2bskfUzSrJk9KelN4eNyaPSyV1aC2969qZd17XvSD8vIAshB\/SYE9bMSYJeJQImCeHRlw6NHpRMntrwPAESx+mHWGtUqsTRMorx4p\/XDpeaiWARyABmozqJZ0dTF0lLnNEYGKwEmqhePr2gIADmpRmqlW++3XRqj22Bn9Lnp6eBHIZJaseO\/2Ty161+vXQqnXZtYYwVARH0XzeoWNKXku+HEfxDGxqSNjc2nTc2\/T98rGo6PSzt3tu4AxKqHAGLyWmulPuLpkEgQPxkZTvBDCapO4rNBDx6UHnkk+EFpBOokG0oAQA\/VCOTxvHfUoLvhjAWXaFyREc6kJYvz80HgjgZvAMhYNQJ5vPd7883pdsNpNxB6002tKRVZdj1ntmADkIFq5MizFBt8tD3NHwFXJG2V1S70DHYCiKjvYGdOTp5slhr6xBkMSgLIHYOdGWupF2fzYgAFRY+8AxbDAjAK9MgzQhAHUCbVCuQZrDDI+uIAyqY6qZWMZkm29MZn56gkATBU9U6t9JolmaC33hLEZQOvV94V65MDyEh1Ank3CTaT2BLEG5JO\/uknMGe4uQUAVCeQd5sl2aO33pIXn53r\/7P7DcyssQIgQ9UJ5PFp+n3kx1vqxaen+582T2AGMELF3yGonyns8\/Ptn19YkNbWWgdCw+C8JaWyNCHt2yc98ECyz0yjS3sAoF\/FrlrJcr3uNj8IHfPi0XVUkvyQpGkna6wAaKN6a630s1FyVIIgeeqUtGNHcL8liEc\/o58ATWAGkIF6BPLJSenOOzsHyoTBt6U33mlBrLQ\/JACQUvXqyNttGPH8892rQhIMPG6Zgs+CWABKrNiBvFGJMjnZenyAqpC266g0dvJZWAjet1ELzsYPAEqg2IFcCoLspZcmP79L8D11qnl4S9anXS24RG8dQOEVO0fekCTvHR1snJ5uWz7YdVVD8uEACiBNjrz4deRSM8XSqSokHujX1rYEepamBVBV5eiRR7Ur8+vRm04UxLOsWQeAlKrbI2\/o1PPuomtePKpXrx8ACqpcPfJOPe+FhY696UxSKkz2ATAk1e+Rd3PhhdKPfyy96lXSRz+abRDvkX8HgFEqfvlhVLvSwunpINA++mgwWeiJJyRlOLjJyoYACq5cgbzdUrUPPLAl0J76h3\/cfEiFCoCqK1eOvJ02eXNT83N7NqFX\/ptqFgBDVL1Fs5KIBdq+g3iSIM1gJ4AhqWcglzYDra00Z2Em+mhmcwIomKFXrZjZ05L+V9JpSSfd\/fWDvF9q8\/M69eZ5qbG+OHlxADUy6GCnS5px992pgnjSneeXlqSzzgpuS0ttT2lsEiEp2U72UvLVDZO2EwBGwd1T3yQ9JemsDs95V4cOuU9MuAcd6OD+oUNbz7v55uY5jdvNN7ecEn2q5\/u1a8fsbHBrd37SdgJABsLY2VcsHihHbmb\/Lel\/FKRWPuPut0We867vnTQ\/fdZZQX141MtfLl12WfA50bx4py3bBkEeHcAQjWJm5+Xu\/oyZ\/a6kFTN7wt0fbDy5uLgY3PnRjzTzxBOamZzMpurjhReklRWd0rbNQz47J610eQ0AFNDq6qpWV1cHeo\/MqlbM7EZJL7r7\/vBx0CPvVOIntR4fH5d27pSmplqD\/dKS9JGPtP\/MaKnh7kuko0elEydaP2fQHw3qyAEM0VDLD83sDEnb3P0FM3uppMOS\/t7dD4fPB4G8W2qiUZ+9vt4ahMfGpIsu2lwzRUtL0i23SCdPBrff\/rY1iDdSKp1+DAZFHTmAIRl2auVsSQcsWNRku6QvNoJ4T+vrQYCXmvtkNoK4JG1sBGun7N0b9H737QuO33CDtLHRPohLwXtMTWWfv56fJ3gDKKzUgdzdn5J0cc8TFxaCFQOjKZRo73ttLVi5sJ3oAlVhEG\/Ji2\/fIZ1q\/1IAqIv8F82KL3S1c2dr7zuae+5k\/\/6gly5pRzRy79rFLvcAam84qx\/OzwfpjsOHg9RH3NRUEOx37w7y4w2xwNySUhnbFuTQ2eUeQM0Nf62VXlUg7QYWl5dle5oB2se2STfd1MydA0BFlGfRrD6rQE6flraH2XyfnaNyBEBllSeQ9\/1ezft+KFzrhHJAABVUjUAe6623pFRkQdWLlP3EHwAogPIH8m6bRMTXUYli7RMAFZEmkBdrz87rrtsM4qcjTesaxAGg5ooRyJeXpUsuCWZzhrbrdPP5aK34+HgzvdJ4jtpxADU2+tRKvBxRsZRKu8HN+GPy4wAqong58tnZ3oE2tqjWlhUNH3kkl\/YBQBEVL0e+shL0thNuj9aSF584I5i5CQDoKv8ceXThq3Yi+2Y28uK7XvLDZklhr\/0y2U8TQM3lm1ppPOhVHhifgn+oyzrl0an5bPoAoGKKlyOXEgXXLTM3Y4OfLcbGpK9+NXg\/9tMEUDHFy5EnWJHwdKTK0F1BT7xTEJeC5Wy7pWoAoGYG3Xy5uwQ948ZiWG98Y4r3j29aQU05gBoazTK2YY\/aVpqBfvPUeN57+\/ag2944odOyt+vrweOs9+sEgCEqXo48\/t6RIL1DJ3RKOyRFgnj0vH4mADHoCaAiih\/Iw8HJDZm2Kdi6zWfn+hucbLeWOYOeACoiTSDPN0feQSOIL+iT\/b0w3vNeWwt63gBQY8NdNGthoWUK\/icnbpCmp5NP6IlXtDQmG0UmFUli0BNArQy1R\/6390Um\/czOSdP7pKWlrT3sfnPb8\/PB61hIC0ANDW3RLPdgLo8Umbn58MPS88+3vrBbbptBTQAVV7wJQZFFsxpB\/K5rjwTHVla2BvGodmuoNHres7OJJhsBQB0MZa2VlqVpZ9tUmDQ0etgSPW8AtVS8Hrmkz+g9m\/c7\/mZMTrb2sDsNagIAtsh1sNMl\/bU+E9xvBPF20+rvvJPeNgCklGuPfCxMqbRUFSbJc1NOCACJ5Zojl1zvfrd0220p3qDdDE4AqLjCTdF\/3etcR4\/m8vYAUEmFC+R5vTcAVFUhq1YAAPkaXiBnk2QAyMVwUitMrQeARIaaWjGzPWb2hJn90Mz+ruvJTPABgNykCuRmtk3SpyTtkfQ6SVeZ2WuzbFiVrK6ujroJhcG1aOJaNHEtBpO2R\/56ST9y96fd\/aSkL0n6045n13yCD1\/SJq5FE9eiiWsxmLSB\/JWSfhJ5\/NPwWHusWggAuUm71kr\/I6Tz8wRvAMhBqqoVM7tM0qK77wkfXydpw90\/HjmH2UAAkMJQZnaa2XZJP5D0Zkk\/l\/SQpKvc\/ft9vxkAYCCpUivufsrM\/kbSsqRtkm4niAPAaOQ2IQgAMBy5TNHva7JQxZnZ02b2mJk9amYPjbo9w2RmnzOzY2b23cixSTNbMbMnzeywmZ05yjYOS4drsWhmPw2\/G4+a2Z5RtnFYzOw8M7vfzI6a2eNm9oHweO2+G12uRV\/fjcx75OFkoR9Ieoukn0n6L9U4f25mT0m61N277DRdTWb2R5JelPQFd98VHvuEpHV3\/0T4I\/877n7tKNs5DB2uxY2SXnD3W0bauCEzs3MknePu3zGzl0l6WNLbJb1LNftudLkWV6qP70YePfL+JgvVQ18j0FXh7g9K+lXs8BWS7gjv36HgS1t5Ha6FVMPvhrs\/6+7fCe+\/KOn7Cuah1O670eVaSH18N\/II5P1NFqo+l\/Q1M\/u2mf3VqBtTAGe7+7Hw\/jFJZ4+yMQXwfjM7Yma31yGVEGdm50vaLelbqvl3I3ItvhkeSvzdyCOQM3ra6nJ33y3prZLeF\/4XG5LC5THr\/H35tKQLJF0s6RlJtVpJLkwlfEXSB939hehzdftuhNfiywquxYvq87uRRyD\/maTzIo\/PU9ArryV3fyb88xeSDihIPdXZsTAvKDM7V9JzI27PyLj7cx6S9FnV6LthZjsUBPF\/cve7w8O1\/G5ErsU\/N65Fv9+NPAL5tyX9vpmdb2bjkv5c0sEcPqfwzOwMM3t5eP+lkuYkfbf7qyrvoKSrw\/tXS7q7y7mVFgarhr2qyXfDzEzS7ZK+5+63Rp6q3Xej07Xo97uRSx25mb1V0q1qThb6aOYfUgJmdoGCXrgUTL76Yp2uhZndJWla0pSCnOcNkv5d0r9K+j1JT0u60t1\/Pao2Dkuba3GjpBkF\/3V2SU9Jem8kR1xZZvYGSf8p6TE10yfXKZghXqvvRodr8WFJV6mP7wYTggCg5Nh8GQBKjkAOACVHIAeAkiOQA0DJEcgBoOQI5ABQcgRyACg5AjkAlNz\/AwtiDdfjSjKoAAAAAElFTkSuQmCC\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Now, we can ask what happens if we come up with some <span class=\"math inline\">\\(\\beta\\)<\/span>s? How accurately does the model (that we created out of thin air) reflect the true underlying model <code>f(X)<\/code>? Turns out, neither of them look very good and that isn&#8217;t surprising &#8212; we merely guessed at some values. We can also quantify the amount of error by looking at the <span class=\"math inline\">\\(RSS(model)\\)<\/span>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[3]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\" highlight hl-ipython2\">\n<pre><span class=\"n\">beta_hat_a<\/span> <span class=\"o\">=<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">ones<\/span><span class=\"p\">(<\/span><span class=\"n\">n_ftr<\/span><span class=\"o\">+<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>               <span class=\"c\"># \\betas = 1,1,1,1<\/span>\n<span class=\"n\">beta_hat_b<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">arange<\/span><span class=\"p\">(<\/span><span class=\"n\">n_ftr<\/span><span class=\"o\">+<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"mf\">1.0<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">2<\/span> <span class=\"c\"># \\betas = 2,4,6,8, force float typing<\/span>\n\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">scatter<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span><span class=\"n\">Y<\/span><span class=\"p\">,<\/span> <span class=\"n\">color<\/span><span class=\"o\">=<\/span><span class=\"s\">'r'<\/span><span class=\"p\">)<\/span>\n\n<span class=\"n\">pred_a<\/span> <span class=\"o\">=<\/span> <span class=\"n\">beta_hat_a<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span><span class=\"n\">beta_hat_a<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">:])<\/span>\n<span class=\"n\">pred_b<\/span> <span class=\"o\">=<\/span> <span class=\"n\">beta_hat_b<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span><span class=\"n\">beta_hat_b<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">:])<\/span>\n\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">plot<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span> <span class=\"n\">pred_a<\/span><span class=\"p\">,<\/span> <span class=\"s\">'b'<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">plot<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span> <span class=\"n\">pred_b<\/span><span class=\"p\">,<\/span> <span class=\"s\">'g'<\/span><span class=\"p\">)<\/span>\n\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">axis<\/span><span class=\"p\">([<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"mi\">25<\/span><span class=\"p\">,<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"mi\">25<\/span><span class=\"p\">]);<\/span>\n\n<span class=\"n\">errors_a<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Y<\/span> <span class=\"o\">-<\/span> <span class=\"n\">pred_a<\/span>\n<span class=\"n\">errors_b<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Y<\/span> <span class=\"o\">-<\/span> <span class=\"n\">pred_b<\/span>\n<span class=\"k\">print<\/span> <span class=\"s\">\"RSS (model a):\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">errors_a<\/span><span class=\"p\">,<\/span> <span class=\"n\">errors_a<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">print<\/span> <span class=\"s\">\"RSS (model b):\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">errors_b<\/span><span class=\"p\">,<\/span> <span class=\"n\">errors_b<\/span><span class=\"p\">)<\/span>\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"output_wrapper\">\n<div class=\"output\">\n<div class=\"output_area\">\n<div class=\"prompt\"><\/div>\n<div class=\"output_subarea output_stream output_stdout output_text\">\n<pre>RSS (model a): 2918.56967295\nRSS (model b): 12832.8298798\n<\/pre>\n<\/div>\n<\/div>\n<div class=\"output_area\">\n<div class=\"prompt\"><\/div>\n<div class=\"output_png output_subarea \"><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAAEACAYAAACuzv3DAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAHNdJREFUeJzt3X2MXXWZB\/DvM9KJgzRbymygcYFislgpVcaygEtx7uLOTAW3ZVaD0DQhCoY1SI1ONryU0AE6QTQl4GoJYIultsUiFluW9nZWmbGWIFBKoWMrygJW7QtjUVtkHbXP\/nHOmXvumfty3l+\/n+SGe8+999yfN9dnnj6\/5\/c7oqogIqLsakl6AEREFAwDORFRxjGQExFlHAM5EVHGMZATEWUcAzkRUcY1DOQicqqIPCUiIyKyW0QWmcf7ReTXIrLTvM2NZ7hEROQkjfrIReQUAKeo6osicgKAHQAuA3A5gCOqenc8wyQionqOa\/Skqh4AcMC8f1RE9gB4r\/m0RDw2IiJywXWNXESmA+gA8Ix56HoR2SUiK0RkSgRjIyIiF1wFcrOs8j0AX1TVowDuA3AGgHMA7AewLLIREhFRQw1r5AAgIpMAPAFgs6reU+P56QA2qeosx3Fu4kJE5IOqeipdN+taEQArAPzMHsRFZJrtZb0AXq4zGN5UsWTJkqavQT+A\/vx\/Z26+i6Lc+F3wu6h186PhZCeACwEsBPCSiOw0j90M4EoROQeAAngNwLW+Pp0AAHKb8cf3lotuSXgkRJRFzbpWfoLaWfvmaIZTbHdcfEfSQyCiDOLKzhiUSqW6z826b1bd5\/Ko0XdRNPwuKvhdBNN0stP3iUU0qnPniVVW0SX8rogIEBFomJOdRESUfgzkCbKycSKiIBjIU4BlFSIKgoGciCjjGMgTYpVVbrjwhoRHQkRZx66VhLBbhYhqYddKRpy9\/Oykh0BEOcJAnoCRN0cAMBsnonAwkBMRZRwDeczYO05EYWMgTwjLKkQUFgZyIqKMYyCPUW57x8tloLvbuJXLSY+GqHDYRx6jXPaOl8tAby\/wzjvG47Y2YMMGoKcn2XERZRT7yFMst73jy5ZVgjhg3F\/Ga3ETxYmBPCbsHSeiqDCQUzB9fUY5xdLWZhwjotgwkMcg173jPT1GTbyry7ixPk4UO052xiCXk5xEFAlOdhIRFRADecRy2zsOsH+cKCVYWolYbssq7B8nigRLKylz7gPnJj2E6LB\/nCg1GMgjtGP\/DgA5zMaJKFUYyMkf9o8TpQYDeURy3TsOsH+cKEU42RmR3E5yElGkONlJRFRADOQRsLLx20q3JTwSIioCllYiwLIKEfnF0koKzFk5J+khEFHBMJCHbPu+7QCYjQPgEn6imByX9AAoZ8plY4Xn6CgwMgKMjRnHf\/ITtigSRYSBPES57x1vxrn\/ip21hJ+BnCh0DUsrInKqiDwlIiMisltEFpnHp4rIoIi8IiJbRWRKPMPNhsKWVZz7rxBRLJrVyP8C4EuqOhPABQCuE5EPALgRwKCqngngh+Zjyqswat1cwk8UmYalFVU9AOCAef+oiOwB8F4A8wB0mi9bBWAIBQ\/mue0dd5ZLGtW6+\/qM563XtrYCM2cC7e3GcyyrEEXCdR+5iEwHMAzgbAC\/UtUTzeMC4LD12Pb6QvWRx9Y7bk0mAvEEx+5uYHCw+lhXF7B1azrGR5QzfvrIXU12isgJAB4D8EVVPWLEboOqqojUjF79\/f3j90ulEkqlkpexZUZsveNesuMojY7Wf66nh8GbyIOhoSEMDQ0FOkfTjFxEJgF4AsBmVb3HPLYXQElVD4jINABPqeoMx\/sKk5HHlo17zY7DUC4D8+ZV2ggBo2SycSMDNlEEQl\/ZaZZNVgD4mRXETRsBXGXevwrA414+lDKkp8eoc9uNjfFqQEQp0qxr5UIACwH8i4jsNG9zAXwFQJeIvALgYvNxIcXaO57UxRza26P\/DCLyjZtmBRT7BllJTCbyQstEsfFTWmEgDyiVOx0GCfb13stuFKJYMJDHzN47fmvnrQmPxhQke2bmTZQ4bmObkNQEcWDiMnlrj5Oo30tEiWEg94n7jhNRWjCQ+5TafceDdLYk1RVDRIGwRu5TKic5LVFMdhJRLDjZGRN773gqAzkRZRYnO2OWySAexeXXeEk3okTxCkFFEsWmW2nZyIuowJiRe2SVVW656JaER+JDFO2FbFkkShwDuU93XHxH0kOIHksmRJnAQO7BuQ+cm\/QQgvHSXmiVTAYHjVtvb+1g3tkJtNh+RmxZJIodu1Y8SHXLoVtu2gvLZWDBAuDw4erjzr3PnfXxlhbg9tuBxYujGTtRAUR2hSDKkWZX8HEG50ac9fFjx4DhYQZyopixtOJSrPuOJ8kZnC0smRClFgO5R5kuq\/g1dWrtlkIu6SdKBQbyIqvVlVIrOK9dW7sc09NjBPiuLuPG\/nGiRHCy0wWrrHLnx+7EjXNuTHg0IWm09zj3aiFKDPdaiUguulWcuruNtkI7Z1eKV7wwBVFg3GslAud\/6\/xwTpT1xTVuxs9VnkSJYPthE8\/+5lkAAbPxNO5H0tdnjMOePTdbHJSm8RPROGbkcUhjpuplotLt+NnFQpQIZuQN5L53vNniID\/n27CBk51EMWNG7kLgSc6sZKr16uBext\/TY0yYbt3KIE4UE3atNBBqt0ra2\/KadZykffxEOcH2wxBZQXxJ5xL0l\/qTHUwcomhHJCLP2H4YgUIEcSLKNAbyGj760EeTHkL8slLHJ6IJGMhr2ParbQBytpKzGT\/7pmR9kRNRTrD9kAxeJzO5SIgoNTjZ6WDvHS9MRu5njxROjhJFgpOdISpMEAfSufKUiFxjICd\/ODlKlBoM5DZWWeWuf70r4ZHEzE9Q5kUliFKDNXKbXO477hZXbhKlgp8aedOuFRFZCeBSAIdUdZZ5rB\/ANQDeNF92k6pu8TbcdOle3Z30EJIV9gZaRBSbphm5iFwE4CiAh22BfAmAI6p6d4P3ZSojL3Q2TkSpEUnXiqpuA\/BWrc\/z8kFERBSNIJOd14vILhFZISJTQhtRAnK\/7zgR5ZrfQH4fgDMAnANgP4BcNB2zrEJEWeRrib6qHrLui8i3AGyq9br+\/v7x+6VSCaVSyc\/HERHl1tDQEIaGhgKdw1X7oYhMB7DJNtk5TVX3m\/e\/BOCfVHWB4z2ZmOy0yir3zr0Xi85flPBoiKjoIpnsFJF1AJ4G8H4R2ScinwVwl4i8JCK7AHQC+JKvEadIKoM4dxckIheallZU9coah1dGMJbYfXL9J5MeQn3cXZCIXCr0Ev3v7\/k+gJROcnIjKyJyqdCBnIgoDwobyFPfO97XB7S2Vh63tnJ3QSKqqbCB3JLKsgoRkQeFD+SptWwZMDZWeTw2xho5EdVUyEBulVWWX7I84ZGEiK2KRIVVyP3IM7HToZfraPq55iYRpRKv2enCgscWNH9REpwZtZcr8LBVkajQfO21kmXrdq8DEDAbD\/tqOo0W\/7g59+hosM8nokwrXEYemBV0BweNW29v8Jp0rYz6ppvc1bzLZWBkpPoYWxWJCqVQGXkoveP1yhhh16N37QKOHTPuN1qe7+xuAYCZM1kfJyqQQmbkkU1y+u0ccV7FvqWlEsQB7zXv9nb3ryWizCtkIA\/EGXTb2oxjjUouzQK8c2LzQx8KPh47tiYS5ZuqRnIzTp0e6IeiH\/rgjgeDn2zLFtWuLuO2ZYtxrKtLFai+Wc+3tVWOtbVV3tPo\/F7eU2s8fs9FRIkyY6eneFuYPvLIe8e7u41M3K6ry\/hvreNbtzY+38AAcPfdxv0vfxlYvDjccTX7fCJKBPvI6\/jsDz4b\/Ye4KXG4VS4bgfzwYeM2MMCSCBHVVYhA\/tCLDwGIeCWnvc7d0QHMmGFMUHZ2eg\/wYS7wCfMPDBGlUqHaDyNntfw5F\/csXgwMDxuPw1hA5HVMGzaEu4CJiFIl9zVye+94LHurhFGT5t4pRIXFGnkDqd4gy8nLPitEVHgsrYStr88op9izaT81abf7rBBR4eU6I7fKKg\/+24PxfSizaSKKWa5r5JnYd5yIyIY1cpvQese5vJ2IUi63GXko2Ti7R4goZszIwxbHlXf8ZPz8VwIR2eSyayWUfcfj0OjKQGG+h4hyLdcZeeBJzqiXt\/vJ+Hl9TiJyyHUgDyxtrYTlMrBjh\/\/3shxDlEu5m+y0945f8+FrYv98T7xMpjpfa3EzActJW6LM8DPZmdtAnpne8XLZKI2MjhqP29trb2xVaw+XqVOBtWubB2TuSU6UGX4Cea4mOxc8tiDpIXhXb8dENxnz7NnMqokoXzXydbvXAchQNm5xM4EZZOKVe5IT5VquAnmuBZl4TWjS9q9\/BebOBZ57LvKPIiq03NTII9933KplA+FfnCGHk5HlshHEAWD3bmDmzGTHQ5QVhZ7sjHSSM45AG+Ufihi9\/TZwwgnG\/VNPBV59FZg0KdkxEWVJJIFcRFYCuBTAIVWdZR6bCuC7AE4H8DqAy1X194735SeQs+vDlbPOAvbsMe6fdx7w058mOx6iLIpqr5WHAMx1HLsRwKCqngngh+bjxFhB\/Nvzv53kMArrd78DRCpB\/I9\/ZBAnilPTQK6q2wC85Tg8D8Aq8\/4qAJeFPC5frjrnqmhOzK6PukSM1neLKjB5cnLjISoiv10rJ6vqQfP+QQAnhzQez6777+ui\/5C0LdVPgX37jCBuOXjQCOJEFL\/AC4JUVUUksf8LL39+uTGOqHrHczIJGSZxVO8YwImS5TeQHxSRU1T1gIhMA3Co1ov6+\/vH75dKJZRKJZ8flxBuGVtl3z7gtNMqj199FXjf+5IbD1EeDA0NYWhoKNA5XLUfish0AJtsXStfBfA7Vb1LRG4EMEVVb3S8J\/KuFd+9426zbHarjGMWThSPSLpWRGQdgKcBvF9E9onIZwB8BUCXiLwC4GLzcWI8B\/HeXiNADw4a9+PY1jWj28ju3VsdxHfvZhAnSptMLwjy1TvuJcsOuhDIvrPhyAgwNubvPAlhFk4Uv0JdszOW3vEg3Sr2zH\/nzkoQB1J\/VZ9du6qD+IsvMogTpVnmt7Ed7x231707O4HhYeO+swbe12dMWtqz7Ch6wp07GmYEs3Ci7MlkIJ\/QO+4sgdhLJ85OEyvLrjfZ6fyDMDAQfteK\/Y9HStobt28H5sypPH76aeAjH0lkKETkUSZr5BNq47Xq3nZuO02cfxBaWoBjx8I5V2ursQWg\/QpAKdn1kFk4UXoUqkYeCWc5xBnEAePix266Tpz19Y0bgRdeMP4IWIHazQUlIvTjH1cH8cFBBnGiLMpcacXeOz7OWfe2C1oDd2blhw8bWbSbzLmnJ7WdKczCifIjsxl5VcuhM\/tdutRfp0mtzbFuv924yLFdWJlzAptx\/ehH1UF882YGcaKsy1yNPNJ9x4Hak49RrvCMcbKTWThR+uX+CkFWEF\/z72uwYNaCUM\/dUEomJf3avBm45JLK402bgE98IrnxEFF9hQnkkWXjjaSkTdArZuFE2ZLrrpW+csIXcujpMUop9q6TFNu8uTqIP\/oogzhRXmUmI080G88YZuFE2ZXrjNyVjO4wGBZm4UTFlIk+8pq9405hXgQig\/VwZuFExZWpjLxhWaXZKkm32Xpc+5WH9K+HTZuYhRMVXSYy8sC8ZOv1\/iA0y8q9ZPEh\/euBWTgRARnIyK2yyhNXPtH4hY1WSUa9p4nXLD7geJy18HXrGMSJiiwzGfmlZ17a+AXNtqdtxLl1rdf9yv1m8T4wCycip1Rn5F\/b\/rXKAze15Hq93o2ydWc2PTAALF7sb68Wt3zssfL448zCiai2VPeRj\/eO95sHgiyNr1fDbraPipvat58l\/B5q6szCiYrDTx85VDWSm3HqYNAPRT9UYbt1dTV\/45Ytxuu6uoz7jXR1VZ\/f\/hlbtqi2tVWOt7XVP5+Xz3Rp\/frqYT38cCinJaIUM2Onp3ib2ozc3js+npEDxpaya9fWz2C9ZseNXh\/lrodNMAsnKqZcruzUu9qqD1gXdqhXL\/faEeLcyzzhXQ2\/+93qIP7AAwziRNRY6gM5NmyI7sIOFmuStK\/POK81sRrzhR9EgCuuqDxWBT73ucg+johyIpWB3CqrlBeWjSA7e7b7N\/sNvrV6wYFYsvVVq5iFE5F\/qayRT9jp0E3d29kLPjxs3HfbT55QPZy1cCKy81MjT92CoAd2PDDxYLPFPmFumBWTlSuBq6+uPL73XmDRouTGQ0TZlbqMvOm+41FdUzPGy7kxCyeienLZtVIlyp0JY+heWbmyOogvW8YgTkTBpSojr+odr5WR18u8+\/qizaZD2J+cWTgRuZGbjNzX5dxmzDDaFDs6wg\/iAf4V4MzCv\/51BnEiClfqJjsb6uubuDNhZ2d1Nm5fDBSGADsbMgsnojikJiO3yirPXP1M\/RfVqmMPD0e717gPa9YwCyei+KQuIz\/\/H85v\/IKenupsOGjQblb\/rvWvgAYLjJiFE1HcUpGRrx9Z7\/\/NQZbRu6l\/u+xmcWbhy5cziBNRPFLRtdK0d7wZv10lIa3mZBZORGGJvWtFRF4XkZdEZKeIPBvkXIHUuzJQxJiFE1EaBC2tKICSqnao6nme310uV\/WO1zUwAJx0knEbGGh4PnR3u7ssHOC+LFPjvCLAwoWVl6gCn\/98848kIgqd1ytR2G8AXgNwUp3nGl8Gw7z6zvhVgOpdfWfp0olX8Fm6tO75XF3Nx\/m+Rlf2cZz325OuqRrK8uXNP4KIyC3EfYUgEflfAH8A8DcA96vqg7bntOG5zfq09Jt\/UPpRuz590knGxSTsJk8GLrjAuB\/mfisNxgkAgur\/PSyjEFHYktj98EJV3S8ifw9gUET2quo268n+\/n7jzi9\/idLevShNnVo1GWkF8R33e\/zUI0cqQdva6TBCa7AAC7Fm\/PHX3\/9NXL\/3ukg\/k4iKYWhoCENDQ4HOEVrXiogsAXBUVZeZj42MvN6uggDkmbkAzGy8tRWYORNob6\/uPBkYAG65pfGHT50KnH46MDICjI1Vf07Ayc8JHSltx6d+i1wiyq5Yu1ZE5HgRmWzefw+AbgAvT3hhnSXuG6f\/uXKso8P4786dRqZ9ySXAhz9s\/BFYvBhYutQI1pMnA+9+98TBHD5svNc6Vwi7F65eXR3EvzHjv6Bd3QziRJQ6QUorJwPYIEa0Ow7AGlV1V5AeHcX8R+YDAPSCLcD2ZZVMGgCOHTMCc2+vETgXLzaO33qr8Vw9Y2NGRh+wLl67L\/x680ZElC6+M3JVfU1VzzFvZ6vqnTVf6Gzxa201SiCW3l5gdLT2h1j7ppTLtYP4ceHuMLB+fXUQv\/9+TmgSUfpFv9eK8zJto6OQ+UYZ5IQ\/o7p2Xm\/nwmXLamfis2YBe\/e63gelEa7OJKKsimevFfvKy\/b28cNHrBy+vd0I9h0dQIttSI0Cc0sLcOedga\/qs2FDdRBfsYJBnIiyJf69Vsrl6m4VZ3dJrX1TnJ0vLS3A7bdXaue+x1j9mAGciJLmp2sl9kBuLcl\/47k5OG2szf0mVyFcbs2ycSMwf37l8erV1cvtiYiSksSCIN9Oe2Jb8xdZnEEcMFZcWo89BHVm4USUN7EG8l0HdjV\/Ua2gbS+rDA8b\/7XaFa2VnU2C+ZNPApdeWnm8bh1wxRUeBk9ElFKxllaa7jteaxXojBmVxT71NNlThVk4EWVF7PuRh+6mmyauAn3jDd+ne\/LJ6iD+6KMM4kSUP7GVVuZ+x+hUuXb2tROfLJeNIF4r8z79dCOgWwG+tdX4r31PlRotiszCiagoYiut1C2rOMspdi0tRloNTKyb1+lgcdbCH30U+NSnAv1PISKKTfraD7u6xgNt3UBeax9xS0cH8MILHj6z+jGzcCLKmvTVyM0r01tB\/M3\/fNP9e9vajJWbLmzdWh3EH3mEQZyIiiP6yU5byaT9+PaJzzs31WppMTJxq6WwyXU4Rao7D1WBT386zP8BRETpFnkgf+PvmrzA2lTL2i\/lySeNTHzZMmNP8nnzjMze2qfcvPiysyNlAy4zLvrg5qLLREQ5Em2NHJXLudXtHXdqNPkJAC0tkGN\/qzqksEX0MK7TSUSUkPTVyLu6vL\/HeUUhmx\/i4qog\/v0P3VYdxImICijSPvJvLp0PbB7EwMUDgc9V8wr25QuA3rZQ9iMnIsqqSDPyL2z+AgDg5oturhxsMnnpnPx85l0XVgXxLa3zoFvM99nr6x0dxnJ+64pCREQFEWmNHP3G\/fH6eK29VGpteGVunCWD1bVu7equvduh2\/MSEaVc+mrkAN6++e3KA2f927omp8PzJ\/VUBfHhYbOUYk1iOjN6l+clIsqjyPdaOX7S8Z5e33B1pjPztrawJSIqsEgz8gkth87FP21tQGcn0N2NPf98dVUQ3769xurMepl3rfNy0pOICiLeKwRZk5NW2aOzExgYgLzzp6qXeS7bO88b8FJwRERZEtumWVXMycxfPPsWzvzDc+OHd+GD+GDXKfUX9HBSk4hyLn27HwITg60ZjCdk4dbCHmtlZr2LLYd4EWYiorRJZyAHqpbNHypdjpOH14+\/bgRn4SzsMR5YQR9g5k1EheQnkMdaIzcmMytBfDwLnzoVmD27kmF3d9ee1GQgJyKaIPpA3taGP\/zHDZhi+\/vy23e\/D9P+77Xx57F2LYM0EZFPkW+aJe\/8CVM++bHxQ6rAtMfvq2xbW6tkwnZCIiLXol2ib9sj5fBh4MQTPZyAk5pEVECpm+wEFAsXAqtXR\/IRRES5k7rJTl43k4goetFfs5OIiCIVXyBvtg85ERH5Eu2CIPW4DzkRUcHFuh+5iMwVkb0i8gsRuaHhi7lfOBFRZHwFchF5F4BvAJgL4CwAV4rIB8IcWJ4MDQ0lPYTU4HdRwe+igt9FMH4z8vMA\/FJVX1fVvwB4BMD8uq8u+AIf\/kgr+F1U8Luo4HcRjN9A\/l4A+2yPf20eq81+keR6qzmJiMgXv33k3mdIe3oYvImIIuCra0VELgDQr6pzzcc3ATimqnfZXsPlQEREPsSyRF9EjgPwcwAfA\/BbAM8CuFJV93g+GRERBeKrtKKqfxWRLwAoA3gXgBUM4kREyYhsQRAREcUjkiX6nhYL5ZyIvC4iL4nIThF5NunxxElEVorIQRF52XZsqogMisgrIrJVRKYkOca41Pku+kXk1+ZvY6eIzE1yjHERkVNF5CkRGRGR3SKyyDxeuN9Gg+\/C028j9IzcXCz0cwD\/CuA3AJ5DgevnIvIagNmqejjpscRNRC4CcBTAw6o6yzz2VQCjqvpV84\/8iap6Y5LjjEOd72IJgCOqeneig4uZiJwC4BRVfVFETgCwA8BlAD6Dgv02GnwXl8PDbyOKjNzbYqFi8DQDnRequg3AW47D8wCsMu+vgvGjzb063wVQwN+Gqh5Q1RfN+0cB7IGxDqVwv40G3wXg4bcRRSD3tlgo\/xTA\/4jI8yLyuaQHkwInq+pB8\/5BACcnOZgUuF5EdonIiiKUEpxEZDqADgA\/RcF\/G7bv4hnzkOvfRhSBnLOn1S5U1Q4AHwdwnflPbAJgbo9Z5N\/LfQDOAHAOgP0ACrWTnFlKeAzAF1X1iP25ov02zO\/iezC+i6Pw+NuIIpD\/BsCptsenwsjKC0lV95v\/fRPABhilpyI7aNYFISLTABxKeDyJUdVDagLwLRTotyEik2AE8dWq+rh5uJC\/Ddt38R3ru\/D624gikD8P4B9FZLqItAL4NICNEXxO6onI8SIy2bz\/HgDdAF5u\/K7c2wjgKvP+VQAeb\/DaXDODlaUXBfltiIgAWAHgZ6p6j+2pwv026n0XXn8bkfSRi8jHAdyDymKhO0P\/kAwQkTNgZOGAsfhqTZG+CxFZB6ATQDuMmuetAH4AYD2A0wC8DuByVf19UmOMS43vYgmAEox\/OiuA1wBca6sR55aIzAHwYwAvoVI+uQnGCvFC\/TbqfBc3A7gSHn4bXBBERJRxvPgyEVHGMZATEWUcAzkRUcYxkBMRZRwDORFRxjGQExFlHAM5EVHGMZATEWXc\/wN9WtyA4KghiAAAAABJRU5ErkJggg==\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>In spite of my comments about the transition from the data <span class=\"math inline\">\\(X\\)<\/span> to the design matrix <span class=\"math inline\">\\(D\\)<\/span> (namely the reallocation of space and copying time &#8211; both as <span class=\"math inline\">\\(\\mathcal{O}(X)\\)<\/span>), I&#8217;m going to punt here. The main reason is the mathematical (and here, computation) simplicity of working directly with the design matrix. To account for the constant term, we manually append a column of ones and pass the design matrix to the solving routines.<\/p>\n<p>If we wanted to account for the constant term as part of the overall model and use these solvers, we would have to somehow make use of the solvers to achieve a partial solution and perform other operations to account for the constant term (likely looking at the residuals and apportioning part of the residual to the constant term &#8212; I haven&#8217;t done the math). Then, we&#8217;d have to take those two partial solutions and compute the final <span class=\"math inline\">\\(\\beta\\)<\/span>s. Ugh. I&#8217;m going to leave that for furture work. But if you are building a custom regression system, you&#8217;ll have to make some trade-offs. It all depends on how much (programmer) time and (computer) memory you have available.<\/p>\n<p>Also, we&#8217;ll use four different methods of computing the <span class=\"math inline\">\\(\\beta\\)<\/span>s. I won&#8217;t comment on them now, but we&#8217;ll dig into the differences between them in the next episode.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[4]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\" highlight hl-ipython2\">\n<pre><span class=\"n\">D<\/span> <span class=\"o\">=<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">hstack<\/span><span class=\"p\">((<\/span><span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">ones<\/span><span class=\"p\">((<\/span><span class=\"n\">n_obs<\/span><span class=\"p\">,<\/span><span class=\"mi\">1<\/span><span class=\"p\">)),<\/span> <span class=\"n\">X<\/span><span class=\"p\">))<\/span>\n<span class=\"n\">mle_betas_1<\/span> <span class=\"o\">=<\/span> <span class=\"n\">nla<\/span><span class=\"o\">.<\/span><span class=\"n\">solve<\/span><span class=\"p\">(<\/span><span class=\"n\">D<\/span><span class=\"o\">.<\/span><span class=\"n\">T<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">D<\/span><span class=\"p\">),<\/span> <span class=\"n\">D<\/span><span class=\"o\">.<\/span><span class=\"n\">T<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">Y<\/span><span class=\"p\">))<\/span>\n<span class=\"n\">mle_betas_2<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sla<\/span><span class=\"o\">.<\/span><span class=\"n\">solve<\/span><span class=\"p\">(<\/span><span class=\"n\">D<\/span><span class=\"o\">.<\/span><span class=\"n\">T<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">D<\/span><span class=\"p\">),<\/span> <span class=\"n\">D<\/span><span class=\"o\">.<\/span><span class=\"n\">T<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">Y<\/span><span class=\"p\">),<\/span> <span class=\"n\">sym_pos<\/span><span class=\"o\">=<\/span><span class=\"bp\">True<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">mle_betas_3<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sla<\/span><span class=\"o\">.<\/span><span class=\"n\">lstsq<\/span><span class=\"p\">(<\/span><span class=\"n\">D<\/span><span class=\"p\">,<\/span><span class=\"n\">Y<\/span><span class=\"p\">)[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n<span class=\"n\">mle_betas_4<\/span> <span class=\"o\">=<\/span> <span class=\"n\">nla<\/span><span class=\"o\">.<\/span><span class=\"n\">lstsq<\/span><span class=\"p\">(<\/span><span class=\"n\">D<\/span><span class=\"p\">,<\/span><span class=\"n\">Y<\/span><span class=\"p\">)[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n\n<span class=\"c\"># pairwise compare the inferrred betas<\/span>\n<span class=\"k\">print<\/span> <span class=\"s\">\"all close to each other?\"<\/span><span class=\"p\">,<\/span> <span class=\"nb\">all<\/span><span class=\"p\">([<\/span><span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">allclose<\/span><span class=\"p\">(<\/span><span class=\"n\">mle_betas_1<\/span><span class=\"p\">,<\/span> <span class=\"n\">mle_betas_2<\/span><span class=\"p\">),<\/span>\n                                       <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">allclose<\/span><span class=\"p\">(<\/span><span class=\"n\">mle_betas_2<\/span><span class=\"p\">,<\/span> <span class=\"n\">mle_betas_3<\/span><span class=\"p\">),<\/span>\n                                       <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">allclose<\/span><span class=\"p\">(<\/span><span class=\"n\">mle_betas_3<\/span><span class=\"p\">,<\/span> <span class=\"n\">mle_betas_4<\/span><span class=\"p\">)])<\/span>\n<span class=\"k\">print<\/span> <span class=\"n\">mle_betas_3<\/span>\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"output_wrapper\">\n<div class=\"output\">\n<div class=\"output_area\">\n<div class=\"prompt\"><\/div>\n<div class=\"output_subarea output_stream output_stdout output_text\">\n<pre>all close to each other? True\n[ 1.2245769   1.93952792]\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Finally, we can look at how well our inferrred <span class=\"math inline\">\\(\\beta\\)<\/span>s capture the original, true, underlying model.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In\u00a0[5]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\" highlight hl-ipython2\">\n<pre><span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">scatter<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span><span class=\"n\">Y<\/span><span class=\"p\">,<\/span> <span class=\"n\">color<\/span><span class=\"o\">=<\/span><span class=\"s\">'b'<\/span><span class=\"p\">)<\/span>\n\n<span class=\"n\">pred_mle<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mle_betas_3<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span> <span class=\"n\">mle_betas_3<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">:])<\/span>\n\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">plot<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span> <span class=\"n\">pred_mle<\/span><span class=\"p\">,<\/span> <span class=\"s\">'r'<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">plot<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">,<\/span> <span class=\"n\">f<\/span><span class=\"p\">(<\/span><span class=\"n\">X<\/span><span class=\"p\">),<\/span> <span class=\"s\">'y'<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">plt<\/span><span class=\"o\">.<\/span><span class=\"n\">axis<\/span><span class=\"p\">([<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"mi\">10<\/span><span class=\"p\">,<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"mi\">25<\/span><span class=\"p\">]);<\/span>\n\n<span class=\"n\">errors_mle<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Y<\/span> <span class=\"o\">-<\/span> <span class=\"n\">pred_mle<\/span>\n<span class=\"k\">print<\/span> <span class=\"s\">\"RSS (mle model):\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">dot<\/span><span class=\"p\">(<\/span><span class=\"n\">errors_mle<\/span><span class=\"p\">,<\/span> <span class=\"n\">errors_mle<\/span><span class=\"p\">)<\/span>\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"output_wrapper\">\n<div class=\"output\">\n<div class=\"output_area\">\n<div class=\"prompt\"><\/div>\n<div class=\"output_subarea output_stream output_stdout output_text\">\n<pre>RSS (mle model): 453.184077193\n<\/pre>\n<\/div>\n<\/div>\n<div class=\"output_area\">\n<div class=\"prompt\"><\/div>\n<div class=\"output_png output_subarea \"><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXEAAAEACAYAAABF+UbAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+\/AAAHpNJREFUeJzt3XuU3GWd5\/H3twMJzSDkhoRLJCyGI4ZbAAcwi1090Gkm7kGy7GHXy8oq7uoug4px15A4knMMUZwNI+PtDIgcHR0cRWFlxISIKSSEi2IAuYMkQ4JJMIZrrpD+7h+\/qu6q6uq6\/q5Vn9c5ddL1VNXv93Sl+1tPf5\/v8\/zM3RERkWzqSboDIiLSOgVxEZEMUxAXEckwBXERkQxTEBcRyTAFcRGRDKsZxM1supmtNrPHzOxRM\/tkoX2JmW0ys3WF23nxdFdEREpZrTpxM5sGTHP3h8zsIOBB4ALgIuA1d78mnm6KiEg1+9V60N23AFsKX79uZk8ARxYetoj7JiIidTScEzezGcBs4L5C02Vm9rCZ3WBmEyPom4iI1NFQEC+kUm4GPuXurwPfAo4BTgE2A8sj66GIiIypZk4cwMz2B\/4V+IW7f7XK4zOA29z9xIp2bcoiItICd284XV2vOsWAG4DHSwO4mR1e8rT5wO\/H6Ihu7lx55ZWJ9yEtN70Xei\/0XtS+NavmxCYwB\/gQ8IiZrSu0LQLeb2anAA6sBz7e9JlFRKRt9apT1lB9tP6LaLojIiLN0IrNGORyuaS7kBp6L0bovRih96J1dSc2Wz6wmUd1bBGRTmVmeFgTmyIikm4K4iIiGaYgLiKSYQriIiIZpiAuIpJhCuIiIhmmIC4ikmEK4iIiGaYgLiKSYQriIiIZpiAuIpJhCuIiIhmmIC4i0oSVK2Hu3OC2cmXSvdEuhiIiDVu5EubPh127gvu9vXDLLTA4GN45tIuhiEhEli8fCeAQfL084cvEK4iLiGSYgriISIMWLAhSKEW9vUFbkpQTFxFpwsqVIymUBQvCzYdD8zlxBXERkRTRxKaISBdREBcRqZC2WvBalE4RESkRRy14LUqniIi0IY214LUoiIuIZJiCuIhIiTTWgteinLiISIWoa8FrUZ24iEiGaWJTRKSLKIiLiGSYgriISIYpiIuIZJiCuIhIDKJayq\/qFBGRENQqS2xmKb+qU0REYlYM0qtWBbf588tH28uXw\/TpD3Ljje\/k4IO3hbqUf79aD5rZdOB7wFsBB65z938ws8nAvwBHAxuAi9z95XC6JCKSLWPttzI4CLt2bWDRomOGH9ux45BQz11vJP4GcLm7zwLOBC41s+OBhcAqdz8OuLNwX0QkVZLcUvaAA7Zzzz2Hcv\/9QQBfsOAe+vudffv2D3Upf1M5cTO7Ffh64dbn7lvNbBqQd\/d3VDxXOXERSUycW8qWnqu39zW+9rWzOfbYhwGYNesnHHrof2Tl7ft46dLPc9Mxi\/hfn3vLmP2IbNm9mc0A7gJOAJ5390mFdgO2F++XPF9BXCRCSe7vkQVz5wb56VIDA3DHHdGcb+XKN5gwYfzw\/be\/\/VqOOuqT4A6f+ARcd13wwLPPwrHHjnmcZoN4zZx4yUEPAn4CfMrdXwvidsDd3cyqRuslS5YMf53L5cjlco32S0RqqBxlrlkT74ULsurBB4P3Luz3KZ83JkwYud\/XN4QBLFwIV18dNH70o3D99dDTU\/HaPPl8vuVz1x2Jm9n+wL8Cv3D3rxbangRy7r7FzA4HViudIhKfuEeZWVT5QVcUZlolny8fMJ999k7GjeuFr3wFPve5oPGCC+DHP4b9GhozhzsSL6RKbgAeLwbwgp8BFwNXF\/69tdETiojEYXAwCNYf+ABs3z7SXlo50qr775\/Jrl3PDt8\/88wNHHDA0VCSpaCvL\/gkKR2iR6DeR8Mc4EPAI2a2rtB2BfBl4EdmdgmFEsPIeigioyxYEKRQSift0nzhgqQMDsJpp43+q6VVd901Hvc3hu+ffPKvmDSpvzx4A2zeDNOmhXPSOrRiUySjNLHZmDCqVJ588qNs2XLj8P1DD\/1PzJr142CC8rnnRp74wAPwrne11V9dFEJE2pLWD4d2+tXqa\/\/4x3\/k6ac\/UdaWyzn89V\/DihUjjT\/\/Ocyb13iHalAQF5GWxVlbneZ+vfLKWtatm1PWlss5HHAA7Nkz0vjtb8Mll4R6bgVxEWlZWqte4urXm2++zpo1bylry+Uc5syBtWtHGs88E+69N9yTF0RSJy4i0ukqywX7+oawefOgvyKepmxwqiAuIsPSWvUSZb8qg\/dZZ21mwoUfg\/6KraVSFryLlE4RkTKdOLFZTWXwnjXrpxz6rd\/DlVeWPzHmOKacuIhIDZXBe+rUCznh6Q\/AhReWPzGh+KWLQohIaiS5FWylfN5GBfDcxHWccOJPygO4+5gBPE3fT5FG4iISibSUKz766IVs2\/bTsrbc8VtGr6isE6\/i+n6UThGRVEi6XPFPf7qVxx6bX9aWO2t3UOtdamho9LL5KuL6flRiKCJdp3zS8yUmTJhc9niub6iwBWxJAN+xAw48ML5ORkRBXEQiEVe5YmmaY\/XqKrXePT2UTf9t3AhHHdXwsYsfDn196Sy\/VDpFRCITVbli6XG3bYNrrikP3t\/4xnp+fPMxo180d25T56jMgS9eDHfdFdyPqvxSOXER6Wi1Rt7XX7+MH\/zzovIXXHkllFxlrFFJ5fSVExeRjrZ8Odx+++gYl+uHHCUBvK8P2rjsWVZoJC4imVFZ5w1B8B4lhNiTVImk0ikikgnN5Mvvvvtg9u17rawtquBdKoktCBTERST1Gh3lbtr0NZ599pNlbXEE71aFEfQVxEUk9epNGu7Zs5l77z2i7PE0B28IL\/2ivVNEmpTG\/TC6WT5vZQG8r79KAK+xv0k1cfwfL18+EsAh+Lo4Ko+SqlOkq1WOntasScflyDpdtYVAixZZWTHJ6R+Dg\/5Q8cIWRt6d\/n+skbh0taRGT91ucDAIpAMDQa13acngYU\/NINdfEcCbHHmXiuv\/eMGC4MOoKK4VnRqJi0giJkwwFlWsywnSJhtGGlKU866n+MEUezWLJjalm6Vlu9Ru0lCtdyF2hFHtkbX\/Y1WniDQprZcj6zQNBe99+wq7DYYbfLP0f6wgLiKpsmHDUjZs+NuytlHBe9s2mDKlrCnp\/ciTor1TRCQVdu\/exH33TS9rGxW816yBOXPi61QHUhAXkdBVpk76+qGs5e\/+Dj772ZrHiGs\/8qxTOkVEQlMZvE\/9OBz8dEnD2WfDr3\/d8PGSymUnmUNXTlxEYlcZvKeshRMXVzypyRWWSQXRpKtZFMRFJDbNlAs2KukgmvSEqiY2RSRyUQTvorFWWKa5LDBJCuIi0rAog3daZG1CVekUEanrmWcu44UXvl7WFlXwTjqdUuyDJjYVxEUyb\/fuf+O++2aUtcUx8s7SCsuwhR7Ezew7wHuBF939xELbEuBjwJ8KT7vC3VdUvE5BXCTDRtV6\/xVY6a+0fr8jEUUQPxt4HfheSRC\/EnjN3a+p8ToFcZEMqgzesy+FQx4vadDvdaRCr05x97vNbEa1czXRLxFJucrgffCjcOplJQ0K3qnUTnXKZWb2YeC3wAJ3fzmkPolIjOpWnCh4p1pDE5uFkfhtJemUtzKSD\/8icLi7X1LxGqVTRFKsbvAu2RZW4hPLYh93f7HkhN8Gbqv2vCVLlgx\/ncvlyOVyrZxOREJUN3hv2QKHHRZfh7pcPp8nX3px0Sa1OhI\/3N03F76+HHiXu3+g4jUaiYukyFNP\/Q82b76+rK0seK9aBeeeG2+nZJTQR+JmdhPQB0w1s43AlUDOzE4BHFgPfLzF\/opIiSjqo3ftWs\/99\/+7sray4L1wIXzpS+2fSBKhxT4iKRHFSsWatd7Tp8Pzz7d+cImEVmyKZFSYu+dVBu9TLoOJj5Y06HcztbSLoUgXqwzef\/EsvOu\/lzQoeHccBXGRFFi5MrhWcE8PDA0Fbc3snqda7+6lIC6SsMpceE8PnHxyMNdYLx+u4C0K4iIJq7wIwtAQTJ1aO4AreEuRlmOJZMgTT1w8KoDn+ksCuHvDAXzlymAyde7c4GvJJlWniCSskdLCXbue4\/77jy17XTsj7zRceEGqU4mhSAo0u2in1vNr1nq3+DuW9MWAZWwqMZTM6bSruFSOctesqT\/KHRwc\/fioWu9Pw8SHC3daCN6l7\/O2bU2\/XFJKI3FJVCf+Wd\/sKLfyQ2zChPLg3fs8nHFx4U6Lv1OV7\/P48cG\/e\/cWztEB73un0EhcMqWyMmPXrqCtW4JJaXBdvbpGxUmb28JWvs9798Ls2UEVDHTGX0DdSkFcOkKaUjILFgQplNK\/LsZatLN8Odx+e43gvXkzTJsWST+nTlUOvBOoxFAStWBBEOSKmlmlWFQcza5aFdzmz2+8ZC6KMrvBwSA1MTAQ3MZKU+TzxqJFY5QL3n57kDoJKYCH8T5XozLF5CknLolrdxTdaqVFUvn4Rx+dz7Ztt5a1FUfe14\/7BG\/7+bci6UPYf6104nxGGqjEULpOq0E87jK7nTuf4YEHjitrK631njLZ+cxnYPHiaM4fNpUpRkMTm9J1mslBJ6VWrfeBvR70fTtcdRWcfrpGs9I45cQl88bKQdfL10aVJy6Vz1tZAD\/ps8Ho2xxwZ+6AV63OyYI43j+pT+kU6UiN5mujqmqpHHnv9wr8+wsKd0p+L7KekkhTVVCnUE5chOSCY83dBav8PmhyUCopJy6SgGaDd1ExFaTRrLRKI3HpSHGNcFsN3iJjUTpFpCDKfO3vfjeHV19dW9am4C1hUBAXidCOHY\/zm9\/MKmtT8JYwKScuqdCJVQtj1noreEuCNBKX0HVaxUVl8D5hEUy9FwVviUSzI3Et9pHQjbW9bNZULtSBIHUydc2+sgCe9CZQSZ9fkqV0ikiFMStONm4EP6qsvZWr+IQp6fNL8jQSl9BldTn2WCPv3NYfBiPvo44a9Zqk\/+pI+vySPI3EJXRZW8Ay5sj7fe8Dv3X0C1KgOHH84INJ9yTQiRPZWaGJTelaYdR6JzGJW3nOUklMInfaRHbSVCcuUkfYtd7VRqFRjkyr7QszeTKcdloyo+Csb+KVNqoTF6khilrvwcHywJnEZONppyloditNbEpXqJy0PGFRYV\/vIQ+93jvqyca0TRynrT\/dRiNx6WhjTlpmONWXtonjtPWn2ygnLrGJs4IhyeCtiT5phyY2JZUS3xo25p9FldxJq0IP4mb2HeC9wIvufmKhbTLwL8DRwAbgInd\/ueJ1CuIyLOoKhrQEb5F2RbF3yo3AeRVtC4FV7n4ccGfhvkjsHnlkXvVVlrnwJyxF0qihdIqZzQBuKxmJPwn0uftWM5sG5N39HRWv0UhchoWdTtm58ykeeKDsR04jb+kIcdWJH+buWwtfbwUOa\/E40iXCrGCoWus95KD4LV2o1ZH4S+4+qeTx7e4+ueI1Gol3sSgm9iqD90n\/Bybftw96tNxBOkdcI\/GtZjbN3beY2eHAi9WetGTJkuGvc7kcuVyuxdNJloS9YrEyePfsgfec9Ed44PA2eyqSvHw+Tz6fb\/n1rY7EvwL82d2vNrOFwER3X1jxGo3EUyTOkrewKlGqVpy8+v\/g\/PPb6J1IuoU+Ejezm4A+YKqZbQS+AHwZ+JGZXUKhxLC17kocsnbhgKrB+7v\/DW68MdLzqrZbskiLfbpA3LvMtVqJEnWtd60grVWWkhbaxVAS12wlykMPncPLL\/+qrG04eIc0Dqj318hYm1YpiEvaaVo\/IfUubhvmxW\/Tusvcjh1Pks9bWQCPaqGOLmMmHcvdI7kFh5ZqVqxw7+31QqQKvl6xovHHWz3nwEBwa+VYzby+kf6vXk3Zbcii\/XkZGBjpT\/E2MNBcn2tp9\/0VKSrEzsZjbTNPburACuJjqhdQ6j0et2YDXK3+VwbvbWfE83PSyPfQaiCO4kNXulezQVzpFKkrjFTEokVVriSfc6bcF8\/kdzFPPzAQ3KpNWg4OBpO9d9zRXC5cqRpJkiY2E7BgQTCxVloJUZqjrvd42pX2f\/Xq0ZPs\/f2eSPVH5WXURDqBSgwTUq8mOU01y62U31UrF+zvL\/956JSL6ao8UcKki0JIJBr9UKla653zjr8iepo+dCXbFMQlEQ\/\/0zRemr61rC2XG\/n\/12hVpDEK4hKrHbdcy28mfbqsrTR4l9JoVaQ+BXGJxwsvkH\/mqLKmvrPfwMZprlykHVp2L9Hat4\/83eU\/Nice+X2mzPxgQh0S6W4K4gnLUoqhctJynPdydv\/OhHojIqB0SqKyMtlXreJkzx7PzIePSJZEcbV7iUjYK\/3C3DQLguBdbZXlnj3O\/PlByeCqVcEHURjny4Kw32ORdimd0iHCvPDDWLXeRWnYtjWJNFTWLq4h3UEj8QSFuUVsGKP6x\/+2+sh7rJLBpBSDadx\/CWiPFEkjBfEENbIpUxx2HREE7xfPGWlbtixIm1ST9P7kCqYiIzSxOYYsVY1Ai5OkZuRXlze997372Lmzp+4xknx\/klrCn5WJaMk2LfYJQVZ\/WRsOrFWC9ymn5Lnoor7QgmOUQT7J\/5+sfbhL9iiIhyDpzZoiCxRVgndv70zOOONpILzvO44gq2AqnUpBPATVgtns2TB1avB1lEEjkgBYJXjD6D1Owjp30h+CIlmmZfchqLwow\/jx8NhjsHdvcD\/K0rJQy\/cmTSJ\/y8tQEcDHqjZp9ir1IpI8VadUUVk1MmvWSACHDFRDfOYzwUKdW14ua26kXLDaJcqaXeCSdPWKSDdROqUBcaYH2kpp\/PKXPHX7AJvPL29up8671f4oZy3SGuXEIxDVRN1Yga7pALh1K7tPnsZ9PyxvDmORjvLbIvFSEI9I2CPLUD4YhoZg3LhRk5Z9ffswCydTpiAuEi8F8Zi1GtzbDo5VKk5mz17LIYec1eABGpPVmnmRrFJ1SowS2RCpGLxLAvjBB5\/FqaeujeR0qlgRSTeNxNvQzmi66RFug7XeaaMJTpHmaCSeAcXA9o53BPenTq0R4KqMvCH9wRu0datIHDQSb0Mr+eKGX5PRkXcpTYqKNE8j8Ri1ki+uuyLTjGf+Bl7I4MhbROKnIN6mwcGQ0gNm7D4M7ksgeEeVt67cvkArN0XCp3RKzCrTKU7wV1OUtd7N9CfsEkJNbIo0R3XiGbByJQyeVz14R1HrXYvy1iLpEmtO3Mw2AK8C+4A33P0v2zleVzBjkNHB+6CDTuH009cl0iURya52\/153IOfus5MI4M3urtesq66CKVOC21VXtXmwmTOHK04qA\/iyZc6iRetiudhvpSh3HIz6\/0dE2kynmNl64HR3\/3OVxyJNp0Sdy73qKvj858vbli6FxYubPNAXvgBf\/GLVcsE9ezwVS9qjyFtrub5Ia2LNiZvZc8ArBOmUf3T360seizSIR53LnTIFtm8vb5s8Gf486uNqjCB4551w7rk1a707OR\/dyd+bSJTirhOf4+6bzexQYJWZPenudxcfXLJkyfATc7kcuVxu1AGyXr1QOeJ8+u6tbNg9jT98HDaq1ltE6sjn8+Tz+dYP4O6h3IArgQUl972eFSvce3vdIbj19gZtjWjktStWuA8MBLdGj1u0dOnIsYu3pUtHP29gIHishzfdwXcdiq9eXX4bqy\/tfP9p18nfm0iUCrGz8djbzJPLXggHAm8pfP0XwD3A3JLH63a2GABLbwMDjX+ztYJ0tSCydGlzQX3pUvfJk4NbZQAvnnvyZB8+SWXwHhoaGrMvpYG81Q+atOvk700kKs0G8ZZz4mZ2DHBL4e5+wA\/c\/Uslj3u9YzeTN2027VLt2D09wXUUoPmJttLz9\/UFE587d1Wv9d67dy1z547Ueis\/LCKNii0n7u7rgVNafT00viw7rN3wigEcmruKfOX571hlLGZ08F6\/\/hyOOOKXmcvri0h2JXq1+8qryo8VmMfaNKqWyvrnnja+0+L5HcMZu9b7Ix+pHsB19XcRiUriG2CFtoFUleOW7jBYTIG0shnTHauqp00A+vt9ODXTaF+yWIUjIumUib1Twlo40nQ5o40dvO+5x7nrriaOJSLSgI7dACvWevJC8H7+Injuf5Y\/tGyZK2iLSGQ6NojHohC8906CtT8tf2jPHq8buLO+cElEkqcgXsOYQdZG3q\/K1El\/\/xBgdVM42itERMKgID6GakH2tX29jNu7GxgdvK+77lFuumlWWVut2m7VgotIGJoN4omWGMbpiitGAvg\/8SF27jLG7d09qlzwiCMuJZdztm2bVf1AIiIpkniJYRQq0yYADz8MH+T7fJ\/\/ClSvOCndoKrZ60PqepIikoSOS6dUS5vMO\/oxbn7yBKB+8K48VjMTlZrYFJF2pSonPjAQHDvOgFaam34Lr\/IqhwDw2+vg9Znlz9XWsCKSNqnKia9aFdzmz4\/38lzGEI7xKofwYn8w+i4N4PPmOXv2KICLSPZFOhIPLsEZiK1So1Au+MZBcM9t5Q8tW9bYXwZRXa5MqRYRqSfuK\/ukR41a776+IcyM4oWFihfwhdEBtdqOiYsX09YS+7B2YRQRqRTLSDzShS81gvcZZ6ynt3dGWVu9RTlh70M+1jFVQy4i1aQqJ15vi9m2mJVtUFUawN\/+9n8gl\/NRARxa29a22j7kIiJpEGk6JZKRZo2R9\/77v5U5c7a2dfjKeu\/SUXhYx1QNuYiEJdV14qWTgcU9vaG5Wu9qx6y3x0m1S7GFuQ1uX197OXYR6VypqhNv59jFYFu8jiXAU5fD5vPLn9dKrXeSi3i0UZaI1NIxQfyxie9m1iv3AvDKO2HdN8ofT8NCnVaCuyY5RaSW7JcYfvrTcO21zAL2TYC7V5Q\/nIbgDSobFJF0SM8uhjfdFExaXnstEOS9SwP4vHlDNVdZFmu\/586NZ3VoK1UuoIsmi0i4kh+JP\/QQzJ49fLdy0vKaa7aze\/ekpi7IkOZRsS6aLCJhSm4DrI0b4W1vG75bGbxnz17DIYfMGb5fK\/+cRJ5ZE5QiEoVU5cSLgbVsZPzKKzBx4vBzHvwmvHb8yGtmzvwmRx5ZfnXiqEba7VSdaEQtImkQ2wZYg+e8yYo79x++v+HDsOEjI8+fPPk8TjrpF1WPVW+k3cqoWCNpEUmjVI3EA47TA3cG97afBo\/835FHx48\/kne\/e1NbZ2hlVDzWxKSCuIhkSaRBfCmLWcwyAPZOhLW3lD\/eaLlgI8vWBwcVgEWk+0QaxGce\/QZDG+HXd5a3N1vrHUX+WfuZiEgniDQn\/swzl7Np098PtxX39U4LXahBRNImVTnxnp4DAXjPe\/bQ0zM+ylO1RCkYEcm61O6dIiLSjVJ1UQgREYlWqoJ43PufiIhkXWrSKVp8IyISYzrFzM4zsyfN7Bkz+1yrxylqdVdAEZFu1lIQN7NxwNeB84B3Au83s+Nrv6p75fP5pLuQGnovRui9GKH3onWtjsT\/EnjW3Te4+xvAD4H3tdORTt5nWz+gI\/RejNB7MULvRetaDeJHAhtL7m8qtLWsuCpzYCC4KR8uIlJfq4t9IpkN1eIbEZHmtFSdYmZnAkvc\/bzC\/SuAIXe\/uuQ5WukjItKCyK92b2b7AU8B5wB\/BB4A3u\/uTzR9MBERaVlL6RR3f9PM\/gZYCYwDblAAFxGJX2SLfUREJHqRLLsPeyFQVpnZdDNbbWaPmdmjZvbJpPuUNDMbZ2brzOy2pPuSJDObaGY3m9kTZvZ4YZ6pK5nZ5YXfj9+b2T+b2YSk+xQXM\/uOmW01s9+XtE02s1Vm9rSZ3WFmE2sdI\/QgroVAZd4ALnf3WcCZwKVd\/F4UfQp4nIgqnDLkWuB2dz8eOAnoynSkmR0JXAac5u4nEqRn\/0uyvYrVjQSxstRCYJW7H0dwYcuFtQ4QxUg89IVAWeXuW9z9ocLXrxP8oh6RbK+SY2ZHAfOAbwPpuTpIzMzsEOBsd\/8OBHNM7v5Kwt1K0n7AgYWCiQOBFxLuT2zc\/W7gpYrm84HvFr7+LnBBrWNEEcRDXwjUCcxsBjAbuD\/ZniTq74H\/DQwl3ZGEHQP8ycxuNLPfmdn1ZnZg0p1Kgru\/ACwHnieodHvZ3X+ZbK8Sd5i7by18vRU4rNaTowji3f5n8ihmdhBwM\/Cpwoi865jZfwBedPd1dPEovGA\/4FTgm+5+KrCDOn8ydyozm0Qw8pxB8FfqQWb2wUQ7lSKFrWBrxtQogvgLwPSS+9MJRuNdycz2B34CfN\/db026Pwl6N3C+ma0HbgL+ysy+l3CfkrIJ2OTuvyncv5kgqHejc4H17v5nd38T+CnBz0o322pm0wDM7HDgxVpPjiKI\/xaYaWYzzGw88J+Bn0VwntSz4KrQNwCPu\/tXk+5Pktx9kbtPd\/djCCaufuXuH066X0lw9y3ARjM7rtB0LvBYgl1K0r8BZ5pZb+H35VyCie9u9jPg4sLXFwM1B3+hXyhZC4HKzAE+BDxiZusKbVe4+4oE+5QW3Z52uwz4QWGg8wfgIwn3JxHu\/oCZ3Qz8Dniz8O91yfYqPmZ2E9AHTDWzjcAXgC8DPzKzS4ANwEU1j6HFPiIi2ZWqa2yKiEhzFMRFRDJMQVxEJMMUxEVEMkxBXEQkwxTERUQyTEFcRCTDFMRFRDLs\/wNcRdV1y+TH9wAAAABJRU5ErkJggg==\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\"><\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h3>Additional Resources<\/h3>\n<p>You can grab a <a href=\"http:\/\/drsfenner.org\/public\/notebooks\/LinearRegression2.ipynb\">copy of this notebook<\/a>.<\/p>\n<p>Even better, you can <a href=\"http:\/\/nbviewer.ipython.org\/url\/drsfenner.org\/public\/notebooks\/LinearRegression2.ipynb\">view it using nbviewer<\/a>.<\/p>\n<h3>License<\/h3>\n<p>Unless otherwise noted, the contents of this notebook are under the following license. The code in the notebook should be considered part of the text (i.e., licensed and treated as as follows).<\/p>\n<p><a href=\"http:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/\" rel=\"license\"><img decoding=\"async\" style=\"border-width: 0;\" src=\"https:\/\/i.creativecommons.org\/l\/by-nc-sa\/4.0\/88x31.png\" alt=\"Creative Commons License\" \/><\/a><br \/>\nDrsFenner.org Blog And Notebooks by <a href=\"drsfenner.org\" rel=\"cc:attributionURL\">Mark and Barbara Fenner<\/a> is licensed under a <a href=\"http:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/\" rel=\"license\">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License<\/a>.<br \/>\nPermissions beyond the scope of this license may be available at <a href=\"drsfenner.org\/blog\/about-and-contacts\" rel=\"cc:morePermissions\">drsfenner.org\/blog\/about-and-contacts<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Before we diverged into an investigation of representation\/storage of Python variables \\(\\mathtt{X}\\) and \\(\\mathtt{Y}\\) (math variables \\(\\bf{X}\\) and \\(\\bf{Y}\\)), we had the following equation: \\[\\min RSS(\\beta)=(\\bf{y}-\\bf{X}\\beta)^T(\\bf{y}-\\bf{X}\\beta)\\] The question is, how do we solve it? Well, if you recall your calculus, you should remember (or I&#8217;ll remind you) that we can optimize (find the minima and [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,7],"tags":[],"class_list":["post-380","post","type-post","status-publish","format-standard","hentry","category-mrdr","category-sci-math-stat-python"],"_links":{"self":[{"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/posts\/380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/comments?post=380"}],"version-history":[{"count":4,"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/posts\/380\/revisions"}],"predecessor-version":[{"id":469,"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/posts\/380\/revisions\/469"}],"wp:attachment":[{"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/media?parent=380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/categories?post=380"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/tags?post=380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}