diff --git a/doc/pub/LogReg/ipynb/LogReg.ipynb b/doc/pub/LogReg/ipynb/LogReg.ipynb index d2044aef2..a88ce2307 100644 --- a/doc/pub/LogReg/ipynb/LogReg.ipynb +++ b/doc/pub/LogReg/ipynb/LogReg.ipynb @@ -173,10 +173,39 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "%matplotlib inline\n", "\n", @@ -598,9 +627,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -659,10 +686,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", @@ -760,10 +785,36 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(15000,) (15000, 2)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:424: MatplotlibDeprecationWarning: \n", + "Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n", + " warn_deprecated(\"2.2\", \"Passing one of 'on', 'true', 'off', 'false' as a \"\n", + "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:97: DeprecationWarning: object of type cannot be safely interpreted as an integer.\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "\n", "# \"refit\" gives the metric used deciding best model. \n", @@ -811,11 +862,11 @@ " AUC = roc_auc_score(yTrain, yPredTrain)\n", " confusionArray[2] = AUC\n", " \n", - " if printOut:\n", - " print('\\n################### Training ###############')\n", - " print('\\nTraining Confusion matrix: \\n', cm)\n", - " print('\\nTraining Accuracy score: \\n', accScore)\n", - " print('\\nTrain AUC: \\n', AUC)\n", + " \n", + " print('\\n################### Training ###############')\n", + " print('\\nTraining Confusion matrix: \\n', cm)\n", + " print('\\nTraining Accuracy score: \\n', accScore)\n", + " print('\\nTrain AUC: \\n', AUC)\n", " \n", " # Test\n", " yPred = method.predict(XTest)\n", @@ -831,11 +882,11 @@ " AUC = roc_auc_score(yTest, yPred)\n", " confusionArray[5] = AUC\n", " \n", - " if printOut:\n", - " print('\\n################### Testing ###############')\n", - " print('\\nTest Confusion matrix: \\n', cm)\n", - " print('\\nTest Accuracy score: \\n', accScore)\n", - " print('\\nTestAUC: \\n', AUC) \n", + " \n", + " print('\\n################### Testing ###############')\n", + " print('\\nTest Confusion matrix: \\n', cm)\n", + " print('\\nTest Accuracy score: \\n', accScore)\n", + " print('\\nTestAUC: \\n', AUC) \n", " \n", " return confusionArray\n", "\n", @@ -872,9 +923,34 @@ "\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], - "metadata": {}, + "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.7.4" + } + }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/doc/pub/Splines/html/._Splines-bs000.html b/doc/pub/Splines/html/._Splines-bs000.html index b905e18e2..194d431e7 100644 --- a/doc/pub/Splines/html/._Splines-bs000.html +++ b/doc/pub/Splines/html/._Splines-bs000.html @@ -292,7 +292,7 @@ MathJax.Hub.Config({
[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Sep 19, 2019

+

Sep 20, 2019


diff --git a/doc/pub/Splines/html/._Splines-bs023.html b/doc/pub/Splines/html/._Splines-bs023.html index 339e17063..700efc72e 100644 --- a/doc/pub/Splines/html/._Splines-bs023.html +++ b/doc/pub/Splines/html/._Splines-bs023.html @@ -289,28 +289,7 @@ when \( ||\nabla_\beta C(\beta_k) || \leq \epsilon = 10^{-8} \).

And finally we can compare our solution for \( \beta \) with the analytic result given by \( \beta= (X^TX)^{-1} X^T \mathbf{y} \). -

- -

import numpy as np
-
-"""
-The following setup is just a suggestion, feel free to write it the way you like.
-"""
-
-#Setup problem described in the exercise
-N  = 100 #Nr of datapoints
-M  = 2 #Nr of features
-x  = np.random.rand(N) #Uniformly generated x-values in [0,1]
-y  = 5*x**2 + 0.1*np.random.randn(N)
-X  = np.c_[np.ones(N),x] #Construct design matrix
-
-#Compute beta according to normal equations to compare with GD solution
-Xt_X_inv = np.linalg.inv(np.dot(X.T,X))
-Xt_y     = np.dot(X.transpose(),y)
-beta_NE = np.dot(Xt_X_inv,Xt_y)
-print(beta_NE)
-

diff --git a/doc/pub/Splines/html/._Splines-bs024.html b/doc/pub/Splines/html/._Splines-bs024.html index 347e15e3a..9a7a5b592 100644 --- a/doc/pub/Splines/html/._Splines-bs024.html +++ b/doc/pub/Splines/html/._Splines-bs024.html @@ -289,17 +289,18 @@ Another simple example is here from matplotlib.ticker import LinearLocator, FormatStrFormatter import sys -x = 2*np.random.rand(100,1) -y = 4+3*x+np.random.randn(100,1) +# the number of datapoints +m = 100 +x = 2*np.random.rand(m,1) +y = 4+3*x+np.random.randn(m,1) -xb = np.c_[np.ones((100,1)), x] +xb = np.c_[np.ones((m,1)), x] beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) print(beta_linreg) beta = np.random.randn(2,1) eta = 0.1 Niterations = 1000 -m = 100 for iter in range(Niterations): gradients = 2.0/m*xb.T.dot(xb.dot(beta)-y) diff --git a/doc/pub/Splines/html/._Splines-bs026.html b/doc/pub/Splines/html/._Splines-bs026.html index 167070dc1..242b2d297 100644 --- a/doc/pub/Splines/html/._Splines-bs026.html +++ b/doc/pub/Splines/html/._Splines-bs026.html @@ -290,43 +290,11 @@ $$ $$

-We can now extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by +We can easily extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by $$ -\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}, +\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}. $$ -for \( \lambda = {0,1,10,50,100} \) (\( \lambda = 0 \) corresponds to ordinary least squares). -We can then compute \( ||\beta_{\text{ridge}}|| \) for each \( \lambda \). - -

