diff --git a/doc/HandWrittenNotes/NotesOctober23.pdf b/doc/HandWrittenNotes/NotesOctober23.pdf new file mode 100644 index 000000000..690e4b48b Binary files /dev/null and b/doc/HandWrittenNotes/NotesOctober23.pdf differ diff --git a/doc/pub/week43/ipynb/week43.ipynb b/doc/pub/week43/ipynb/week43.ipynb index 39efd2885..ec3fcba20 100644 --- a/doc/pub/week43/ipynb/week43.ipynb +++ b/doc/pub/week43/ipynb/week43.ipynb @@ -672,9 +672,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", @@ -839,9 +837,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -1095,9 +1091,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -1357,9 +1351,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Assume that all function definitions from the example program using Autograd\n", @@ -1560,9 +1552,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -1870,9 +1860,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -2295,9 +2283,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def sigmoid(z):\n", @@ -2396,9 +2382,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Set up the trial function:\n", @@ -2465,9 +2449,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -2825,9 +2807,7 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import autograd.numpy as np\n", @@ -3355,9 +3335,7 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Importing various packages\n", @@ -3388,9 +3366,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -3434,9 +3410,7 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -3465,11 +3439,39 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 1 2 3 4 5 6 7 \\\n", + "0 0.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "1 0.0 0.070063 0.069533 0.067085 0.068151 0.069193 0.057333 0.058540 \n", + "2 0.0 0.069533 0.069368 0.066521 0.067744 0.068951 0.056953 0.058268 \n", + "3 0.0 0.067085 0.066521 0.068521 0.069618 0.070705 0.061297 0.062609 \n", + "4 0.0 0.068151 0.067744 0.069618 0.070847 0.072071 0.062332 0.063755 \n", + "5 0.0 0.069193 0.068951 0.070705 0.072071 0.073435 0.063371 0.064907 \n", + "6 0.0 0.057333 0.056953 0.061297 0.062332 0.063371 0.056744 0.057998 \n", + "7 0.0 0.058540 0.058268 0.062609 0.063755 0.064907 0.057998 0.059350 \n", + "8 0.0 0.059802 0.059641 0.063981 0.065242 0.066511 0.059310 0.060763 \n", + "9 0.0 0.061119 0.061072 0.065414 0.066793 0.068183 0.060681 0.062239 \n", + "\n", + " 8 9 \n", + "0 0.000000 0.000000 \n", + "1 0.059802 0.061119 \n", + "2 0.059641 0.061072 \n", + "3 0.063981 0.065414 \n", + "4 0.065242 0.066793 \n", + "5 0.066511 0.068183 \n", + "6 0.059310 0.060681 \n", + "7 0.060763 0.062239 \n", + "8 0.062282 0.063866 \n", + "9 0.063866 0.065561 \n" + ] + } + ], "source": [ "# Common imports\n", "import numpy as np\n", @@ -3502,7 +3504,7 @@ "\n", "\n", "# Making meshgrid of datapoints and compute Franke's function\n", - "n = 4\n", + "n = 3\n", "N = 100\n", "x = np.sort(np.random.uniform(0, 1, N))\n", "y = np.sort(np.random.uniform(0, 1, N))\n", @@ -3763,10 +3765,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 21, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -3775,7 +3775,7 @@ "from IPython.display import display\n", "n = 10000\n", "mean = (-1, 2)\n", - "cov = [[4, 2], [2, 2]]\n", + "cov = [[3.0, 2.0], [2.0, 2.5]]\n", "X = np.random.multivariate_normal(mean, cov, n)" ] }, @@ -3827,10 +3827,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 22, + "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame(X)\n", @@ -3878,11 +3876,21 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 1\n", + "0 2.983691 1.981141\n", + "1 1.981141 2.466534\n", + "[[2.98369133 1.98114104]\n", + " [1.98114104 2.46653391]]\n" + ] + } + ], "source": [ "print(df.cov())\n", "print(np.cov(X_centered.T))" @@ -3898,11 +3906,31 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Centered covariance using own code\n", + "[[2.98369133 1.98114104]\n", + " [1.98114104 2.46653391]]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# extract the relevant columns from the centered design matrix of dim n x 2\n", "x = X_centered[:,0]\n", @@ -3968,11 +3996,25 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eigenvalues of Covariance matrix\n", + "4.723057254133826\n", + "0.7271679895800756\n", + "First eigenvector\n", + "[0.75147267 0.65976422]\n", + "Second eigenvector\n", + "[-0.65976422 0.75147267]\n", + "Eigenvector of largest eigenvalue\n", + "[-0.75147267 -0.65976422]\n" + ] + } + ], "source": [ "# diagonalize and obtain eigenvalues, not necessarily sorted\n", "EigValues, EigVectors = np.linalg.eig(Cov)\n", @@ -4288,9 +4330,7 @@ { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -4335,9 +4375,7 @@ { "cell_type": "code", "execution_count": 21, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "W2 = V.T[:, :2]\n", @@ -4359,9 +4397,7 @@ { "cell_type": "code", "execution_count": 22, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "#thereafter we do a PCA with Scikit-learn\n", @@ -4383,9 +4419,7 @@ { "cell_type": "code", "execution_count": 23, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "pca.components_.T[:, 0]" @@ -4406,11 +4440,33 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train set accuracy from Logistic Regression: 0.95\n", + "Train set accuracy scaled data: 0.99\n", + "Train set accuracy scaled and PCA data: 0.96\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/MortenImac/anaconda3/lib/python3.6/site-packages/sklearn/linear_model/_logistic.py:762: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)\n" + ] + } + ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -4461,9 +4517,7 @@ { "cell_type": "code", "execution_count": 25, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "pca = PCA()\n", @@ -4484,9 +4538,7 @@ { "cell_type": "code", "execution_count": 26, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "pca = PCA(n_components=0.95)\n", @@ -4531,9 +4583,7 @@ { "cell_type": "code", "execution_count": 27, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.decomposition import KernelPCA\n", @@ -4571,7 +4621,25 @@ ] } ], - "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.6.8" + } + }, "nbformat": 4, "nbformat_minor": 4 }