- - -

import numpy as np
-
-"""
-The following setup is just a suggestion, feel free to write it the way you like.
-"""
-
-#Setup problem described in the exercise
-N  = 100 #Nr of datapoints
-M  = 2   #Nr of features
-x  = np.random.rand(N)
-y  = 5*x**2 + 0.1*np.random.randn(N)
-
-
-#Compute analytic beta for Ridge regression 
-X    = np.c_[np.ones(N),x]
-XT_X = np.dot(X.T,X)
-
-l  = 0.1 #Ridge parameter lambda
-Id = np.eye(XT_X.shape[0])
-
-Z = np.linalg.inv(XT_X+l*Id)
-beta_ridge = np.dot(Z,np.dot(X.T,y))
-
-print(beta_ridge)
-print(np.linalg.norm(beta_ridge)) #||beta||
-

diff --git a/doc/pub/Splines/html/Splines-bs.html b/doc/pub/Splines/html/Splines-bs.html index b905e18e2..194d431e7 100644 --- a/doc/pub/Splines/html/Splines-bs.html +++ b/doc/pub/Splines/html/Splines-bs.html @@ -292,7 +292,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Sep 19, 2019

+

Sep 20, 2019


diff --git a/doc/pub/Splines/html/Splines-reveal.html b/doc/pub/Splines/html/Splines-reveal.html index 85d3f9ad3..552605c8e 100644 --- a/doc/pub/Splines/html/Splines-reveal.html +++ b/doc/pub/Splines/html/Splines-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

 
-

Sep 19, 2019

+

Sep 20, 2019


@@ -747,28 +747,6 @@ when \( ||\nabla_\beta C(\beta_k) || \leq \epsilon = 10^{-8} \).

And finally we can compare our solution for \( \beta \) with the analytic result given by \( \beta= (X^TX)^{-1} X^T \mathbf{y} \). -

- - -

import numpy as np
-
-"""
-The following setup is just a suggestion, feel free to write it the way you like.
-"""
-
-#Setup problem described in the exercise
-N  = 100 #Nr of datapoints
-M  = 2 #Nr of features
-x  = np.random.rand(N) #Uniformly generated x-values in [0,1]
-y  = 5*x**2 + 0.1*np.random.randn(N)
-X  = np.c_[np.ones(N),x] #Construct design matrix
-
-#Compute beta according to normal equations to compare with GD solution
-Xt_X_inv = np.linalg.inv(np.dot(X.T,X))
-Xt_y     = np.dot(X.transpose(),y)
-beta_NE = np.dot(Xt_X_inv,Xt_y)
-print(beta_NE)
-
@@ -789,17 +767,18 @@ Another simple example is here from matplotlib.ticker import LinearLocator, FormatStrFormatter import sys -x = 2*np.random.rand(100,1) -y = 4+3*x+np.random.randn(100,1) +# the number of datapoints +m = 100 +x = 2*np.random.rand(m,1) +y = 4+3*x+np.random.randn(m,1) -xb = np.c_[np.ones((100,1)), x] +xb = np.c_[np.ones((m,1)), x] beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) print(beta_linreg) beta = np.random.randn(2,1) eta = 0.1 Niterations = 1000 -m = 100 for iter in range(Niterations): gradients = 2.0/m*xb.T.dot(xb.dot(beta)-y) @@ -869,45 +848,12 @@ $$

 

-We can now extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by +We can easily extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by

 
$$ -\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}, +\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}. $$

 
- -for \( \lambda = {0,1,10,50,100} \) (\( \lambda = 0 \) corresponds to ordinary least squares). -We can then compute \( ||\beta_{\text{ridge}}|| \) for each \( \lambda \). - -

- - -

import numpy as np
-
-"""
-The following setup is just a suggestion, feel free to write it the way you like.
-"""
-
-#Setup problem described in the exercise
-N  = 100 #Nr of datapoints
-M  = 2   #Nr of features
-x  = np.random.rand(N)
-y  = 5*x**2 + 0.1*np.random.randn(N)
-
-
-#Compute analytic beta for Ridge regression 
-X    = np.c_[np.ones(N),x]
-XT_X = np.dot(X.T,X)
-
-l  = 0.1 #Ridge parameter lambda
-Id = np.eye(XT_X.shape[0])
-
-Z = np.linalg.inv(XT_X+l*Id)
-beta_ridge = np.dot(Z,np.dot(X.T,y))
-
-print(beta_ridge)
-print(np.linalg.norm(beta_ridge)) #||beta||
-
diff --git a/doc/pub/Splines/html/Splines-solarized.html b/doc/pub/Splines/html/Splines-solarized.html index ca6b66717..07b501567 100644 --- a/doc/pub/Splines/html/Splines-solarized.html +++ b/doc/pub/Splines/html/Splines-solarized.html @@ -210,7 +210,7 @@ MathJax.Hub.Config({
[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Sep 19, 2019

+

Sep 20, 2019












@@ -753,28 +753,7 @@ when \( ||\nabla_\beta C(\beta_k) || \leq \epsilon = 10^{-8} \).

And finally we can compare our solution for \( \beta \) with the analytic result given by \( \beta= (X^TX)^{-1} X^T \mathbf{y} \). -

- -

import numpy as np
-
-"""
-The following setup is just a suggestion, feel free to write it the way you like.
-"""
-
-#Setup problem described in the exercise
-N  = 100 #Nr of datapoints
-M  = 2 #Nr of features
-x  = np.random.rand(N) #Uniformly generated x-values in [0,1]
-y  = 5*x**2 + 0.1*np.random.randn(N)
-X  = np.c_[np.ones(N),x] #Construct design matrix
-
-#Compute beta according to normal equations to compare with GD solution
-Xt_X_inv = np.linalg.inv(np.dot(X.T,X))
-Xt_y     = np.dot(X.transpose(),y)
-beta_NE = np.dot(Xt_X_inv,Xt_y)
-print(beta_NE)
-











@@ -794,17 +773,18 @@ Another simple example is here from matplotlib.ticker import LinearLocator, FormatStrFormatter import sys -x = 2*np.random.rand(100,1) -y = 4+3*x+np.random.randn(100,1) +# the number of datapoints +m = 100 +x = 2*np.random.rand(m,1) +y = 4+3*x+np.random.randn(m,1) -xb = np.c_[np.ones((100,1)), x] +xb = np.c_[np.ones((m,1)), x] beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) print(beta_linreg) beta = np.random.randn(2,1) eta = 0.1 Niterations = 1000 -m = 100 for iter in range(Niterations): gradients = 2.0/m*xb.T.dot(xb.dot(beta)-y) @@ -868,43 +848,11 @@ $$ $$

-We can now extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by +We can easily extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by $$ -\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}, +\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}. $$ -for \( \lambda = {0,1,10,50,100} \) (\( \lambda = 0 \) corresponds to ordinary least squares). -We can then compute \( ||\beta_{\text{ridge}}|| \) for each \( \lambda \). - -

- - -

import numpy as np
-
-"""
-The following setup is just a suggestion, feel free to write it the way you like.
-"""
-
-#Setup problem described in the exercise
-N  = 100 #Nr of datapoints
-M  = 2   #Nr of features
-x  = np.random.rand(N)
-y  = 5*x**2 + 0.1*np.random.randn(N)
-
-
-#Compute analytic beta for Ridge regression 
-X    = np.c_[np.ones(N),x]
-XT_X = np.dot(X.T,X)
-
-l  = 0.1 #Ridge parameter lambda
-Id = np.eye(XT_X.shape[0])
-
-Z = np.linalg.inv(XT_X+l*Id)
-beta_ridge = np.dot(Z,np.dot(X.T,y))
-
-print(beta_ridge)
-print(np.linalg.norm(beta_ridge)) #||beta||
-











diff --git a/doc/pub/Splines/html/Splines.html b/doc/pub/Splines/html/Splines.html index 299f5c123..cc907470e 100644 --- a/doc/pub/Splines/html/Splines.html +++ b/doc/pub/Splines/html/Splines.html @@ -215,7 +215,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Sep 19, 2019

+

Sep 20, 2019












@@ -758,28 +758,7 @@ when \( ||\nabla_\beta C(\beta_k) || \leq \epsilon = 10^{-8} \).

And finally we can compare our solution for \( \beta \) with the analytic result given by \( \beta= (X^TX)^{-1} X^T \mathbf{y} \). -

- -

import numpy as np
-
-"""
-The following setup is just a suggestion, feel free to write it the way you like.
-"""
-
-#Setup problem described in the exercise
-N  = 100 #Nr of datapoints
-M  = 2 #Nr of features
-x  = np.random.rand(N) #Uniformly generated x-values in [0,1]
-y  = 5*x**2 + 0.1*np.random.randn(N)
-X  = np.c_[np.ones(N),x] #Construct design matrix
-
-#Compute beta according to normal equations to compare with GD solution
-Xt_X_inv = np.linalg.inv(np.dot(X.T,X))
-Xt_y     = np.dot(X.transpose(),y)
-beta_NE = np.dot(Xt_X_inv,Xt_y)
-print(beta_NE)
-











@@ -799,17 +778,18 @@ Another simple example is here from matplotlib.ticker import LinearLocator, FormatStrFormatter import sys -x = 2*np.random.rand(100,1) -y = 4+3*x+np.random.randn(100,1) +# the number of datapoints +m = 100 +x = 2*np.random.rand(m,1) +y = 4+3*x+np.random.randn(m,1) -xb = np.c_[np.ones((100,1)), x] +xb = np.c_[np.ones((m,1)), x] beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) print(beta_linreg) beta = np.random.randn(2,1) eta = 0.1 Niterations = 1000 -m = 100 for iter in range(Niterations): gradients = 2.0/m*xb.T.dot(xb.dot(beta)-y) @@ -873,43 +853,11 @@ $$ $$

-We can now extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by +We can easily extend our program to minimize \( C_{\text{ridge}}(\beta) \) using gradient descent and compare with the analytical solution given by $$ -\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}, +\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}. $$ -for \( \lambda = {0,1,10,50,100} \) (\( \lambda = 0 \) corresponds to ordinary least squares). -We can then compute \( ||\beta_{\text{ridge}}|| \) for each \( \lambda \). - -

- - -

import numpy as np
-
-"""
-The following setup is just a suggestion, feel free to write it the way you like.
-"""
-
-#Setup problem described in the exercise
-N  = 100 #Nr of datapoints
-M  = 2   #Nr of features
-x  = np.random.rand(N)
-y  = 5*x**2 + 0.1*np.random.randn(N)
-
-
-#Compute analytic beta for Ridge regression 
-X    = np.c_[np.ones(N),x]
-XT_X = np.dot(X.T,X)
-
-l  = 0.1 #Ridge parameter lambda
-Id = np.eye(XT_X.shape[0])
-
-Z = np.linalg.inv(XT_X+l*Id)
-beta_ridge = np.dot(Z,np.dot(X.T,y))
-
-print(beta_ridge)
-print(np.linalg.norm(beta_ridge)) #||beta||
-











diff --git a/doc/pub/Splines/ipynb/Splines.ipynb b/doc/pub/Splines/ipynb/Splines.ipynb index e10b6347f..7e2249c4f 100644 --- a/doc/pub/Splines/ipynb/Splines.ipynb +++ b/doc/pub/Splines/ipynb/Splines.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Sep 19, 2019**\n", + "Date: **Sep 20, 2019**\n", "\n", "Copyright 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -717,41 +717,8 @@ "when $||\\nabla_\\beta C(\\beta_k) || \\leq \\epsilon = 10^{-8}$. \n", "\n", "And finally we can compare our solution for $\\beta$ with the analytic result given by \n", - "$\\beta= (X^TX)^{-1} X^T \\mathbf{y}$." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import numpy as np\n", + "$\\beta= (X^TX)^{-1} X^T \\mathbf{y}$.\n", "\n", - "\"\"\"\n", - "The following setup is just a suggestion, feel free to write it the way you like.\n", - "\"\"\"\n", - "\n", - "#Setup problem described in the exercise\n", - "N = 100 #Nr of datapoints\n", - "M = 2 #Nr of features\n", - "x = np.random.rand(N) #Uniformly generated x-values in [0,1]\n", - "y = 5*x**2 + 0.1*np.random.randn(N)\n", - "X = np.c_[np.ones(N),x] #Construct design matrix\n", - "\n", - "#Compute beta according to normal equations to compare with GD solution\n", - "Xt_X_inv = np.linalg.inv(np.dot(X.T,X))\n", - "Xt_y = np.dot(X.transpose(),y)\n", - "beta_NE = np.dot(Xt_X_inv,Xt_y)\n", - "print(beta_NE)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ "## Gradient Descent Example\n", "\n", "Another simple example is here" @@ -759,7 +726,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "collapsed": false }, @@ -777,17 +744,18 @@ "from matplotlib.ticker import LinearLocator, FormatStrFormatter\n", "import sys\n", "\n", - "x = 2*np.random.rand(100,1)\n", - "y = 4+3*x+np.random.randn(100,1)\n", + "# the number of datapoints\n", + "m = 100\n", + "x = 2*np.random.rand(m,1)\n", + "y = 4+3*x+np.random.randn(m,1)\n", "\n", - "xb = np.c_[np.ones((100,1)), x]\n", + "xb = np.c_[np.ones((m,1)), x]\n", "beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)\n", "print(beta_linreg)\n", "beta = np.random.randn(2,1)\n", "\n", "eta = 0.1\n", "Niterations = 1000\n", - "m = 100\n", "\n", "for iter in range(Niterations):\n", " gradients = 2.0/m*xb.T.dot(xb.dot(beta)-y)\n", @@ -817,7 +785,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "collapsed": false }, @@ -881,7 +849,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can now extend our program to minimize $C_{\\text{ridge}}(\\beta)$ using gradient descent and compare with the analytical solution given by" + "We can easily extend our program to minimize $C_{\\text{ridge}}(\\beta)$ using gradient descent and compare with the analytical solution given by" ] }, { @@ -889,53 +857,10 @@ "metadata": {}, "source": [ "$$\n", - "\\beta_{\\text{ridge}} = \\left(X^T X + \\lambda I_{2 \\times 2} \\right)^{-1} X^T \\mathbf{y},\n", + "\\beta_{\\text{ridge}} = \\left(X^T X + \\lambda I_{2 \\times 2} \\right)^{-1} X^T \\mathbf{y}.\n", "$$" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "for $\\lambda = {0,1,10,50,100}$ ($\\lambda = 0$ corresponds to ordinary least squares). \n", - "We can then compute $||\\beta_{\\text{ridge}}||$ for each $\\lambda$." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "\"\"\"\n", - "The following setup is just a suggestion, feel free to write it the way you like.\n", - "\"\"\"\n", - "\n", - "#Setup problem described in the exercise\n", - "N = 100 #Nr of datapoints\n", - "M = 2 #Nr of features\n", - "x = np.random.rand(N)\n", - "y = 5*x**2 + 0.1*np.random.randn(N)\n", - "\n", - "\n", - "#Compute analytic beta for Ridge regression \n", - "X = np.c_[np.ones(N),x]\n", - "XT_X = np.dot(X.T,X)\n", - "\n", - "l = 0.1 #Ridge parameter lambda\n", - "Id = np.eye(XT_X.shape[0])\n", - "\n", - "Z = np.linalg.inv(XT_X+l*Id)\n", - "beta_ridge = np.dot(Z,np.dot(X.T,y))\n", - "\n", - "print(beta_ridge)\n", - "print(np.linalg.norm(beta_ridge)) #||beta||" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1051,7 +976,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -1115,7 +1040,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -1156,7 +1081,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -1633,7 +1558,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -1691,7 +1616,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -1729,7 +1654,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -1782,7 +1707,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -1824,7 +1749,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -1858,7 +1783,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -1892,7 +1817,7 @@ "metadata": {}, "source": [ "1\n", - "3\n", + "1\n", " \n", "<\n", "<\n", @@ -1920,7 +1845,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -1946,7 +1871,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -1995,7 +1920,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -2025,7 +1950,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -2055,7 +1980,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -2087,7 +2012,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -2410,7 +2335,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -2447,7 +2372,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -2467,7 +2392,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -2486,7 +2411,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -2510,7 +2435,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": { "collapsed": false }, diff --git a/doc/pub/Splines/ipynb/ipynb-Splines-src.tar.gz b/doc/pub/Splines/ipynb/ipynb-Splines-src.tar.gz index bb6264407..cbe76abfd 100644 Binary files a/doc/pub/Splines/ipynb/ipynb-Splines-src.tar.gz and b/doc/pub/Splines/ipynb/ipynb-Splines-src.tar.gz differ diff --git a/doc/pub/Splines/pdf/Splines-minted.pdf b/doc/pub/Splines/pdf/Splines-minted.pdf index 5cdef0cb8..ecefce224 100644 Binary files a/doc/pub/Splines/pdf/Splines-minted.pdf and b/doc/pub/Splines/pdf/Splines-minted.pdf differ diff --git a/doc/src/Splines/Splines.do.txt b/doc/src/Splines/Splines.do.txt index 7d4905b55..7a492a207 100644 --- a/doc/src/Splines/Splines.do.txt +++ b/doc/src/Splines/Splines.do.txt @@ -478,26 +478,6 @@ when $||\nabla_\beta C(\beta_k) || \leq \epsilon = 10^{-8}$. And finally we can compare our solution for $\beta$ with the analytic result given by $\beta= (X^TX)^{-1} X^T \mathbf{y}$. -!bc pycod -import numpy as np - -""" -The following setup is just a suggestion, feel free to write it the way you like. -""" - -#Setup problem described in the exercise -N = 100 #Nr of datapoints -M = 2 #Nr of features -x = np.random.rand(N) #Uniformly generated x-values in [0,1] -y = 5*x**2 + 0.1*np.random.randn(N) -X = np.c_[np.ones(N),x] #Construct design matrix - -#Compute beta according to normal equations to compare with GD solution -Xt_X_inv = np.linalg.inv(np.dot(X.T,X)) -Xt_y = np.dot(X.transpose(),y) -beta_NE = np.dot(Xt_X_inv,Xt_y) -print(beta_NE) -!ec !split ===== Gradient Descent Example ===== @@ -514,17 +494,18 @@ from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import sys -x = 2*np.random.rand(100,1) -y = 4+3*x+np.random.randn(100,1) +# the number of datapoints +m = 100 +x = 2*np.random.rand(m,1) +y = 4+3*x+np.random.randn(m,1) -xb = np.c_[np.ones((100,1)), x] +xb = np.c_[np.ones((m,1)), x] beta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) print(beta_linreg) beta = np.random.randn(2,1) eta = 0.1 Niterations = 1000 -m = 100 for iter in range(Niterations): gradients = 2.0/m*xb.T.dot(xb.dot(beta)-y) @@ -589,42 +570,13 @@ In order to minimize $C_{\text{ridge}}(\beta)$ using GD we only have adjust the \] !et -We can now extend our program to minimize $C_{\text{ridge}}(\beta)$ using gradient descent and compare with the analytical solution given by +We can easily extend our program to minimize $C_{\text{ridge}}(\beta)$ using gradient descent and compare with the analytical solution given by !bt \[ -\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}, +\beta_{\text{ridge}} = \left(X^T X + \lambda I_{2 \times 2} \right)^{-1} X^T \mathbf{y}. \] !et -for $\lambda = {0,1,10,50,100}$ ($\lambda = 0$ corresponds to ordinary least squares). -We can then compute $||\beta_{\text{ridge}}||$ for each $\lambda$. -!bc pycod -import numpy as np - -""" -The following setup is just a suggestion, feel free to write it the way you like. -""" - -#Setup problem described in the exercise -N = 100 #Nr of datapoints -M = 2 #Nr of features -x = np.random.rand(N) -y = 5*x**2 + 0.1*np.random.randn(N) - - -#Compute analytic beta for Ridge regression -X = np.c_[np.ones(N),x] -XT_X = np.dot(X.T,X) - -l = 0.1 #Ridge parameter lambda -Id = np.eye(XT_X.shape[0]) - -Z = np.linalg.inv(XT_X+l*Id) -beta_ridge = np.dot(Z,np.dot(X.T,y)) - -print(beta_ridge) -print(np.linalg.norm(beta_ridge)) #||beta|| -!ec !split ===== Stochastic Gradient Descent =====