{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# LIS '16 – Python tutorial" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "from __future__ import print_function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Matrix operations, plotting, and linear regression" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Provides Matlab-style matrix operations\n", "import numpy as np\n", "# Provides Matlab-style plotting\n", "import matplotlib.pylab as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Vectors and matrices in NumPy" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x = [ 1 -1]\n", "A = \n", " [[1 2]\n", " [3 4]\n", " [5 6]]\n" ] } ], "source": [ "x = np.array([1, -1])\n", "A = np.array([\n", " [1, 2],\n", " [3, 4],\n", " [5, 6]])\n", "print('x = ', x)\n", "print('A = \\n', A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The shape is (rows, cols)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shape of A: (3, 2)\n" ] } ], "source": [ "print('Shape of A:', A.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can easily scale the matrix, or add a constant to it." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5*A = \n", " [[ 5 10]\n", " [15 20]\n", " [25 30]]\n", "2 + A = \n", " [[3 4]\n", " [5 6]\n", " [7 8]]\n" ] } ], "source": [ "print('5*A = \\n', 5*A)\n", "print('2 + A = \\n', 2 + A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All other binary operations are also element-wise." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A**2=\n", " [[ 1 4]\n", " [ 9 16]\n", " [25 36]]\n" ] } ], "source": [ "print('A**2=\\n', A**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can take the transpose as follows." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Transpose of A:\n", " [[1 3 5]\n", " [2 4 6]]\n" ] } ], "source": [ "print('Transpose of A:\\n', A.T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can multiply matrices and vectors." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A*x=\n", " [-1 -1 -1]\n" ] } ], "source": [ "print('A*x=\\n', A.dot(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The multiplication operator performs element-wise multiplication." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A*B\n", " [[ 1 -2]\n", " [ 6 -8]\n", " [ 15 -18]]\n" ] } ], "source": [ "B = np.array([\n", " [1, -1],\n", " [2, -2],\n", " [3, -3]])\n", "print('A*B\\n', A*B)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Be careful with slicing!" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[4 8]\n" ] } ], "source": [ "T = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n", "print(T[[1, 2], [0, 1]])" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[4 5]\n", " [7 8]]\n" ] } ], "source": [ "print(T[[[1], [2]], [0, 1]])" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[4 5]\n", " [7 8]]\n" ] } ], "source": [ "print(T[[1, 2]][:, [0, 1]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can compute the SVD as follows." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Singular values of A: [ 9.52551809 0.51430058]\n" ] } ], "source": [ "U, S, V = np.linalg.svd(A)\n", "print('Singular values of A:', S)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can solve a linear system as follows." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Solution of linear system: [-2.33333333 2.66666667]\n" ] } ], "source": [ "C = np.array([\n", " [1, 2],\n", " [4, 5]])\n", "print('Solution of linear system:', np.linalg.solve(C, np.array([3, 4])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For over-determined system, we have to solve least squares problem. The function lstsq returns also some other values (see documentation)." ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Least squares solution: [ -2.42039096e+15 -2.42039096e+15]\n" ] } ], "source": [ "x = np.linalg.lstsq(B, np.array([3, 4, 1]))[0]\n", "print('Least squares solution:', x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEACAYAAABbMHZzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXd4VMX6xz+TSu9J6AktoYQiIEU60gJpQIAgRUV+9nav\nXrECelVEr72BFRAFpIfeQ5UivYSE3gktdNLn98dJEIVAsjm7s3syn+fZx2RzzsyX9ez3zLxn5n2F\nlBKNRqPRFCzcVAvQaDQajePR5q/RaDQFEG3+Go1GUwDR5q/RaDQFEG3+Go1GUwDR5q/RaDQFEFPM\nXwjxoxAiUQix4y7HfCGE2CeE2CaEaGRGvxqNRqOxDbNG/j8DXXP6oxAiBKghpawFPAGMMalfjUaj\n0diAKeYvpVwDJN3lkAhgQtaxG4CSQgg/M/rWaDQaTd5xVMy/EnDslt9PZL2n0Wg0GgXoB74ajUZT\nAPFwUD8ngCq3/F45673bEELoZEMajUaTR6SUIi/HmznyF1mvOxEDDAYQQrQALkopE3NqSEqJlJIL\n1y8wfPlwyo4uy5NznuR66vWbf3OW19mzkt69JXXrSubMkaSm3v34hARJr16S2rUla9fe/dgRI0Yo\n//c5w0t/Drd/FqsOr6Lx2Ma0+KEF64+tv+s5aRlpTN8znVY/tqLJ2CYcvHBQ+b/jn6+MDMno0RIf\nH8lbb0mOH7/78deuSdq2HUGZMpL//ldy44b6f4PKly2YtdTzN2AdECiEOCqEeFQI8YQQ4vEsM58P\nHBJC7AfGAk/npt3ShUvzdoe3SXgugYspF2k/vj2nrpwyQ7IpzJ0LDRpAtWqweTOEhoKn593PqVUL\npk+H//4XeveGf/0L0tMdo1djDT7941Oip0fzcsuXWTdkHc0rN7/r8R5uHvSq04vVj65mYIOBNP+h\nOXPi5zhI7b05fx7Cw2HWLPjzT3jnHah0jyeCRYpAhw7G927LFmjRAk45jzW4BqrvWHe4g8k7kZmZ\nKd+JfUdW+aSK3HJyyx2PcSQ//CBl5cpSrlplexvnzknZubOUfftKmZp6+99HjBhhe+MWQn8OBhmZ\nGbLlwJay9le15ZGLR2xuZ+3RtbLyJ5XlG8vekJmZmSYqzDs7dkhZtaqUL7105+/A3ci+LjIzpXz3\nXSmrV5dy3z7zNboCWb6ZN6/N6wn2fuVk/tlM2z1NlvuwnFxxaIVNH5IZ/PSTYfxmXGg3bkjZvbuU\nvXpJmZLy97+tWLEi/x1YAP05SJmSniIHzhgo675cV567di7f7Z25ekY2HttYvrnsTRPU2ca+fVJW\nrCjlxIm2nf/P62LsWCkrVJByi/qxocMpEOYvpZTLDi6Tvh/5yj1n9uT9U8on48ZJWamSlPHx5rWZ\nnCxlRISUYWHGzxrNrWRmZsqBMwbKHr/2kNdSr5nWbuLVRBn4ZaD8fP3nprWZW44fl7JaNSnHjDG3\n3enTpfTxkXLXLnPbdXYKjPlLKeW4reNktc+qydNXTuftU8oHM2caI5W4OPPbTk2VMjJSyiFDzG9b\n49p8uOZD2XhsY1ONP5vDSYdl5U8qy4nbbRx+28C5c1LWrSvlqFH3Ptbf318C+pX18vf3v+PnVKDM\nX0opR6wYIZt938wuX4p/sn+/MaLYuNF+fVy5ImWdOsbzBI1GSinnJcyTFT+uKI9ePGq3PnYl7pJ+\nH/k5JJSani5lu3ZSvvyyEau/F3nxg4JATp+HLeYvjPOcByGEzK0mKSUPz3qYDJnBr71+tZum5GRo\n1QoeeQSee85u3QAQFwdt28LixXDfffbtS+PcxJ2No924dsyOnk3LKi3t2tei/YsYOmco25/cTpnC\nZezWz7vvwooVsGQJuOViraEQAmfzKJXk9Hlkva9snb/DEUIwNnQsm09uZuruqXbr59//hurV4dln\n7dbFTerUga++gqgoSLpbtiSNpbmRdoNev/didKfRdjd+gK41uxJVJ4rH5zxuN7P94w/j2p4wIXfG\nr7EvLv+/oLBnYSb0nMCzC57l9NXTprc/ZYoxCv/hBxB5uq/aTr9+EBYGjz3mmP40zsfbK98m2DeY\nR+971GF9juo0in0X9vHztp9Nb/vSJXjoIRg79t5r+DWOwaXDPrfy5vI32Z64nZjoGIRJLn3mDAQH\nw4IF0KSJKU3mmpQUaNgQRo2Cnj0d27dGLZtObCJ0Uig7ntyBXzHHJr/dfWY37ce3Z92QddQqW8u0\ndh96CEqVgm++ydt5rhr2GTVqFIcOHeK7774ztV0zwz6WMf/UjFSa/9Cc55o9x5D7hpii5ZFHoEwZ\n+OQTU5rLMytXwsCBsHs3lCihRoPGsaRmpNL0u6YMazWMAQ0GKNHw1cavmLxrMqsfXW3KQGruXHjp\nJdi61diZmxdc1fzthY753wEvdy8mRE5g2NJhpoR/Vq6EZcvg7bdNEGcj7dpB587w1lvqNGgcy6jV\nowgoFcBD9R9SpuGppk+RnJ7Mrzvzv4giORleeAG+/DLvxq+xL5Yxf4D6fvV5pOEjvLn8zXy1k5oK\nTz0Fn30GxYubJM5GPvrIeO6waZNaHRr7E3c2jq82fcW3Pb41LXRpC+5u7nwZ8iXDlg7jSsqVfLX1\nv/8Z4csuXUwS54SMHj2aypUrU6JECerUqcOKFSt4++23GTRoEABHjhzBzc2NCRMm4O/vj6+vL++/\n//7N86WUfPDBB9SsWRMfHx+io6O5ePGi3XVbyvwB3mz7JnMT5rL11Fab2/jkEyNZW69eJgqzkbJl\njRvA44/rBHBWZ9jSYbzW+jUqlVD/RLRllZZ0qt6Jd1e9a3MbR47Ap5+qC5s6goSEBL7++ms2b97M\n5cuXWbRoEQEBAQC33cDXrl3Lvn37WLp0Ke+88w7x8fEAfPHFF8TExLB69WpOnjxJ6dKlefrpXOW+\nzB953Rhg7xcmbOr4dtO3st3P7WxKWnXsmJRly0p54EC+ZZhGZqaUbdoYOYU01iT2UKwM+CxAJqc5\nT36Pk5dPyrKjy8q9Z/fadH5UlJRvv50/DbnxAzDnZQv79++Xfn5+cunSpTItLe3m+yNHjpSDBg2S\nUkp5+PBh6ebmJk+ePHnz782aNZNTpkyRUkpZp04duXz58pt/O3nypPT09JQZGRm5/jywYZOX5Ub+\nAEMbD+X8jfPM2jsrz+f+978wdKixrt9ZEAI++ABGjDBiqBprkSkzeXnJy7zf8X28PbxVy7lJheIV\neLX1q7y46MU8n7t8uZFu+T//sYOwf2CW/dtCjRo1+Oyzzxg5ciS+vr489NBDnMoht7Sf318rt4oU\nKcLVq1cBIyzUs2dPypQpQ5kyZahbty6enp4kJuZY8sQULGn+Hm4efNLlE15e8jIp6Sm5Pm//fiPX\n/iuv2FGcjTzwgLHj99tvVSvRmM2UXVMA6BfcT7GS23m++fPsv7CfFYdW5PocKeG114wBS+HCdhTn\nJERHR7N69WqOHj0KwLBhw/J0ftWqVVmwYAEXLlzgwoULJCUlce3aNSpUqGAPuTexpPkDdK7Rmbo+\ndRnz55hcnzNiBLz4orG80xl57z3jC3X5smolGrNITk/m9eWv87/O/8NNON/X0cvdi+FthzMidkSu\nl1zOnw83bhi71K1OQkICK1asIDU1FS8vLwoXLoy7u/ttx93ts3viiSd4/fXXb948zp49S0xMjN00\nZ+N8V5uJvNP+HT5c9yHJ6feOlezYYSztfOEFBwizkeBg6NYNPv5YtRKNWXyz6Rvq+9anXUA71VJy\npH/9/iReS2TZoWX3PFZKGD7cWCJdEFI4pKSk8Oqrr+Lj40PFihU5e/Yso0aNuu24fz78vfX3F154\ngYiICLp06ULJkiV54IEH2Lhxo921W2aTV06ETQqjW41uPNPsmbseFxEB7dsbZRWdmcOHjd3GcXHg\n66tajSY/JKcnU+3zaiwcsJCG5RuqlnNXftv5G19v+po1j6656zLUWbOMMoybN5uTDkVv8vo7epNX\nHnir7Vt8sPaDu8b+N2ww6oA+9ZQDhdlIQAAMGAAffqhaiSa//LT1J5pWbOr0xg/Qr14/km4kseTg\nkhyPycw0Qqdvv+24PFga27G8+Ter1Ixg32DGbRuX4zHvvguvvw6FCjlOV374z3/g55911k9XJi0j\njQ/Xfsgbbd5QLSVXuLu5M7zdcIavGJ7jSHzGDPDygtBQB4vT2ITlzR9geNvhjFozirSMtNv+tmeP\nsXv2kUccr8tWqlQxvmB65Y/r8tvO36heujotKrdQLSXX9Knbh6upV1m4f+Ftf5PSCPfoUb/rUCDM\nv2WVltQsU5Nfdvxy29/+9z8jT7+rLUl75RX44gtjVYXGtcjIzGDUmlEuM+rPxt3Nnddav8ZH6z66\n7W+LFxumHxKiQJjGJgqE+UNW7H/NB2TKzJvvnTgBM2e6Rqz/n9SrB/ffD+PHq1aiySsz986kVKFS\ndKzWUbWUPNO3Xl/2Xdh3W/qUjz82ih7pUb/rUGDMv61/W4p7F2fBvgU33/v8cxg82Mif44oMG2bM\nXDIyVCvR5BYpJe+vfp/X27yuNHmbrXi6e/Jcs+f4ZP1fCXt27DDSjvfvr1CYJs8UGPMXQvBi8xf5\nbMNngFFZ6McfnX9p591o3Rr8/IxdyRrXYPXR1VxPu05ooOs+FX28yePMS5jHicsnACNx27PPGg97\nNa5DgTF/MKasu8/sZveZ3Xz3HXTtaiyddGWGDTOWfeql0K7BFxu+4Llmzznlbt7cUqpQKQY1GMRX\nG7/i5EmYPRueeEK1Kk1esfwmr3/y35X/5cjFYyx69jtmz4bGje3WlUPIzITAQJg4EVq4zsKRAsnR\nS0dpNKYRR148QnFvxYUi8snBpIM0+74Zj1w8TPLlYnz1lX360Zu8/o7e5JUPnmj6BJN3TKVizXMu\nb/xgbKF/6in4+mvVSjT34ttN3zK44WCXN36A6qWr07pye8asH8eLeU/6qXECCpz5+xb1pcTJngT0\nNrewskoefdSok3rmjGolmpy4kXaDH7f+yDP33z3NiCtRO+nf0PxzqtfIvPfBGqejwJl/fDwkr3yB\ntanf3HHTlytSpgz07Gk8wNY4J5N2TeL+SvdTq2wt1VJMY8nPLfEtUyRP6Z6txvHjx+nduze+vr74\n+Pjw/PPPI6Xk3XffJSAggPLly/PII49wOSsVb0pKCoMGDaJcuXKULl2a5s2bc/bsWSXaC5z5jxkD\nT0Y2pEaZGsTE2z9tqqN45hnj36aXfTofUkq+3PglzzV7TrUU0/jzT7hwXvBSuycYszn3adOtRGZm\nJqGhoVSrVo0jR45w4sQJoqOjGTduHBMmTGDlypUcPHiQK1eu8Nxzxv/78ePHc/nyZU6cOMGFCxcY\nM2YMhRXtMC1QD3yvXYOqVY0kbmsu/cqEHRNYNHCRXfpSQYsWRo6i8HDVSjS3suboGh6LeYy4Z+Jc\nepXPrQwdCjVrwtP/uoz/Z/7EPRNH+WLlTe8nNw98xdvm7JeQI/LmO+vXryciIoJTp07hdkv+6k6d\nOhEVFcWTTz4JGDn/69evz40bNxg/fjw//vgj3377LfXr18+zRjMf+HrkuXcXZvJkaNUK/P3BL703\nLy56kUNJh6hWuppqaabwzDPGg19t/s7F91u+54kmT1jG+C9eNPaW7N0LJbxLEFUnip+3/sxrbV5T\noievpm0Wx44dw9/f/2/GD3Dy5En8/f1v/u7v709aWhqJiYkMGjSI48ePEx0dzaVLlxg4cCDvvffe\nHQvA2BtrXI25QErDGJ9+2vi9kEchBtQfwI9brRMo79MHtm6FfftUK9FkczH5IrP3zmZQg0GqpZjG\nxInQpYuxwRCMFXTfbfnub6lTCgJVqlTh6NGjZGb+/d9dsWJFjhw5cvP3I0eO4OnpiZ+fHx4eHrz1\n1lvs3r2bdevWMWfOHCZMmOBo6UABMv9Nm4xdvV26/PXe/zX+P37e9jPpmenqhJlIoUJGuoqfflKt\nRJPNpJ2T6FKjCz5FfVRLMQUps56bPfnXe00rNqVs4bIsPrBYnTAFNGvWjAoVKvDqq69y/fp1UlJS\nWLduHf379+fTTz/l8OHDXL16lTfeeIPo6Gjc3NyIjY1l165dZGZmUqxYMTw9PW+bOTiKAmP+P/0E\nQ4b8vbRcPd96BJQKYF7CPHXCTObRR41kb+nWuJ+5PD9u/ZHH7ntMtQzTWLcO0tKMqne38kSTJxi7\neawSTapwc3Njzpw57Nu3j6pVq1KlShV+//13HnvsMQYOHEjbtm2pUaMGRYoU4YsvvgDg9OnTREVF\nUbJkSerVq0eHDh0YNEjNrLBAPPC9cQMqVYLt241c+Lcybts4pu6ZyryHrHMDaNHCqKPavbtqJQWb\nrae2EjklkoPPH8TdzfExXXvw8MPQoAG89NLf37+aepWqn1Zl51M7qVSikmn96R2+f0fv8M0jM2ca\n6Y//afxg5PtZf3w9Ry8ddbwwOzFkiA79OAM/bv2RIY2GWMb4r1wx8vjcaaBazKsYUXWjmLhjouOF\naWyiQJj/zz8b4ZA7UcSzCNH1ovl568+OFWVH+vWDpUtB0d4RDcaO3km7JvHofTlceC7ItGnQrh34\n+t757w83fJjx28frkbqLYHnzP3rUWNcfGZnzMY/e9ygTdkywzEVbsiSEhcGvv6pWUnCZETeD+yve\nT9WSVVVLMY3x442wT048UOUB0jLT+PPkn44TpbEZy5v/+PHGSPhuxdmbVGiCt7s3646tc5wwO5Md\n+rHI/czlsNqD3kOHjIItdyvOLoRgcIPBjNs2zmG6NLZjafPPzIRx43IO+WQjhGBQg0FM2K5mva09\naNcOrl41Zj0ax3Ls0jG2J24nLChMtRTTmDABoqPvXbBlUMNBTNk9hZT0FMcI09iMpc1/9WqjMHvT\npvc+dkCDAUyLm0ZyerL9hTkANzfjpqcf/Dqe33b+Ru86vSnkcZfppguRmWnMoB955N7HBpQKoL5f\nfeYmzLW7Lk3+sLT5Z4/6c1MqtWrJqjQq38hSF+3AgfD778a6bI1jkFLyy45fGNhgoGopprFmDRQp\nkvvCR9kPfs3A398fIYR+Zb1uTRuRXyxr/jduwKxZ8NBDuT9ncIPBlgr9VKtmVPlaZJ3cdU7P9sTt\nXE29SuuqrVVLMY1x44xRf27rzfeu05tVR1aReDUx330fPnwYKaXy11dfSR56SL2Ow4cP5/szzcay\n5j9vHjRpAhUq5P6cXnV6serIKs5es84ayQED9KofRzJxx0QG1B9gmSRu168b+2QGDMj9OcW9ixNR\nO4Lfdv5mP2EOpm9fw1OuXFGtxDyscYXegV9/zduoH4yLNiwojMm7JttHlAL69oX586110TorGZkZ\n/LbzN0uFfObONTZI5mUQBTCw/kB+22Ud8/fxgTZtjBuhVTDF/IUQ3YQQe4UQCUKIYXf4ezshxEUh\nxJas15tm9JsTSUmwfDn07p33cwc3GMyEHdYJ/ZQrZ1y0s2apVmJ9lh9aTsXiFanjU0e1FNOYNAn6\n98/7eR2qdeDYpWPsO2+dFLMDBxoZTa1Cvs1fCOEGfAV0BeoB/YUQte9w6CopZeOs17v57fduzJgB\nnToZm53ySsdqHTl++bilLlod+nEMv+z4xVKpmy9eNAZRPXvm/VwPNw/61O3DpF2TzBemiPBwIzvw\nyZOqlZiDGSP/ZsA+KeURKWUaMBmIuMNx5pTbyQW//pq3GOWtuLu506duH6bsnmKuKIWEh8P69ZCY\n/+dvmhy4lnqNmPgYooOjVUsxjRkz4MEHoVQp285/qP5DTNo1yTI75wsXNm6EkyxyPzPD/CsBx275\n/XjWe/+kpRBimxBinhCirgn93pETJ2DbtvxltIwOjrZU3L9oUSPdwxTr3M+cjnn75tG8cnP8ivmp\nlmIatoZ8smlRuQXJ6clsT9xunijFDBgAv1nkUYajyjhuBqpKKa8LIUKAWUBgTgePHDny5s/t27en\n/T+Th9+FyZONu/Pd0jncixaVW3Al9Qq7zuwi2DfY9oaciAEDYMQIeP551UqsyZTdU+hXr59qGaZx\n+rQR4oiJsb0NIQTR9aKZtHMSjco3Mk+cQtq1g+PHYf9+o4axKmJjY4mNjc1XG/nO5y+EaAGMlFJ2\ny/r9VUBKKUff5ZxDQBMp5YU7/C1f+fybNIEPPzSmq/nhlSWv4OnmyXsPvpe/hpyE9HSjpsEff0D1\n6qrVWIsrKVeo/GllDr9wmNKFS6uWYwpffmmYf34rDO5I3EHYpDAOvXDIMstfn3kGKlaEN95QreQv\nVOXz3wTUFEL4CyG8gGjgb+MFIYTfLT83w7jp3Gb8+SUhwXgYk4eJQo5EB0czefdky8QrPTygVy+Y\nOlW1EusREx9Dm6ptLGP8YIQ28hPyyaa+b32KeRXjj2N/5L8xJ6FfP2PnvKuTb/OXUmYAzwKLgd3A\nZCllnBDiCSHE41mHRQkhdgkhtgKfAXaZH0+daizvdDehdsZ95e/DXbhbKj1t377WuGidDauFfA4d\nMsIanTrlvy0hBP2D+1tqw1fr1nDuHOzdq1pJ/rBUGcdGjeCLL6BtW3O0DF8xnGup1/i468fmNKiY\njAwj9LNmjdp4pZW4mHwR/8/8OfavY5TwLqFajimMHm3cAMaMMae9AxcO0PLHlpx86SQebo56zGhf\nXnwRSpc2nqM5AwW6jGNCgrGUsVUr89qMDo5myu4pZMpM8xpViLu7MTPSoR/zmLV3Fh2rdbSM8YNx\nffTta157NcrUoErJKqw6ssq8RhXTt6+xes7Jxs55wjLmP3UqREWZE/LJpq5PXcoULsPao2vNa1Qx\nOvRjLlYM+Rw9at7sOZs+dfswbc80cxtVSIsWRr2MXbtUK7EdS5l/nz7mt2u1i7Z1a2MZX0KCaiWu\nz/nr51l3bB2hgXcpb+ViTJtmLJX2MDk6E1U3ihlxM8jIzDC3YUW4ubn+QMoS5p+QAGfOmBvyySaq\nbhTT46ZbKvQTFaVDP2YwI24GXWt0pZhXMdVSTMNeg6iaZWpSoXgF1hxdY37jiujXz7VDP5YwfzNX\n+fyTOj51KFmoJBuObzC/cUW4+ojFWZgWN40+de3glIo4csQI+5ixVPpO9Knbh6l7rDPqaNrU2D+z\nY4dqJbZhCfP//XdzH1D9k951ejM9brr9OnAwrVoZS9Xi41UrcV2SbiSx/vh6QmqFqJZiGtOmQWSk\n+SGfbLJDP1aZRQth7J2Z7qLW4PLmHx8PZ8/aJ+STTVTdKKbtmWaZDV9ubnrVT36JiY+hY7WOOuST\nBwLLBuJT1MdSCyh699bmr4zp043/AW52/JfU962Pl7sXm09ttl8nDqZXL2sVpnA00+Om07uODQUj\nnJSjR42NXR062LefqDpRllpA0by5kfraFTd8ubz5z5hhW9GWvCCEMB787nHRW/wdaNMGjh0DE0uC\nFhiupFwh9nCspVb5TJ8OERHg6WnffvrU68O0uGmWCf24ublu6Melzf/IEWPE0toBtbJ71+nNtDjr\nhH7c3Y0v+4wZqpW4HvP2zaONfxtKFbIx0b0TMm2asQrM3tQuV5syhctYKtdP796u+T1yafOfOdMo\nVGKvB1S30rhCY9Iz09mR6KKP9u9Ar16uedGqxmohn1OnYM+e/GfCzS29avdi5l7rxBxbtzZm0YcO\nqVaSN1za/GfMsK3EnC0IISwXr+zYEXbvNr78mtxxPe06Sw4sISLoTsXqXJPZs43iR15ejumvV51e\nzIibYZlZtIeHa86iXdb8ExON9bWOGq1A1kW718X+D98Fb2/jSz97tmolrsOi/YtoWrEpZYuUVS3F\nNGbOdNwgCqCBXwMAS82iXXHVj8ua/+zZEBKSv4pdeaV55eYk3Ugi4bx1ciO4arxSFVYL+Vy8aBT4\n6dbNcX0KIehZu6elQj8dOxorfk6cUK0k97is+c+YYcSsHYmbcCMiKIJZe2c5tmM70rUrbNgAF0wv\nrWM9UjNSmb9vPpG1I1VLMY25c43lncUcvF2hZx1rmb+XF4SGutbyaZc0/4sXYd06Y+TvaCJrR1rK\n/IsWNUJnc+aoVuL8rDy8ktrlalOheAXVUkzD0SGfbFpWbkni1UQOJh10fOd2omdP1wqhuqT5qxqt\nAHSo1oG95/Zy6op1npK66jplRzNz70xLjfqvX4elSyEszPF9u7u5Ex4Uzsw4Fxoq34MuXYxZdFKS\naiW5wyXNX0XIJxsvdy9CaoUwO96FbvH3oEcPiI2Fa9dUK3FeMmUms+NnW8r8Fy+GJk2grKJn1z1r\n97TUAoqiRY1B6fz5qpXkDpcz/+zRSqjCzZWRQdYK/ZQuDc2aGWaguTN/nvyTkt4lCSwbqFqKacyc\nqW4QBdCxWkf2nN3D6aun1YkwmchImOUi1uBy5r90qdrRCkBIrRDWHVvHpeRL6kSYTGSka8UrHc2s\nvbMsNepPSzPCp5EK/0neHt6E1Axh9l7rXHihocYgKjlZtZJ743LmP3u2saFCJcW8itEuoB3z97nI\n/C4XhIcbZpCerlqJc2I181+1CqpXh8qV1eqw2pJPHx9o1AiWLVOt5N64lPlnZBirUlSbPxihHytd\ntFWrgr8/rLVOtl3TiD8Xz+WUyzSt2FS1FNNwhkEUQLea3Vh3bB2XUy6rlmIaPXu6RujHpcz/jz+g\nQgWoVk21EggPCmfxgcUkp7vA/C6XRES4xkXraGbtnUVEUARuwqW+LjkipfOYf3Hv4rSq2oqF+xeq\nlmIaEREQE2MMVp0Zl7qaneWCBfAp6kMDvwasOLRCtRTTyI77WyTlimnMirdWyGf7diOra3CwaiUG\nEUERllo9V62aMUhdv161krvjMuYvpTEqVfmA6p+EB4Vb6qKtX9/4nHfuVK3EeTh15RTx5+JpF9BO\ntRTTyB5ECaFaiUF4UDgL9i0gLSNNtRTTcIVVPy5j/nFxkJIC992nWslfhAeFMydhjmUKUwjhGhet\nI5mTMIeuNbvi5e6glJcOwJlm0AAVi1ekZpmarD66WrUU04iMNJbSOvMs2mXMf/ZsY0WKs4xWwKhJ\nWsK7BJtPWqe8Y0SEXvJ5KzHxMZZK33zsmOMKIOWF8KBwSy35bNgQUlOdu7yjy5i/s4V8sgkPDCcm\nPka1DNOnneULAAAgAElEQVRo3fqvCmkFnaupV1l1ZBUhNRUkkbITMTFGGm9HFEDKC9lxf6vk+BfC\nGKzGOLE1uIT5nzwJCQnQzgnDrhG1rfWwysPDMIe5c1UrUc+SA0toXrk5JQuVVC3FNJwt5JNNsG8w\nbsLNUjn+w8OdexbtEuY/d66RwdPexaVtoXml5iReS+RQkovVcLsLzj5icRQxCTGEB4arlmEaly4Z\nK1C6dlWt5HaEEJZb9dOunVEeMzFRtZI74xLmHxNjGJIz4u7mTmitUEuFfrp2NTZ7XbbOvps8k5GZ\nwdyEuYQFKUh5aScWLIA2bdRkw80NVptFe3sb36V581QruTNOb/7Xrhlb0R1ZaSivhAeFE5NgHfMv\nXhxatSrYid7WH19PxeIVCSgVoFqKaTjzIAqgddXWHL54mGOXjqmWYhrOPIt2evNfuhTuvx9KlVKt\nJGc61+jMphObSLrhIom8c4EzX7SOYHb8bEut8klLg4UL1eTuzy0ebh6E1AxhboJ1HjiFhMCKFXDj\nhmolt+P05u/soxWAIp5FaB/Q3lKJ3sLCjLzkBTXRW0x8DOFBTn7h5YE1a6BGDahYUbWSu5O9d8Yq\nlCkDjRs7Z6I3pzb/zEzjYa8zj1aysdpFW6WKkext3TrVShxP/Ll4rqReoXGFxqqlmMacOa7xPepa\noyurj67maupV1VJMw1ln0U5t/hs3GilSq1dXreTe9KjVg0UHFpGakapaimmEhxfM2r5zEuYQFhhm\nqURurjCDBihZqCQtKrdgyYElqqWYRvb3KNPJEgE49dXtKhcsQIXiFQgsG8jqI9bZou6sIxZ7Y7WQ\nz969xm7Thg1VK8kdYYFhlppF16hhhH82bVKt5O9o8zcRq120991nrLaKj1etxHGcv36e7Ynb6Vit\no2opphETY4R8nCk1yt0ICwxjbsJcMjKdPCdyHggLc75ZtNOa/8GDcO6cUVvWVcg2fyttUQ8Lc+5d\nimazYP8COgR0oJBHIdVSTMNV4v3ZVCtdDb9ifmw8sVG1FNPQ5p8H5swx6mG6Oa3C22ng14C0jDTi\nzsWplmIaznjR2pPseL9VOHvWSNHdoYNqJXnDajmzWrQw0tQcOaJayV84rbXGxBjm70oIIYwNXxa6\naDt2NIp/nD+vWon9Sc1IZfGBxfQI7KFaimnMnw+dOhm7TV2JsCBrhVDd3Z0vZ5ZTmv+lS8ZKn86d\nVSvJO1aL+xcqZNwA5ltnC0OOrD6ymsCygZQvVl61FNNwtZBPNs0qNePc9XMcTDqoWopphIU51wIK\npzT/RYuMHCRFi6pWknfaB7Rn15ldnL12VrUU0ygooR+rhXxSUowd8j1ccCLjJtzoUasHc+Ktc+F1\n6WLsm7lyRbUSA6c0f1cdrQB4e3jTuXpn5u1z0mxONtCjh5HnJ9U6WxhuQ0pJTHyMpcw/Nhbq1TP2\nyrgiVgv9lCgBDzzgPDmznNL8FyxwvXj/rVgt9FO+PAQFGQn2rMqes3tIz0yngV8D1VJMI3vRhKvS\nuXpnNp7YyKXkS6qlmIYzzaKd0vyrVDFerkr3Wt1ZdnAZKekpqqWYhjNdtPYgO+QjXGUx/D2Q0nVS\no+REUa+itK7amkUHFqmWYhrZObMynGALg1OavytfsAA+RX2o51uP2MOxqqWYRrb5W2QLw23MSZhj\nqdz9u3YZ+zTq1VOtJH9YbRbt72/MpDdsUK3EJPMXQnQTQuwVQiQIIYblcMwXQoh9QohtQohGd2vP\n1c0frHfRNmhgZPiMs84WhpucvXaWXWd20T6gvWopppH93MzVJzKhgaEs2LeA9EzrpJd1lll0vs1f\nCOEGfAV0BeoB/YUQtf9xTAhQQ0pZC3gCGHO3Nps0ya8q9Vh1t68zXLRms2D/Ah6s9qDe1euEVClZ\nhSolq/DHsT9USzENZ/kemTHybwbsk1IekVKmAZOBf1bBiAAmAEgpNwAlhRB+OYpyymBU3qjrUxc3\n4cauM7tUSzENZ7lozcZqSzzPnDFmaO3aqVZiDqG1Qi01i27WzNh5fUhx2W8zbLYScGvdteNZ793t\nmBN3OMZSCCEsF/rp0MFIFXDunGol5pGakcqSA0sstat33jxjg6SXl2ol5hAWFGap6l5ubsbyadUD\nKQ+13d+ZkSNH3vy5ffv2tG/fXpmW/BAWGMbw2OG83uZ11VJMwdsbHnzQWK0weLBqNeaw8vBK6vjU\nwbeor2oppjFnDkRGqlZhHk0rNiUpOYkDFw5Qo0wN1XJMISwMvvkGnn/etvNjY2OJjY3NlwaR35i0\nEKIFMFJK2S3r91cBKaUcfcsxY4AVUsopWb/vBdpJKRPv0J60Spw8NSMV3498SXguwTLm8vPPhvlP\nnapaiTk8v+B5yhcrb5kbdEoK+PrCgQNQrpxqNeYxNGYowb7BvNjiRdVSTOHqVahQAU6cMDZ/5Rch\nBFLKPD3eNyPsswmoKYTwF0J4AdHAPzNYxACDs0S2AC7eyfithpe7F51rdGZegrV2+y5ZYo3dvlJK\ny8X7Y2MhONhaxg/WWz1XrBi0aqV2t2++zV9KmQE8CywGdgOTpZRxQognhBCPZx0zHzgkhNgPjAWe\nzm+/roLVLlpfX6hTB1auVK0k/+w+uxspJcG+waqlmMacOa5VACm3dKreiU0nNundviZiyroaKeVC\nKWWQlLKWlPKDrPfGSim/u+WYZ6WUNaWUDaWUW8zo1xUIqRnCskN6t68zMid+DqGBoZba1Ztdtctq\nFPUqShv/Nizcv1C1FNMIDVW729cCiyqdG5+iPgT7BrPi8ArVUkzDKrt95+6ba6mQz44d4OlpzMys\niNVm0f7+ULEirF+vpn9t/g4gLDDMUqlpg4MN49+9W7US2zl77Sy7z+zWu3pdiNDAUBbs17t9zUKb\nvwMIDwrXu32djPn75vNg9Qfx9nCxEld3wSq7enOiconK+Jf0Z92xdaqlmIY2f4tTp1wdPN092ZG4\nQ7UU03B187faKp/TpyEhwSiCZGWsNou+/36jROpBBQXLtPk7ACvu9m3Xzgj7nDmjWkneSUlPYcnB\nJfSoZa1dvV26WGdXb06EBYURk+BEtRDzicrdvtr8HYTVzN/b20gh4Iq1fWMPxxLsG4xPURctcXUH\nrB7yyaZxhcZcSblCwvkE1VJMIzxcm7+laePfhoTzCZy+elq1FNNw1dCP1co1JifDihUQEqJaif1x\nE26WC/106gQbN8IlB29h0ObvILzcvehSo4uldvt2724UCE9OVq0k92Tv6g0Pss5OqOXLoWFDKFtW\ntRLHYLXavkWLQtu2sNDBWxi0+TuQsEBrxSt9fKB+fSOlgKuwI3EHnu6e1ClnncXwBSXkk82D1R5k\ny6ktJN1IUi3FNFTMorX5O5CQmiGsOLSCG2k3VEsxjfBwY1epqxATH0N4YLildvVaNaVDThT2LEz7\ngPbM3+eCD5xyIDQUFiwwquU5Cm3+DqRskbLcV+E+lh9arlqKabjabl+r1erdutUIGwQFqVbiWLL3\nzliFSpWgWjVYu9ZxfWrzdzBhgWHExLvQUPke1K4NhQrBtm2qldybU1dOse/CPtpUtc5i+JiYgjXq\nzyY0MJRFBxaRmmGB9LJZODr0o83fwYQHhTN331wyZaZqKabgSrt95ybMpVvNbni6e6qWYhoF1fzL\nFytPUNkgVh1ZpVqKaTg6hKrN38EElg2khHcJNp/crFqKabhK3N9qu3qPHYOjR6FlS9VK1BARFGGp\nWXSjRnDjBsTHO6Y/bf4KCA8Mt9RF26qVsT39xAnVSnLmWuo1Yg/HElLTOovh58wxdod6OGUxVvsT\nHmR8j6yWM8tRAylt/goIDwq31JJPT09jg9FcJ66xvfTgUu6vdD+lC5dWLcU0CmrIJ5u6PnVxd3Nn\n55mdqqWYRng4zJ7tmL60+SugReUWnLpyikNJh1RLMQ1HXrS2MDt+NhFBEaplmMbly7BunZHPp6Ai\nhLDcLLpDB9i1yzE5s7T5K8DdzZ3QwFBLLVXr1g3WrDEKUzsbGZkZzE2Ya6ldvYsXG+G24sVVK1FL\ndujHKnh7Gzd0R8yitfkrIjwonNnxTjxUziMlS0KLFrBokWolt7P++HoqFK9AQKkA1VJMo6CHfLJp\nXbU1+y/s5+SVk6qlmEZEhGPi/tr8FdG5emc2ndhkqS3qkZEwa5ZqFbdjtZBPerqRTTU0VLUS9Xi6\nexJSK4S5CU78wCmPhIQYifquX7dvP9r8FVHUqyjtAtpZqiB1eLhhSmlpqpX8ndnxsy0V8lm7FgIC\noEoV1Uqcg/DAcGbtdcJRh42UKQNNmhhJE+2JNn+FhAdaK/RTubKxRX3NGtVK/iL+XDzXUq/RpEIT\n1VJMY9YsIzSgMQipFcKao2u4knJFtRTTiIiw/wIKbf4KCQsKs9wWdUdctHkhe9RvpURus2YZITaN\nQQnvErSq2opFB5zwgZONhIcbD30zMuzXhzZ/hZQvVp465eqw4tAK1VJMI9v8nWXfjdVCPjt2GKX/\ngoNVK3EuIoIiLBX6qVYN/Pxgwwb79aHNXzGRtSMtddHWr2/8d4cT1Ko/c+0Mu8/spkNAB9VSTCN7\n1G+RiYxphAeFM3/ffNIynOyBUz6w9yxam79iImtHMjt+tqUSvTlL6CcmPoauNbvi7eGtWopp6JDP\nnalYvCKBZQNZeWSlaimmERFh/P+21yxam79iAssGUrpwaTae2KhaimlERjqH+c/cO5OetXuqlmEa\nR47A8ePwwAOqlTgnVptFN2liJHqLi7NP+9r8nYDIIGtdtK1bG0Z19Kg6DZdTLrP6yGq61+quToTJ\nzJ5tJP5yd1etxDnJNn8rJXqLjISZM+3TvjZ/J8BqIxYPD8OkVG74WrBvAa2rtqaEdwl1IkxGh3zu\nTu1ytSnmVYzNp6yTLr1nT23+lqZpxaZcTb1K3Fk7ze8U0LMnzJihrn+rhXzOn4fNm6FzZ9VKnBur\nDaTatLHfLFqbvxMghLDcRdu5s1Ff9uxZx/edkp7Cwv0LLbXEc9486NgRChdWrcS5iawdycy9dhoq\nK8DDw0jjYY9ZtDZ/JyGydiSz4q1j/oULQ9euaip8LTu0jGDfYPyK+Tm+czsxYwb06qVahfPTrFIz\nkm4kkXA+QbUU07BX6Eebv5PQzr8d+87v48RlJy6HlUfsGa+8GzPjrBXyuXrVSPQVZp0KlHbDTbjR\ns3ZPZsQpjDmaTOfOsGULnDtnbrva/J0ET3dPegT2sNSUtUcPWLXKKDziKDIyM4hJiKFnHeuY/4IF\nRp3eUqVUK3ENetXpxfS46aplmEbhwsYNYI7J5T+0+TsRUXWiLHXRlihhLPtcsMBxfa47to7yxcpT\nvXR1x3VqZ6ZPh969VatwHdoFtOPwxcMcvaRwrbHJ2GMWrc3fiehSowtbT23lzDUH1HBzEL16OXbV\nj9VW+SQnw8KFOotnXvBw8yA8MNxSoZ8ePSA21txKedr8nYjCnoXpVrObpVb9hIcb1b2Sk+3fl5SS\naXumEVU3yv6dOYglS6BRI/D1Va3EtbBa6KdUKaNs5/z55rWpzd/J6F2nt6UuWl9faNjQMDF7s+nk\nJop4FqGeTz37d+Yg9Cof2+hUvRO7zuzi9NXTqqWYRlQUTJ1qXnva/J2MkFohrD++ngs3LqiWYhq9\nextxa3uTPeq3Su7+tDTjIV9P60SxHIa3hzfda3W31Cw6IgIWL4Zr18xpT5u/k1HMqxgPVnuQmHgF\nC+TtRO/ehoml2rFmjRVDPitXQo0aulyjrfSqba3QT7ly0Ly58QzIDLT5OyFWC/1UqgR16ti3JunW\n01txE2409Gtov04cjF7lkz+61ezGxhMbLTWLNjP0o83fCQkNDGXl4ZVcTnHgAnk706ePufHKfzJ1\n91T61O1jmZBPRoaxtE/H+22nqFdROlXvxOy9TpBf3CQiI42R/40b+W9Lm78TUrJQSdr6t2VuwlzV\nUkyjd28j1YM9Qj9SSqbFWS/kU6kS1KypWolr06duH37f87tqGabh6wuNGxsr6PKLNn8nJapuFFP3\n2HGo7GAqV4batWHZMvPb3pG4g/TMdBpXaGx+44r4/Xfo10+1CtcnNDCUdcfWcf76edVSTMOsWbQ2\nfyclIiiC5YeWWy7087sdBmHT9kwjqo51VvmkpxtLPPv0Ua3E9SnmVYwuNbpYKm1Kz55Gltf87p3R\n5u+klC5cmrb+bS0Vr4yKMj/0I6Vk6p6p9K5rnSejK1ZAQABUq6ZaiTXoV68fU3ZPUS3DNMqXN/bO\nLF6cv3a0+Tsx0fWiLXXR2iP0syNxB8npyTSv1Ny8RhWjQz7m0r1Wdzad2MTZawqKS9iJvn3zP4vO\nl/kLIUoLIRYLIeKFEIuEECVzOO6wEGK7EGKrEMI6lcrtTHhQOKuPrrbUUjWzV/1M2jWJ6OBoy4R8\n0tKMVT5R1nl2rZwinkUIqRViqeXTUVEwdy5cv257G/kd+b8KLJVSBgHLgddyOC4TaC+lvE9K2Syf\nfRYYinsXp3P1zsyMs068MirKKESekpL/tqSUTN41mf7B/fPfmJOwbBnUqgX+/qqVWIu+dfvy+27r\nrPrx84NmzYwbgK3k1/wjgPFZP48HciovLUzoq0DSr14/Ju+erFqGaVSuDPXrm7NLcf3x9RT2LEwD\nvwb5b8xJ0CEf+xBSK4Qtp7ZYKtdPdDRMzoc15NeQfaWUiQBSytNATrkHJbBECLFJCPF/+eyzQNEj\nsAebTmyyVJrn/v3ht9/y386kXZPoH9zfMiGf1FSjVqsO+ZhPIY9ChAaGMm3PNNVSTKNXL2OmeOmS\nbed73OsAIcQS4NZiqALDzN+8w+Eyh2ZaSSlPCSF8MG4CcVLKNTn1OXLkyJs/t2/fnvbt299LpmUp\n4lmE7rW6M23PNJ6+/2nVckwhKgpeeQWuXIHixW1rIyMzg6l7prLykZXmilPIwoVQr54xO9KYT796\n/Ri9djTPNntWtZR8ExsbS2xsLBUqwMMP29iIlNLmFxAH+GX9XB6Iy8U5I4B/3+XvUvN3Zu+dLdv+\n3Fa1DFMJDZXyl19sP3/pgaWy8djG5glyAvr2lXLMGNUqrEtKeoosO7qsPJR0SLUU05g8WcquXaXM\n8s08+Xd+wz4xwCNZPz8M3LYoXQhRRAhRLOvnokAXYFc++y1QdK3RlZ2JOzl26ZhqKabx0EP5C/1Y\n7UHvpUvGyF9v7LIfXu5e9Knbh992mhBzdBJCQ2H9etvOza/5jwY6CyHigQeBDwCEEBWEENnPof2A\nNUKIrcB6YI6UMp/bEwoW3h7e9K7T21IXbXg4rFsHZ21Yep2akcqMvTPoW6+v+cIUMWMGdOgAZcqo\nVmJtBjYYyC87fsmOMrg8RYtC9+62nZsv85dSXpBSdpJSBkkpu0gpL2a9f0pKGZr18yEpZSNpLPOs\nL6X8ID99FlQGNRxkyYvWljX/C/cvpK5PXaqWrGq+MEX8+isMHKhahfV5oMoDJKcns/X0VtVSTKO/\njRNgvfzSRWhdtTVXU6+y7fQ21VJMw9bQz4TtExjUYJD5ghRx4gRs2WJM4TX2RQjBwPoDmbhjomop\nptG1q23nafN3EdyEG4MaGKN/q9ClC+zdC4cP5/6cCzcusOTgEkuFfCZNMpJ1FSqkWknBYECDAUza\nNYmMzAzVUkzBy8u287T5uxCDGg5i0q5JpGemq5ZiCl5exoamX/JwP/t99+90q9mNUoVK2U+Yg9Eh\nH8dSu1xtKpeozPJDy1VLUYo2fxcisGwgVUtWZelBO9ZDdDCPPALjxkFmZu6OH799PA83tHVhs/Ox\naxecOwft2qlWUrAYWH8gE3daJ/RjC9r8XQyrhX6aNjXCHWty3PL3FwnnEziUdIguNbrYX5iDmDjR\neGDnpr+JDiU6OJrZe2dzLfWaainK0JecixEdHM28hHlcSbmiWoopCAGPPmqM/u/FhO0TeKj+Q3i4\n3XNjukuQng4TJhizH41j8SvmR6uqrSyV6TOvaPN3McoVKUdb/7aWumgHDDDSGF+9mvMxmTKTX3b8\nYqmQz8KFRvbOunVVKymYDGk0hB+3/qhahjK0+bsgjzZ61FIXbYUK0KoVTL/L/Wzl4ZWUKlSKhuUb\nOk6YnfnxR3jsMdUqCi5hQWHsPbeXfef3qZaiBG3+LkhoYCj7L+xn77m9qqWYRvaD35wYv308gxsM\ndpQcu5OYaJRr7GudFasuh5e7FwPrD+SnrT+plqIEbf4uiKe7Jw83fJgftvygWopphIXBzp1w6NDt\nf7uYfJFZe2cxqKF1Nnb98ouxtr9ECdVKCjaPNX6M8dvHW2b5dF7Q5u+iDG08lAnbJ5CSbkJJLCfA\n29tY9XKn0f/EHRPpVrMbvkVzKhfhWkhphHyGDFGtRFPXpy7+pfxZuN+E6kIuhjZ/F6VmmZoE+wYT\nEx+jWoppDB1qmGL6LYMwKSVjN4/l8SaPqxNmMuvXQ0YGtG6tWokG4LH7HrPUM7Tcos3fhRnaeCjf\nb/letQzTaNgQqlb9e13S9cfXk5yeTIeADuqEmUz2qN8iBchcnn71+hF7OJbEq4mqpTgUbf4uTK86\nvdhyaguHku4QKHdRnnoKvv32r9/Hbh7L440ft0ypxsuXjVVNNldf0phOce/i9Kzdk/Hbx9/7YAuh\nzd+FKeRRiAH1B1hqytqnj5Hh8sABSLqRxKy9s3ik0SOqZZnG+PHQubOxvFXjPDzZ9EnG/DnGMsne\ncoM2fxfn/5r8Hz9t/YnUjFTVUkyhUCFjVDx2rPGgN6RWCD5FfVTLMgUp4euv4VnXLyFrOZpVaoZP\nUR/m75uvWorD0Obv4gT7BhNULojpe6yz4/eJJ+DncZKxf37H442t86B32TIjk2mbNqqVaO7Es/c/\ny1ebvlItw2Fo87cALzR/gS82fqFahmnUqgX+bVdy4VIa7QPaq5ZjGl99ZYz6LfL4wnL0qdeHbae3\nEX8uXrUUh6DN3wKEBYZx+uppNp7YqFqKabi1+pTC21+0zIPeI0dg9Wojj5HGOSnkUYih9w3l601f\nq5biELT5WwB3N3eevf9ZvthgjdH//gv7OZS+jtRNg9m0SbUacxgzxniWUbSoaiWau/Fk0yeZuGOi\nZbLm3g3hbAXBhRDS2TS5AheTL1Lt82rseXoPFYq79lKS5+Y/R3Hv4vjseJ8NG2DyZNWK8kdysrF/\nYd06qFlTtRrNvYj6PYqO1Try9P1Pq5aSa4QQSCnzNE3WI3+LUKpQKfoH92fMn2NUS8kXF5Mv8uvO\nX3nm/mcYOhSWLMlbjV9n5NdfjaI12vhdg2ebPcuXG78kU+ayvJyLos3fQjzf/HnGbh7r0vl+vt/8\nPd1rdadSiUoUL26kfPjsM9WqbCcjAz78EF55RbUSTW5p59+OIp5FmBM/R7UUu6LN30LULlebxhUa\nM2H7BNVSbCI9M50vN37Jv1r86+Z7zz9vVLtKSlIoLB/MmgVlyugava6EEILXWr/GqDWjsHIIWpu/\nxXi9zet8sPYDl0xRO23PNAJKBdCkYpOb71WqZKR7HjtWoTAbkRJGjYJXX9XLO12NnrV7kpScROzh\nWNVS7IY2f4vRumprqpSowuRdrvWUNFNm8u6qd3mt9Wu3/e3ll+HLLyHFxaJZS5fCjRvGzUvjWri7\nuTOs1TBGrRmlWord0OZvQd5s+ybvrX7PpfKUzIibQRHPInSr2e22v9Wvb7wmuFg064MPYNgwcNPf\nMpdkYIOB7D23l80nN6uWYhf0ZWlBHqz2IKUKlWJG3AzVUnJFpszk7ZVvM7L9yBw3dY0YAe++6zqj\n/40bYf9+o0CNxjXxcvfipZYvWXb0r83fgggheLPNm7y7+l2XeGA1I24GhTwKEVIzJMdjWrY0Rv/f\nu0j5gvfeg5deAk9P1Uo0+WFo46GsPrqauLNxqqWYjjZ/i9K9VnfchBtzE+be+2CFZMpM3ln5DiPb\n5Tzqz+add+D99+H6dQeJs5F162DrVnjcOjnpCixFvYryUsuXeHPFm6qlmI42f4sihGB42+G8ueJN\np479z4ybibeHN91rdb/nsY0bwwMPwDffOECYjUhpxPnfecdIT61xfZ5r9hwbT2zkj2N/qJZiKtr8\nLUxk7UhKeJdw2gpF6ZnpjIgdwYh2I3KdwO3tt+Gjj+CKk6ZemTsXLl6EQYNUK9GYRWHPwrzT/h2G\nLR3mEmHU3KLN38IIIfi4y8e8teItrqZeVS3nNr7b/B2+RX3pUatHrs+pV8+ohOWMu34zMow1/R98\nAO7uqtVozGRww8EkJSc5ZRj13PVzNp2nzd/iNKvUjPYB7flo7UeqpfyNCzcuMDJ2JJ91+yzPaZvf\nfhs+/xyOH7eTOBuZMAHKlYPu945gaVwMdzd3PnjwA15d9qrTbaB8bente2Nygzb/AsD7Hd/nq01f\nceLyCdVSbjIydiRRdaNo4Ncgz+fWqGEUen/pJTsIs5Hr143lqKNH6928VqV7re74FPFh/DbnCaNu\nOL6Befvm2XSuTulcQHht6WucunqKcZHjVEth95nddBjfgbhn4ihbpKxNbVy/boSAvv8eOnUyWaAN\nvPIKnDhhZPDUWJc/T/5J2KQwdj61k3JFyinVkpGZQfMfmvNC8xcY3GiwTumsuTOvtXmNJQeXsPLw\nSqU6pJS8uOhF3mr7ls3GD1CkiBH6eeYZ9Ru/tmyB8ePh00/V6tDYn6YVm9I/uD//XvRv1VL4fsv3\nFPYszMAGA206X5t/AaGEdwm+7fEtQ2KGcC31mjIdk3ZN4tSVUzzZ9Ml8txUeDoGBak03Pd1IO/3R\nR+Drq06HxnH8t8N/WX10NQv3L1Sm4dz1cwxfMZyvu39tc6lTHfYpYAyeOZiS3iX5svuXDu/72KVj\nNPmuCQsHLqRxhcamtHnwIDRrBuvXqymW8r//weLFsGiRjvUXJBYfWMzjcx5n19O7KOZVzKF9SykZ\nOHMg5QqX4/OQzwHbKnlp8y9gJN1Iov639ZnYayLtA9o7rN9MmUmnCZ3oXL0zr7WxbXVCTnz5pRF2\nWfr4OuQAAAjkSURBVLsWvL1NbfquZN94Nm6E6tUd16/GOXh41sOU8i5104Adxfht4xm9djR/Pv4n\nRTyLALqMoyYXlC5cmjGhYxgye4hD1/5/tv4zUjNSeaWV+SWtnn0WqlSB18y9p9yV5GTo1w/eeEMb\nf0Hlky6fMC1umkPDPwnnE3h5yctMiZpy0/htRY/8CyhDZg/hetp1JvWeZHPMMLfsTNxJxwkd2Th0\nI9VKV7NLHxcuwH33wddfQ2ioXbq4iZRGnP/KFZgyRYd7CjKrj6wmamoU64aso0aZGnbtKyU9hZY/\ntmRo46G3FZfXI39NrvmmxzccuXSEt1e+bdd+Eq8m0nNKTz7u8rHdjB+MUom//WaYsr03f333HWzY\nAD/9pI2/oNPGvw3D2w4nckqk3WfSryx5hYBSATzV9ClT2tPmX0Ap5FGIWf1mMW7bOH7b+Ztd+ria\nepUev/VgQP0BDG442C593EqrVvDvf0OPHsZMwB788Qe89RbMnAnFHPucT+OkPH3/09xf8X4enf2o\n3XL/fPLHJyw8sJAfwn8wbaauzb8A41fMj5j+Mbyw8AXTMxamZaTRZ2ofGpVvxMj2I01t+2785z/Q\npQt06waXL5vb9o4d0Lu3MeKvVcvctjWuixCCb3p8w9FLR3l16aum3wC+3/w9X2z4gqWDllKmcBnT\n2tXmX8Bp4NeAcRHjiJwSaVqx6vTMdIbOGYq7cGdM6Bi7P1O4FSHgww/h/vuNGcA1k7Y0bNjwV0I5\nez9T0LgehTwKMe+heSw7tIyn5z1tWhr1ybsmM3LlSJYOXkqVklVMaTObfJm/ECJKCLFLCJEhhMhx\n4bYQopsQYq8QIkEIMSw/fWrMp0dgDyb1nkS/af34Zfsv+Wrr/PXzdJvYjdNXTzMlagoebh4mqcw9\nQhjLP2vWNG4AZ87kr70VK4wi7D/9BH37mqNRYz3KFSnH8oeXs/f8XgbOHEhqRqrNbUkp+W7zd7y4\n8EUWDVxEzTJ22MQipbT5BQQBtYDlQOMcjnED9gP+gCewDah9lzalxmDFihUO7W/3md0y4LMAOWLF\nCJmRmZHn87ee2ioDPguQryx+RaZnpJumy9bPIT1dytdek7JCBSkXLsz7+WlpUn7+uZTlyknp4P8V\nOeLoa8KZcdbP4kbaDRk+KVw+OP5BeSjpUJ7PT7qRJPv83kc2+LaBjDsbl6tzsnwzT/6dr5G/lDJe\nSrkPuNu8vhmwT0p5REqZBkwGIvLTb0EhNjbWof3V9anLH4/9wbJDy2g8tjEL9y/MVfwy6UYS7656\nl86/dOaDBz9gdOfRuLuZl9De1s/B3d0o+/jrr8YqoH//O/dFYDZtgubNjQe7q1dD+/Y2STAdR18T\nzoyzfhaFPAoxve90OgR0oOl3TXlv1XukpN87AZWUkmUHl3Hf2PvwK+rHhqEbqF2utt10OiLmXwk4\ndsvvx7Pe0zgh5YuVZ9UjqxjebjgvLnyRjhM6MjNuJicun/jbjSA9M52E8wn8Z/F/qPllTQ4kHWDt\nkLX0C+6nUP2d6dABtm0zwj9Vq8KQIcZu4H/e186ehYkTITraCPO88AIsXw617ff901gUDzcP3mj7\nBn8+/iebTm6i/rf1GbV6FH+e/PO25wFJN5L4fP3nBH8bzDPzn+HTrp/yZfcvKeRh3zqg9wzICiGW\nAH63vgVI4A0p5Rx7CdOoQwhBrzq9CA8KZ9y2cXy35Tsen/s4Hm4eBJYN5MTlExy7fAy/on70qtOL\nbU9sM/1hlNmULWsY++nTRtGVIUMgMRFKloTixY3nBEePGjeKkBCjTnAZ8xZWaAooAaUCmBU9i9jD\nsczaO4vBMwdz5toZqpeuzsXkiyQlJ3E97ToRQRF80/0b2vq3ddgCCVN2+AohVgAvSSm33OFvLYCR\nUspuWb+/ihGfGp1DW3p7r0aj0eQRmccdvmYuxcip401ATSGEP3AKiAb659RIXv8BGo1Go8k7+V3q\nGSmEOAa0AOYKIRZkvV9BCDEXQEqZATwLLAZ2A5OllHH5k63RaDSa/OB0id00Go1GY3+cZoev3ghm\nIISoLIRYLoTYLYTYKYR4XrUm1Qgh3IQQW4QQMaq1qEQIUVIIMVUIEZd1fTRXrUkVQojXsj6DHUKI\nX4UQXqo1OQohxI9CiEQhxI5b3isthFgshIgXQiwSQpS8VztOYf5CCDfgK6ArUA/oL4QoqAvs0oF/\nSynrAS2BZwrwZ5HNC8Ae1SKcgM+B+VLKOkBDoECGT7OeH/4fcJ+UsgHGs8totaocys8YXnkrrwJL\npZRBGJtu71ndwinMH70R7CZSytNSym1ZP1/F+IIX2H0RQojKQHfgB9VaVCKEKAG0kVL+DCClTJdS\nmpy6zmW4DKQCRYUQHkAR4KRaSY5DSrkGSPrH2xHA+KyfxwOR92rHWcxfbwS7A0KIAKARsEGtEqV8\nCvwHY29JQaYacE4I8XNWCOw7IURh1aJUIKVMAj4GjgIngItSyqVqVSnHV0qZCMYAEvC91wnOYv6a\nfyCEKAZMA17ImgEUOIQQPYDErJmQ4O5pRKyOB9AY+FpK2Ri4jjHVL3AIIaoD/8LIF1YRKCaEeEit\nKqfjnoMlZzH/E0DVW36vnPVegSRrKjsN+EVKOVu1HoW0AsKFEAeBSUAHIcQExZpUcRw4JqX8M+v3\naRg3g4JIU2CtlPJC1lLyGcADijWpJlEI4QcghCgP3DOXrbOY/82NYFlP7aOBgryy4ydgj5Tyc9VC\nVCKlfF1KWVVKWR3jmlgupbR/STAnJGtKf0wIEZj11oMU3Ifg8UALIUQhYeRCeJCC9/D7nzPhGOCR\nrJ8fBu45aHR8svU7IKXMEEJkbwRzA34sqBvBhBCtgAHATiHEVozp2+tSyoVqlWmcgOeBX4UQnsBB\n4FHFepQgpdyeNQPcDGQAW4Hv1KpyHEKI34D2QFkhxFFgBPABMFUIMQQ4Atyz8oTe5KXRaDQFEGcJ\n+2g0Go3GgWjz12g0mgKINn+NRqMpgGjz12g0mgKINn+NRqMpgGjz12g0mgKINn+NRqMpgGjz12g0\nmgLI/wP3ui6EYB3RGAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, 10, 100)\n", "plt.plot(x, np.sin(x), label='sine')\n", "plt.plot(x, np.cos(x), label='cos')\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sampling" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nJlAaE91TAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(np.random.randn(10000), bins=100);" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(np.random.rand(10000), bins=100);" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEACAYAAAC+gnFaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGFpJREFUeJzt3XuMXOV5x/HvLxDbhLoWELGr2GBMiGFBEEoTQ5W0mZDG\n4FS1rfzhOkm5BBpVMU2ipkpjU1Xef1pw1So0qoxE6zqmglomtLVpiLkUjyoUDM4FTFgHNhcbe9vd\niMSlSaUQG57+MWe9Z4bZ3dm5nJk55/eRVjrzzjMz7x57zzPve96LIgIzMyuut3S7AmZm1l1OBGZm\nBedEYGZWcE4EZmYF50RgZlZwTgRmZgU3ayKQtE3ShKSDNeWfkXRI0vOS7kyVb5I0mjy3MlV+laSD\nkl6SdFd7fw0zM2tWIy2C7cB16QJJJeB3gcsj4nLgr5PyIWAdMASsArZKUvKyu4FbI2I5sFxS1Xua\nmVl3zJoIIuJJ4HhN8aeBOyPiZBLzSlK+BtgZEScj4jAwCqyQNAgsjIgDSdy9wNo21N/MzFrU7D2C\n5cBvSdovaZ+kX0/KFwNHU3FjSdli4Fiq/FhSZmZmXXZ6C687KyKukfRe4AHgwvZVy8zMstJsIjgK\n/AtARByQ9Lqkc6i0AM5PxS1JysaA8+qU1yXJCyCZmTUhIjR7VLVGu4aU/Ez6N+BaAEnLgXkR8RNg\nD/B7kuZJWgZcBDwTEePAq5JWJDePbwR2z/SBEeGfCDZv3tz1OvTKj8+Fz4XPxcw/zZq1RSDpfqAE\nnCPpZWAz8I/AdknPA68lF3YiYkTSLmAEOAFsiKna3QZ8BVgAPBwRe5uutZmZtc2siSAiPj7NUzdM\nE38HcEed8m8Bl8+pdmZm1nGeWdzjSqVSt6vQM3wupvhcTPG5aJ1a6VfqFEnRi/UyM+tlkogO3iw2\nM7OcciIwMys4JwIzs4JzIjAzKzgnArNZDA5egCQkMTh4QberY9Z2HjVkVsfg4AVMTBxJlUz+f1RL\nMzjNOsmjhqzQ2v2tvZIEgqkEYJZfbhFYLlSWsGrft/ba93OLwPqBWwRmdaRbCrWthXa0Ipp5D99z\nsF7jFoHlwnQtgurymZ6r/qbfaIugOm4BlTUYYWBgKePjh+dUV7NWuUVg1nWvMXlfofpGc2e5hWGt\nciIwA2B+VRdSu9+vmQt0oxf49I3tLBOQ5Ye7hiwX2tE1VBtX/7mp7p8p9buQqt+v9nWzdw012oXk\nriab1GzXULNbVZoV1GT3z6RG/+bSr2tHi8Osfdw1ZJmYafROsbXehWTWKncNWSZm6qJpxptn/kI2\nXUOdj2tkVFOau4ZskkcNWZ+Z39K34OqZv77wmbVi1kQgaZukCUkH6zz3J5LekHR2qmyTpFFJhySt\nTJVfJemgpJck3dW+X8H6U3eGWuafu5ps7hppEWwHrqstlLQE+DBwJFU2BKwDhoBVwFZNjcW7G7g1\nIpYDyyW96T3NZpK+zzCz+Q3G5dFUgnWStUbNmggi4kngeJ2nvgR8oaZsDbAzIk5GxGFgFFghaRBY\nGBEHkrh7gbVN19pya6abyo0vBPfaDHFFThJm9TU1fFTSauBoRDxf8we1GHgq9XgsKTsJHEuVH0vK\nzapMXewnH7f7gu1hnGa15nyzWNIZwO3A5vZXx/Kk8a4c65zWbspbMTTTIngncAHwXNL/vwT4tqQV\nVFoA56dilyRlY8B5dcqnNTw8fOq4VCpRKpWaqKp1U/W3eyeDdqo/fLaeqRbQxMSCU0l5pkXxrH+U\ny2XK5XLL79PQPAJJFwAPRcTldZ77EXBVRByXdClwH3A1la6fx4B3RURI2g98FjgAfA34ckTsnebz\nPI8gBxofpz/d8guVuF4f99+NeQQzrY7a6Of6byx/OjaPQNL9wDeojPR5WdIna0KC5OteRIwAu4AR\n4GFgQ+qKfhuwDXgJGJ0uCVgRzXRz18w6zTOLrWPa8w1++sXaeuUbvFsE1iu86JzllEf5VMz3TXfr\nGCcCs54y3QW/2VVPzWbntYbMekpW90umX4rCO54Vj+8RWMcUZZRPXuLmuuqp9R6vPmpmZk1xIjCz\nGXg10yLwzWIzm0H1Ter2r/1kvcAtAmuJt6A063++WWwt6cetIB1XP67Rfzf/bfYu3yw2M7Om+B6B\nmeGZy8XmFoGZ4YX/is0tAmszf7M06zduEVib+ZtlUXgpivxwi8DM5qC2xVdJ+J5f0N/cIrC6PD/A\n6nOLL4+cCKyuqf2GKz8TE+NOCmY55a4ha1D9TdDNrP+5RWBNcPeAWZ40snn9NkkTkg6myv5K0iFJ\nz0p6UNKvpp7bJGk0eX5lqvwqSQclvSTprvb/KtYMj/wws0ZaBNuB62rKHgUui4grgVFgE4CkS4F1\nwBCwCtiqqT6Eu4FbI2I5sFxS7XtaF6TvBVSOzaxoZk0EEfEkcLym7PGIeCN5uB9YkhyvBnZGxMmI\nOEwlSayQNAgsjIgDSdy9wNo21N/MeoL3Lehn7bhHcAvwcHK8GDiaem4sKVsMHEuVH0vKzCwX0veN\nPMqs37Q0akjSnwEnIuKf21SfU4aHh08dl0olSqVSuz/CzDqm/iizgYGljI8f7l61cqZcLlMul1t+\nn4b2I5C0FHgoIq5Ild0MfAq4NiJeS8o2AhERW5LHe4HNwBFgX0QMJeXrgQ9ExKen+TzvR5CR6rXn\nF1D5A57UG+vkOy5fcf7b7pxO70eg5Gfyw64HvgCsnkwCiT3AeknzJC0DLgKeiYhx4FVJK5KbxzcC\nu+daWWtd7Yzhah4WalZEs3YNSbofKAHnSHqZyjf824F5wGPJxWR/RGyIiBFJu4AR4ASwIfXV/jbg\nK1S+dj4cEXvb/LtYA6ZGCU3yxDCzovNWlQVTb2vJXus6cFy+4/y33TneqtLMzJriRFAA6fsCZma1\nnAgKoHolUTOzak4EOeVWgJk1yokgp9wKMLNGORGYWYa8JlEv8sY0ZpahqaUnwHsd9wq3CMzMCs6J\nwMx6gjdJ6h53DZlZT0gvf+Iuo2y5RWBmVnBOBGZmBedEYGZWcE4EZmYF50RgZj3IE8+y5FFDZtZF\n86dZD8sTz7LkFkFOzLwFpVmv8vaovcAtgj42OHhBMvZ6kregNLO5c4ugj3mFUSuO+b5f0EGzJgJJ\n2yRNSDqYKjtL0qOSXpT0iKRFqec2SRqVdEjSylT5VZIOSnpJ0l3t/1XMLL+mupCqW8HWDo20CLYD\n19WUbQQej4iLgSeATQCSLgXWAUPAKmCrpjqs7wZujYjlwHJJte9pZmZdMGsiiIgngeM1xWuAHcnx\nDmBtcrwa2BkRJyPiMDAKrJA0CCyMiANJ3L2p19gMam8Cu1lsZu3W7M3icyNiAiAixiWdm5QvBp5K\nxY0lZSeBY6nyY0m5zSK9EFflsW8Cm1l7tWvUUNvvVg4PD586LpVKlEqldn+EmVlfK5fLlMvllt9H\nEbNfwyUtBR6KiCuSx4eAUkRMJN0++yJiSNJGICJiSxK3F9gMHJmMScrXAx+IiE9P83nRSL2KoHKL\npXpY6OS5qX7uzXH1n3Oc4/o/zteH+iQREXPuNmh0+KioHpi+B7g5Ob4J2J0qXy9pnqRlwEXAMxEx\nDrwqaUVy8/jG1GvMzKyLZu0aknQ/UALOkfQylW/4dwIPSLqFyrf9dQARMSJpFzACnAA2pL7a3wZ8\nBVgAPBwRe9v7qxTFdFPyzcya01DXUNbcNTSlXtdQLzTNHee47sUtoDKvAAYGljI+fhiraLZryEtM\nmFmfmVqQzqPo2sNLTJiZFZwTgZlZwTkRmJkVnBOBmeVGekkWL8fSOCeCHpT+z2xmjUsvze5VShvn\nRNCDvM+AmWXJw0fNrI95gmU7OBGYWR+r3uS+eiUca5S7hszMCs6JwMys4JwIzMwKzonAzKzgnAjM\nzArOicDMrOCcCMzMCs6JoMOmW/skXe51Ucysm7xDWYfVbjBff+P5mZ7rxR2iHOe4fogr3k5m3qHM\nzKyKdzJrVEtdQ5I2SXpB0kFJ90maJ+ksSY9KelHSI5IW1cSPSjokaWXr1c+T+V5x1My6oulEIGkp\n8Cng1yLiCiqti48BG4HHI+Ji4AlgUxJ/KbAOGAJWAVvlq17K5LeXfHSJmfUy71tQrZUWwf8CvwTO\nlHQ6cAYwBqwBdiQxO4C1yfFqYGdEnIyIw8AosKKFz+9D/tZv1gu8b0G1phNBRBwH/gZ4mUoCeDUi\nHgcGImIiiRkHzk1eshg4mnqLsaSsQPyt38x6T9M3iyVdCPwxsBR4FXhA0id481Wuqave8PDwqeNS\nqUSpVGqqnmZmeVUulymXyy2/T9PDRyWtAz4cEZ9KHt8AXANcC5QiYkLSILAvIoYkbQQiIrYk8XuB\nzRHxdJ33zu3w0d4ebuc4x+U3Ln1NmW5Yd79rdvhoK/cIXgSukbQguen7IWAE2APcnMTcBOxOjvcA\n65ORRcuAi4BnWvh8M7MGza+awGnVmu4aiojnJN0LfAt4HfgOcA+wENgl6RbgCJWRQkTEiKRdVJLF\nCWBDbr72m1mP805mM/HM4g5z15DjHNf7cXm63mTdNWRmZjngRGBmVnBOBGZWcPMLP8vYi86ZWcF5\ncTq3CMzMCs6JoA3SC1iddtqZHq9sZn3FXUNtMLWAFbzxRr1hamZmvcstAjOzgnMiMDMrOCcCM7OC\ncyJoUvoGsZlZP3MiaFJ6hyMzy4vqVUqLMsHMo4bMzE6pXqW0KBPM3CIwMys4JwIzs4JzIjAzKzgn\nAjOzgnMiMDMrOCcCM7NpFWOvgpYSgaRFkh6QdEjSC5KulnSWpEclvSjpEUmLUvGbJI0m8Stbr352\n0hPIPInMrCgmh5NGMncon1ptEfwt8HBEDAHvBr4HbAQej4iLgSeATQCSLgXWAUPAKmCr+uiKWj2B\nzJPIzCw/mk4Ekn4V+M2I2A4QEScj4lVgDbAjCdsBrE2OVwM7k7jDwCiwotnPNzOz9milRbAMeEXS\ndknflnSPpLcBAxExARAR48C5Sfxi4Gjq9WNJmZmZdVErS0ycDlwF3BYR35T0JSrdQrX9Jk31owwP\nD586LpVKlEql5mppZpZT5XKZcrnc8vsoorn+bkkDwFMRcWHy+P1UEsE7gVJETEgaBPZFxJCkjUBE\nxJYkfi+wOSKervPe0Wy9OqVyO6N257GY5dhxjnNcfuIWULl5DAMDSxkfP0yvkUREzPnea9NdQ0n3\nz1FJy5OiDwEvAHuAm5Oym4DdyfEeYL2keZKWARcBzzT7+WZm2crvCKJWVx/9LHCfpLcCPwQ+CZwG\n7JJ0C3CEykghImJE0i5gBDgBbOi5r/1mZgXUdNdQJ7lryHGOc1yvx/XaNQq60DVkZmb54ERgZlZw\nTgQz8L7EZlYETgQz8L7EZlYETgRmZgXnRGBmVnBOBGZmcza/aln6ft+roNUJZWZmBTQ5y7hiYqK/\nB5S4RWBmVnBOBGZmLevvLS3dNWRm1rKprqJ+7CZyi6CGJ5GZWdE4EdTwJDIzK5rCJ4J0C8CtADMr\nosLfI5hqAUxyMjCzYil8i8DMrOgKmQh8Q9jMOqf/hpIWsmuoujvIycDM2qn/hpIWskVgZpaN/liT\nqOVEIOktkr4taU/y+CxJj0p6UdIjkhalYjdJGpV0SNLKVj/bzKy3TbYOKj+V3oje044WweeAkdTj\njcDjEXEx8ASwCUDSpcA6YAhYBWyVO+nNzLqupUQgaQnwEeAfUsVrgB3J8Q5gbXK8GtgZEScj4jAw\nCqxo5fPNzKx1rbYIvgR8geqB+AMRMQEQEePAuUn5YuBoKm4sKTMzsy5qetSQpN8BJiLiWUmlGUKb\nWqtheHj41HGpVKJUmukjzMz6wfxTw9YHBpYyPn64pXcrl8uUy+WWa6WI5tbUkfSXwO8DJ4EzgIXA\nvwLvAUoRMSFpENgXEUOSNgIREVuS1+8FNkfE03XeO5qtV4N1p3r4aO3M4nrPOc5xjnNce+PafZ2T\nRETM+d5r011DEXF7RJwfERcC64EnIuIG4CHg5iTsJmB3crwHWC9pnqRlwEXAM81+vpmZtUcnJpTd\nCeySdAtwhMpIISJiRNIuKiOMTgAbOvq138zMGtJ011AnuWvIcY5zXBHi+r5ryMzM8sGJwMys4JwI\nzMwKzonAzKzgcpsIaregPO20M70HgZlZHbndj6B2C8o33qi9k29mZpDjFoGZWW/rnZ3MctsiMDPr\nbb2zk5lbBGZmBedEYGZWcE4EZmYF50RgZlZwTgRmZgXnRGBmVnBOBGZmXTe/aiWErOcV5CoRpJeV\nMDPrH5NzCio/lZURspOrRDC1rETvbbZjZtarcpUIzMxs7ppOBJKWSHpC0guSnpf02aT8LEmPSnpR\n0iOSFqVes0nSqKRDkla24xdwd5CZWWtaaRGcBD4fEZcBvwHcJukSYCPweERcDDwBbAKQdCmVjeyH\ngFXAVrXh6u3uIDOz1jSdCCJiPCKeTY5/DhwClgBrgB1J2A5gbXK8GtgZEScj4jAwCqxo9vPNzPIr\n25VJ23KPQNIFwJXAfmAgIiagkiyAc5OwxcDR1MvGkjIzM6syNYooixFELScCSb8CfBX4XNIyqO2j\ncZ+NmVkPa2k/AkmnU0kC/xQRu5PiCUkDETEhaRD4cVI+BpyXevmSpKyu4eHhU8elUolSqdRKVc3M\ncqdcLlMul1t+H0U0/4Vd0r3AKxHx+VTZFuCnEbFF0heBsyJiY3Kz+D7gaipdQo8B74o6FZBUr3i6\nOlC9BWW945mec5zjHOe43o6by/UwIuY8CKfpFoGk9wGfAJ6X9B0qtb4d2ALsknQLcITKSCEiYkTS\nLmAEOAFsaPhqb2ZmHdNSi6BT3CJwnOMc57jsWgSeWWxmVnBOBGZmPa3zcwpaGjVkZmadNjmnACYm\n5tzr0xC3CMzMCq7vEkF6kTkvNGdm1rq+6xqaWmRukpOBmVkr+q5FYGZm7eVEYGZWcE4EZmYF50Rg\nZlZwfZEIvB2lmRmkJ5e1c4JZX4waqh4p5GRgZkU1NbkM2jfBrC9aBGZm1jlOBGZmBedEYGZWcE4E\nZmYF50RgZlZwTgRmZgXXF8NHzcysnvmn5lcNDCxt+l0yTwSSrgfuotIa2RYRW+rFnX32eUl8dnUz\nM+sv7dm0JtOuIUlvAf4OuA64DPiYpEvqxR4//iDHj3+Dn/3suiyraGZ9p9ztCvS9rO8RrABGI+JI\nRJwAdgJr6oe+AzgPaWF2tTOzPlTudgX6XtaJYDFwNPX4WFJmZmZd0rM3ixcuvBnpDH75y+92uypm\nZrmmiJg9ql0fJl0DDEfE9cnjjUDU3jCWlF2lzMxyJCLmfNc460RwGvAi8CHgv4FngI9FxKHMKmFm\nZlUy7RqKiNcl/RHwKFPDR50EzMy6KNMWgZmZ9Z6uLTEh6XpJ35P0kqQvThPzZUmjkp6VdGXWdczK\nbOdC0sclPZf8PCnp8m7UMwuN/L9I4t4r6YSkj2ZZvyw1+DdSkvQdSd+VtC/rOmalgb+RcyR9PblW\nPC/p5i5UMxOStkmakHRwhpi5XTsjIvMfKgno+8BS4K3As8AlNTGrgK8lx1cD+7tR1x45F9cAi5Lj\n64t8LlJx/wH8O/DRbte7i/8vFgEvAIuTx2/vdr27eC42A3dMngfgJ8Dp3a57h87H+4ErgYPTPD/n\na2e3WgSNTCxbA9wLEBFPA4skDWRbzUzMei4iYn9EvJo83E9+5140OuHwM8BXgR9nWbmMNXIuPg48\nGBFjABHxSsZ1zEoj52IcmJx9uhD4SUSczLCOmYmIJ4HjM4TM+drZrUTQyMSy2pixOjF5MNdJdn8A\nfL2jNeqeWc+FpHcAayPibvK9gXUj/y+WA2dL2ifpgKQbMqtdtho5F38PXCbpv4DngM9lVLdeNOdr\nZ89OKLM3k/RB4JNUmoZFdReQ7iPOczKYzenAVcC1wJnAU5Keiojvd7daXbEJeC4iPijpncBjkq6I\niJ93u2L9oFuJYAw4P/V4SVJWG3PeLDF50Mi5QNIVwD3A9RExU7OwnzVyLt4D7FRl7d23A6sknYiI\nPRnVMSuNnItjwCsR8QvgF5L+E3g3lf70PGnkXLwP+AuAiPiBpB8BlwDfzKSGvWXO185udQ0dAC6S\ntFTSPGA9UPuHvAe4EU7NSP6fiJjItpqZmPVcSDofeBC4ISJ+0IU6ZmXWcxERFyY/y6jcJ9iQwyQA\njf2N7AbeL+k0SW+jcmMwj/NyGjkXh4DfBkj6w5cDP8y0ltkS07eG53zt7EqLIKaZWCbpDytPxz0R\n8bCkj0j6PvB/VLpEcqeRcwH8OXA2sDX5JnwiIlZ0r9ad0eC5qHpJ5pXMSIN/I9+T9AhwEHgduCci\nRrpY7Y5o8P/FHcB2Sc9RuUD+aUT8tHu17hxJ9wMl4BxJL1MZMTWPFq6dnlBmZlZw3rPYzKzgnAjM\nzArOicDMrOCcCMzMCs6JwMys4JwIzMwKzonAzKzgnAjMzAru/wFX4nvbeo3b0AAAAABJRU5ErkJg\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(np.random.beta(2, 2, 100000), bins=100);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Two-dimensional Gaussians" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def plot_2d_gaussian(H):\n", " plt.figure(figsize=(4,4)) # Square plot aspect ratio.\n", " H = np.linalg.inv(H)\n", " x, y = np.meshgrid(np.linspace(-5, 5, 300), np.linspace(-5, 5, 300))\n", " plt.contour(x, y, np.exp(-0.5 * (x**2*H[0, 0] + y**2*H[1, 1] + 2*x*y*H[0, 1])))\n", " plt.xlim(-5, 5)\n", " plt.ylim(-5, 5)\n", " \n", " \n", "def plot_samples(H):\n", " L = np.linalg.cholesky(H)\n", " samples = L.dot(np.random.randn(2, 100))\n", " plt.plot(samples[0, :], samples[1, :], 'rx')" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_2d_gaussian(np.eye(2))\n", "plot_samples(np.eye(2))" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_2d_gaussian(3*np.eye(2))\n", "plot_samples(3*np.eye(2))" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "eigen values: [ 3. 1.]\n", "eigen vectors:\n", " [[ 0.70710678 -0.70710678]\n", " [ 0.70710678 0.70710678]]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "C = np.array([[2, 1], [1, 2]])\n", "plot_2d_gaussian(np.matrix(C))\n", "plot_samples(np.matrix(C))\n", "eigvals, eigvecs = np.linalg.eig(C)\n", "print('eigen values:', eigvals)\n", "print('eigen vectors:\\n', eigvecs)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAJBJeb/Ad2Rcku9DURgAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_2d_gaussian(np.matrix([[2, -1], [-1, 2]]))\n", "plot_samples(np.matrix([[2, -1], [-1, 2]]))" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_2d_gaussian(np.matrix([[2, -1], [0.5, 2]]))\n", "plot_samples(np.matrix([[2, -1], [0.5, 2]]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Linear regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generate a linear data set corrupted by noise." ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X shape: (30, 1)\n", "Y shape: (30, 1)\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X = np.random.rand(30, 1)\n", "Y = 3*X + 5 + 0.5*np.random.randn(30, 1)\n", "print('X shape:', X.shape)\n", "print('Y shape:', Y.shape)\n", "plt.plot(X, Y, 'ro')" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_mod shape: (30, 2)\n", "Y shape: (30, 1)\n" ] } ], "source": [ "X_mod = np.hstack((X, np.ones((30, 1))))\n", "print('X_mod shape:', X_mod.shape)\n", "print('Y shape:', Y.shape)" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "slope [ 3.43808859] intercept [ 4.6737675]\n" ] }, { "data": { "image/png": "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\nj/0/+VuHg29tRn0AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "w = np.linalg.solve(X_mod.T.dot(X_mod), X_mod.T.dot(Y))\n", "print('slope', w[0], 'intercept', w[1])\n", "x_lin = np.linspace(0, 1, 100)\n", "plt.plot(X, Y, 'ro')\n", "plt.plot(x_lin, w[0]*x_lin + w[1], 'b-');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Project 1: Regression\n", "\n", "In the following, we use scikit-learn (http://scikit-learn.org/), a Python library which provides a lot of functionality related to Machine Learning (regression, classification, cross-validation, etc.)." ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Contains linear models, e.g., linear regression, ridge regression, LASSO, etc.\n", "import sklearn.linear_model as sklin\n", "# Allows us to create custom scoring functions\n", "import sklearn.metrics as skmet\n", "# Provides train-test split, cross-validation, etc.\n", "import sklearn.cross_validation as skcv\n", "# Provides grid search functionality\n", "import sklearn.grid_search as skgs\n", "# The dataset we will use\n", "from sklearn.datasets import load_boston\n", "# For data normalization\n", "import sklearn.preprocessing as skpr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example data set" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Boston House Prices dataset\n", "\n", "Notes\n", "------\n", "Data Set Characteristics: \n", "\n", " :Number of Instances: 506 \n", "\n", " :Number of Attributes: 13 numeric/categorical predictive\n", " \n", " :Median Value (attribute 14) is usually the target\n", "\n", " :Attribute Information (in order):\n", " - CRIM per capita crime rate by town\n", " - ZN proportion of residential land zoned for lots over 25,000 sq.ft.\n", " - INDUS proportion of non-retail business acres per town\n", " - CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n", " - NOX nitric oxides concentration (parts per 10 million)\n", " - RM average number of rooms per dwelling\n", " - AGE proportion of owner-occupied units built prior to 1940\n", " - DIS weighted distances to five Boston employment centres\n", " - RAD index of accessibility to radial highways\n", " - TAX full-value property-tax rate per $10,000\n", " - PTRATIO pupil-teacher ratio by town\n", " - B 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\n", " - LSTAT % lower status of the population\n", " - MEDV Median value of owner-occupied homes in$1000's\n", "\n", " :Missing Attribute Values: None\n", "\n", " :Creator: Harrison, D. and Rubinfeld, D.L.\n", "\n", "This is a copy of UCI ML housing dataset.\n", "http://archive.ics.uci.edu/ml/datasets/Housing\n", "\n", "\n", "This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\n", "\n", "The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\n", "prices and the demand for clean air', J. Environ. Economics & Management,\n", "vol.5, 81-102, 1978. Used in Belsley, Kuh & Welsch, 'Regression diagnostics\n", "...', Wiley, 1980. N.B. Various transformations are used in the table on\n", "pages 244-261 of the latter.\n", "\n", "The Boston house-price data has been used in many machine learning papers that address regression\n", "problems. \n", " \n", "**References**\n", "\n", " - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\n", " - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n", " - many more! (see http://archive.ics.uci.edu/ml/datasets/Housing)\n", "\n" ] } ], "source": [ "boston = load_boston()\n", "print(boston['DESCR'])" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shape of X: (506, 13)\n", "Shape of Y: (506,)\n" ] } ], "source": [ "feature_names = boston['feature_names']\n", "def get_features(features):\n", " return np.hstack((features,))\n", "X = get_features(boston.data)\n", "Y = boston.target\n", "print('Shape of X:', X.shape)\n", "print('Shape of Y:', Y.shape)\n", "# We can also (optionally) normalize the data\n", "X = skpr.scale(X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data split\n", "\n", "Now, we need to split our data into a train and a test set." ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shape of Xtrain: (379, 13)\n", "Shape of Ytrain: (379,)\n", "Shape of Xtest: (127, 13)\n", "Shape of Ytest: (127,)\n" ] } ], "source": [ "Xtrain, Xtest, Ytrain, Ytest = skcv.train_test_split(X, Y, train_size=0.75)\n", "print('Shape of Xtrain:', Xtrain.shape)\n", "print('Shape of Ytrain:', Ytrain.shape)\n", "print('Shape of Xtest:', Xtest.shape)\n", "print('Shape of Ytest:', Ytest.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Correlations of the variables with the prediction" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "features 13 correlations 14\n", " CRIM -0.3802\n", " ZN +0.3636\n", " INDUS -0.5167\n", " CHAS +0.1191\n", " NOX -0.4379\n", " RM +0.6916\n", " AGE -0.4000\n", " DIS +0.2740\n", " RAD -0.3779\n", " TAX -0.4740\n", " PTRATIO -0.4806\n", " B +0.3468\n", " LSTAT -0.7274\n", " OUTPUT +1.0000\n" ] } ], "source": [ "XYtrain = np.vstack((Xtrain.T, np.atleast_2d(Ytrain)))\n", "correlations = np.corrcoef(XYtrain)[-1, :]\n", "print('features', len(feature_names), 'correlations', len(correlations))\n", "for feature_name, correlation in zip(feature_names, correlations):\n", " print('{0:>10} {1:+.4f}'.format(feature_name, correlation))\n", "print('{0:>10} {1:+.4f}'.format('OUTPUT', correlations[-1]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Training\n", "\n", "We are ready to train a linear regressor on our training set." ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " intercept +22.4402\n", " CRIM -1.1119\n", " ZN +1.1521\n", " INDUS +0.0312\n", " CHAS +0.4564\n", " NOX -1.8296\n", " RM +2.9269\n", " AGE -0.3794\n", " DIS -3.1334\n", " RAD +2.9593\n", " TAX -2.3956\n", " PTRATIO -2.0349\n", " B +0.9132\n", " LSTAT -3.2909\n" ] } ], "source": [ "regressor = sklin.LinearRegression()\n", "regressor.fit(Xtrain, Ytrain)\n", "print('{0:>10} {1:+.4f}'.format('intercept', regressor.intercept_))\n", "for feature_name, coef in zip(feature_names, regressor.coef_):\n", " print('{0:>10} {1:+.4f}'.format(feature_name, coef))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Testing\n", "\n", "We use the following scoring function to estimate the perfomance of our regressor on the test set. The function thesholds any negative prediction to zero, and computes the MSE of the logarithms of our predictions." ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "score = 4.93370765551\n" ] } ], "source": [ "def score(gtruth, pred):\n", " diff = gtruth - pred\n", " return np.sqrt(np.mean(np.square(diff)))\n", "\n", "\n", "Ypred = regressor.predict(Xtest)\n", "print('score =', score(Ytest, Ypred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cross-validation\n", "\n", "Instead of splitting once into training and testing set, we can use cross-validation to perform multiple splits, and also obtain a variance estimate of our generalization score." ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C-V score = 5.83643122652 +/- 1.77733344513\n" ] } ], "source": [ "scorefun = skmet.make_scorer(score)\n", "scores = skcv.cross_val_score(regressor, X, Y, scoring=scorefun, cv=5)\n", "print('C-V score =', np.mean(scores), '+/-', np.std(scores))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Grid search" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "GridSearchCV(cv=5, error_score='raise',\n", " estimator=Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,\n", " normalize=False, random_state=None, solver='auto', tol=0.001),\n", " fit_params={}, iid=True, n_jobs=1,\n", " param_grid={'alpha': array([ 0. , 11.11111, 22.22222, 33.33333, 44.44444,\n", " 55.55556, 66.66667, 77.77778, 88.88889, 100. ])},\n", " pre_dispatch='2*n_jobs', refit=True, scoring=make_scorer(),\n", " verbose=0)" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regressor_ridge = sklin.Ridge()\n", "param_grid = {'alpha': np.linspace(0, 100, 10)}\n", "neg_scorefun = skmet.make_scorer(lambda x, y: -score(x, y)) # Note the negative sign.\n", "grid_search = skgs.GridSearchCV(regressor_ridge, param_grid, scoring=neg_scorefun, cv=5)\n", "grid_search.fit(Xtrain, Ytrain)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us look at the best estimator found." ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ridge(alpha=0.0, copy_X=True, fit_intercept=True, max_iter=None,\n", " normalize=False, random_state=None, solver='auto', tol=0.001)\n", "best score = 4.78213628603\n" ] } ], "source": [ "best = grid_search.best_estimator_\n", "print(best)\n", "print('best score =', -grid_search.best_score_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Output result to file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can predict the output of the validation data and write it to a file." ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Ypred = best.predict(Xtest)\n", "np.savetxt('result_validate.txt', Ypred)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Stochastic gradient descent vs gradient descent" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x_true [ 9.9361688 9.93170226]\n" ] } ], "source": [ "n_points = 100\n", "points = np.random.randn(n_points, 2) + 10\n", "x_true = np.mean(points, axis=0).ravel()\n", "print('x_true', x_true)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n/X9UKhfdgOCsZwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.random.randn(2)\n", "step_size = 0.1\n", "errors = []\n", "for iteration in range(100):\n", " point = np.mean(points, axis=0).ravel()\n", " # point = points[np.random.randint(n_points), :].ravel()\n", " x -= step_size * (x - point)\n", " errors.append(np.linalg.norm(x - x_true))\n", "plt.plot(errors, 'o--');" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Let us now do use SGD for regression" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHttJREFUeJzt3X1w3WWd9/H3NwaRprYgt632gTRkR+ha2MLgWtwVToCu\n3iLqrqMDJqtRh854c3cZtC6VNZxkMsuKdmXZ3vhHtTRbWxBldanC3tIOHl3UIshzLU/paSjJktqb\nljZBsTXf+4/zkF9OkpOT83x+5/OayXAefuf3u/Ij8z1Xr+t7fS9zd0REJFwaKt0AEREpPgV3EZEQ\nUnAXEQkhBXcRkRBScBcRCSEFdxGREJoxuJvZZjMbNrMnA6+9y8x+ZWaPJf97QWmbKSIis5FLz30L\n8L6M174KfNndzwOiwNeK3TAREcnfjMHd3R8EDme8/N/A/OTjU4HBIrdLREQKYLmsUDWzZuCH7n5u\n8vkZwM8BBwx4j7sfKGVDRUQkd/lOqG4G1rr7GcB1wO3Fa5KIiBQq3577UXefF3j/VXefP81nVbxG\nRCQP7m75fjbXnrslf1KeN7OLAczsUuC5bB92d/24E41GK96GavnRvdC90L3I/lOoxpkOMLM7gAhw\nupm9SCI7Zg3wDTN7I/D75HMREakSMwZ3d//ENG+9u8htERGRItEK1TKKRCKVbkLV0L0Yp3sxTvei\neHKaUC3oAmZe6muIiISNmeFlmFAVEZEaouAuIhJCCu4iIiGk4C4iEkIK7iIiIaTgLiISQgruIiIh\npOAuIhJCZQnuPR0dDMTj5biUiIhQphWqI0C0tZW1O3fS3NJS0uuJiIRBTaxQbQJ6+vvp6+oqx+VE\nROpe2cbcm4CxoaFyXU5EpK6VLbiPAg2LFpXrciIida0swX2UxJh7Z29vOS4nIlL3ZgzuZrbZzIbN\n7MmM19ea2V4ze8rMvpLtHBtWrdJkqohIGc24ExOwBdgIbE29YGYR4ArgHHc/YWb/I9sJomefDQrs\nIiJlM2PP3d0fBA5nvPw54CvufiJ5zKGsJ3nrW/Ntn4iI5CHfMfd3ABeZ2W4z+4mZXZD16K9+Nc/L\niIhIPnIZlpnuc6e5+yozexfwXeDM6Q7u7u5OP45EItonUUQkQywWIxaLFe18Oa1QNbNm4Ifufm7y\n+X3Aze7+0+TzF4B3u/v/m+Kz2kNVRGSWyrVC1ZI/Kf8BXJJswDuAk6YK7CIiUhkzDsuY2R1ABDjd\nzF4EosDtwBYzewp4HfhktnMMxOP0dXUxNjhIw+LFdPb2Ki1SRKSEylI47AutrfT099PE+IIm5b2L\niEyv0GGZslWFbAq8NgpsaG8num1bSa8tIlKraqYqZOZzFRETESmdstWWyXyuImIiIqVTluAebW1N\nB3gVERMRKb2yjLnv37cvkS3zi1/QcPLJdN53nyZTRUSyqIkJ1fQ19u2DV16BC7JXKxARqXe1FdxF\nRCQnNZEtIyIi5aXgLiISQgruIiIhpOAuIhJClQnuH/wgPPtsRS4tIlIPKhPc582DX/yiIpcWEakH\n+e7EVJCBs86i7x//kbGtW1UCWESkBMqe5z4Qj7PxoovoeemlSSWAAdV9FxGhBhcx9XR0sG779kkl\ngL/84Q/zhqefVt13ERHKsIjJzDab2bCZPTnFe18wszEze0uuFxwbHJwQ2AeADcCe++5LB3ZIlAXu\n6e+nr6sr11OLiEhSLhOqW4D3Zb5oZkuA1STic+4XXLw4XSFyANgIrAMuPH5cdd9FRIpkxuDu7g8C\nh6d46xbgi7O9YGdvb7oEcB/QQyKIN6C67yIixZJXKqSZfQg44O5PzfazzS0trN25kw3t7fSfemq6\nt95JYudt1X0XESncrFMhzewU4AYSQzLpl7N9pru7O/04EokQiUSIbttGT0cHo8nJ1WZgLfAVYKCh\ngdYrrmDtLbdoMlVE6kIsFiMWixXtfDlly5hZM/BDdz/XzFYAu4DXSAT1JcAg8OfufnCKz05b8ncg\nHmfj6tWTM2QWLKD5G9+AlSvz/sVERGpZWVIhzWwZieB+zhTvxYHz3X2qcfkZ67kPxOOJ3PahIRoW\nLSo4tz19vsFBjs6fT6M7c44eVd68iNSUkgd3M7sDiACnA8NA1N23BN7fB1zg7q9M8/mybdYR/JfA\nIeBWoBeUNy8iNafmFjGVUnCBVA+JFMvMxVIb2tuJbttWlvaIiORLOzEFBBdIjYHy5kWkboUquAcX\nSE2VN78XeDoeJ9rWRk9HBwPxeHkbKCJSJtU5LHP8OPz2t5DjAqbUJOrhRx/l6DPPsNF90pj7XuBm\n4DY0Bi8i1S+cY+5798JHPpLThh6Z6ZR7gevnzuXsFSs4vnBhIlvm2DGejsfZun+/xuBFpCYUGtwr\nUs99RgsXwvDwtG8H0x2f3r9/QtBeDtw5MsKG1tYJQTva1kbT/v0TzqMxeBEJq+oM7qedBq+9Br//\nPbzpTRPeyuypf5ncJk5T4/GZPXfVrhGRMKrOCVUzWLAADk5a8EpfV9eE0sAnkVvBsWDBstQxql0j\nImFVnT13gLe9DV5+Gc44Y8LLmfXgO0kUHEtVl0xPlGYE7XTBssBq2LVasSoiIVW9wX3FisSwTIbM\n4ZVm4LPAJ5ctY0VLS9ag3dzSoslTEakL1Zktk8W0xcaU0igiIRLOVMgZDMTj9F12GWMnnUTDBReo\nIJiIhE5dBncAIhG48Ua45JLZf/bXv4ZDh+B9k3YPFBGpCvVbW2bfPsi3t/7ss7B5c3HbIyJSRWoz\nuP/hD4lFTkuX5vf55csTq2BFREKqeoP7iRPw3HNTv/fii4m6M415JvucdRa88ELiGiIiIVS9wf3I\nEVi1aur3RkbgssvyP/ecOfD2tyeGdkREQmjG4G5mm81s2MyeDLz2VTPba2aPm9m/m9m8orfsLW+B\nY8cSQzCZVq6Eb36zsPNraEZEQiyXnvsWIDOt5H7gne6+Enge+FKxG0ZDA7z1rVOWICiKa66BM88s\nzblFRCpsxuDu7g8ChzNe2+XuY8mnu4ElJWjbeAmCUvjAB+CcSft9i4iEQjHG3D8D/GcRzjPZDKV/\nRURkagXVljGzfwCOu/sd2Y7r7u5OP45EIkQikdwusHJl/o0TEakhsViMWCxWtPPltELVzJqBH7r7\nuYHXOoGrgUvc/fUsny3uCtXf/x5+9Su46KLinVNEpMqUaycmS/6kLvp+4IvARdkCe0k89xx87nOw\nZ09Bpwnu5tSweLHq04hIqMwY3M3sDiACnG5mL5Ion34D8EZgp5kB7Hb3/1XCdo6Lx/MvO5A0ZWXJ\n3btVWVJEQmPG4O7un5ji5S0laEtuihDcM3dzagJ6+vvZ0NWleu8iEgrVu0J1OkUI7pm7OYE2yxaR\ncKnenZiAgf5++q65hrHXXx8fF9+3D9raCjqvNssWkbCr2nruA/E4Gy+7jJ59+ybuuHTJJTSvWwfv\neEfebdJuTiJS7UJbz72vqysd2GF8XLzvtdcKCuwQ2Cz7Yx8j2tDAhvZ2BXYRCZWq7blH29roCST0\nDwB9QP+pp9J6+eXFSV10h+98B668EizvL0gRkaILbc89NS4OicC+EVgHbD1yhHXbt7Nx9WoG4vHC\nLmIGV12lwC4ioVO1wb2zt5doayujJHrsPTB5iKarq1LNExGpalUb3NPj4u3t9J96qlIXRURmoWqD\nOyQCfHTbNlovvzw9RJOi1EURkelVdXBPCQ7RwHjqYmdvbyWbJSJStao2WyZTutDX0BANixYVr9DX\nj36U2O3pM58p/FwiIkVSaLZMzQT3krn9dviv/4ItlSuXIyKSKbSpkGWzYEHp9mkVEakQBfdSbsIt\nIlIhCu4LFsBvf1vpVoiIFNWMwd3MNpvZsJk9GXjtNDO738yeNbMfm9n80jazhFLDMtU8LyAiMku5\n9Ny3AO/LeG09sMvdzwIeAL5U7IaVTVMT3HWXgruIhEpeG2Sb2TPAxe4+bGZvA2LufvY0n63ubBkR\nkSpUqWyZBe4+DODuLwML8m2AiIgUX7EmVNU1FxGpIvluszdsZgsDwzJZcwm7u7vTjyORCJFIJM/L\nioiEUywWIxbYw6JQuY65LyMx5n5O8vnNwCvufrOZXQ+c5u7rp/msxtxFRGap5OUHzOwOIAKcDgwD\nUeA/gO8BS0nspfFxdz8yzeerP7jv2AEHDsA111S6JSIiQOHBfcZhGXf/xDRvXZbvRavOq6/CL3+p\n4C4ioaEVqqD6MiISOgrukKgvoxIEIhIiCu6gnruIhI7quQO8/jq8+c2J/1re8xciIkWjeu7FcPLJ\n8OMfq76MiISGeu4iIlVIPXcREZlEwV1EJIQU3EVEQkjBXUQkhBTcU+65B772tUq3QkSkKPIt+Rs+\nv/sdPPLIpJcH4nH6uroYGxykYfFiOnt7aW5pqUADRURyp1RIkgH86qsZe+QRGj74QS5bs4ZdmzZx\n+IUXOLpnDxtHRmgCRoFoaytrd+5UgBeRkip5yd9CVXtwH4jH2bh6NT39/TQBe4GbGxu57cQJNgDr\ngKbA8aPAhvZ2otu2VaK5IlInlOdeoL6urnRgB/gucNuJEzQBY0wM7CSfjw0NlbOJIiKzVvfBfWxw\ncEIADwb0BhI99aBRoGHRonI0TUQkbwUFdzP7kpntMbMnzWy7mb2xWA0rl4bFiycE8GBA7ySx7VTq\neWrMvbO3t3wNFBHJQ97B3cyagauB89z9XBKZN1cWq2Hl0tnbS7S1NR3APw5c09jIKNAMfBa4au5c\n/v4Nb2DDRz+qyVQRqQl5T6ia2WnAL4ELgWPAD4Bb3X1XxnFVPaEKgXTHoSEaFi1KZ8uknnf29tL8\n138Nt98O559f6eaKSB2oaLaMmV0NfB14Dbjf3f92imOqPrjn5Kab4Ior4JxzKt0SEakDFQvuZnYm\n8CPgL4FXgbuB77n7HRnHhSO4i4iUUaHBvZAVqhcAP3f3V5IN+T7wHuCOzAO7u7vTjyORCJFIpIDL\nioiETywWIxaLFe18hfTc/wzYBrwLeB3YAjzs7rdlHKeeu4jILFVsEZO7PwFsBX4NPAEYsCnf84mI\nSPHUffkBEZFqpPID5eIO3/ymNtEWkZqgnvtsnH467N0LCxZUuiUiEnLquZfT0qXw0kuVboWIyIwU\n3GdjyRIFdxGpCQrus7F0KRw4UOlWiIjMSMF9NtRzF5EaoT1UZ+Oii0AbdYhIDVC2jIhIFVK2jIiI\nTKLgLiISQgruIiIhpOAuIhJCCu6ztWMH7NlT6VaIiGSl4D5b990HRSyoLyJSCgrus6X6MiJSAxTc\nZ0urVEWkBhQU3M1svpl9z8z2mtkeM3t3sRpWrQYaG+m5/36ibW30dHQwEI9XukkiIpMUtELVzPqA\nn7r7FjNrBOa4+9GMY0KzQnUgHmfjxRfTc+AATcAoEG1tZe3OnTS3tFS6eSISIhVboWpm84D3uvsW\nAHc/kRnYw6avqysd2AGagJ7+fvq6uirZLBGRSQoZlmkBDpnZFjN71Mw2mdkpxWpYNRobHEwH9pQm\nYEzFxESkyhRSFbIROB+4xt0fMbN/AdYD0cwDu7u7048jkQiRSKSAy1ZOw+LFjMKEAD8KNCxalPM5\nBuJx+rq6GBscpGHxYjp7ezWkIyLEYjFiRUyzznvM3cwWAr909zOTz/8SuN7dr8g4Llxj7qtX09Pf\nn9eYe6GfF5H6UeiYe6ETqj8Frnb358wsSmJC9fqMY0IT3CHQ8x4aomHRonTPO5ceeU9HB+u2b5/U\n89/Q3k5027ay/h4iUt0KDe6Fbtbxd8B2MzsJ2Ad8usDzVb3mlpZ0IB544QX6vvAFDg8NcXTPHjaO\njIz3yHfvntQj15i9iJRLQXnu7v6Eu7/L3Ve6+9+4+6vFali1G4jH2fje97LuBz/gtIceSgd2mD6L\nJjVmHzTbMXsRkVxom7089XV10fPyy4meN0zqkR8Cnti1i2hbG0fnz6fRneNDQ6w1Y6N7uod/3dKl\nzD92jGhbmyZYRaRoFNzzFBxiaYAJWTQDwK3At4eHOTQ8zK1Ad/L9vcBVc+dy9ooVHF+4kFMefZTu\nHTuyDueIiMyWasvkKTjE0kki/zP1/FtAL4lg3hd4DLAcuHNkhKbWVk6dO5ebtChKREpAwT1Pnb29\nRFtbGQWagc+S6JH//apVDCxYkA7YUw3ZpCZRNcEqIqWiYZk8Nbe0sHbnTjYE0iI3JsfLezo6GE2m\nPGYO2cDESdRCF0WJiEyloDz3nC4Qsjz3XAQXKx0iMf6eGpoJLlwCtKhJRKZU0UVMOV2gDoM7TFzs\ndHTePBrdmXPs2ISFT+nj1q9n7O67afjYx+j8p39SYBcRBffQ+PrX4VOfgtNPr3RLRKQKKLiLiIRQ\nxeq5i4hI9VJwFxEJIQV3EZEQUnAXEQkhLWKqIgM/+Ql9n/scY29/u4qIiUhBlC1TJQbicTZeeik9\n8bgWNImIsmXCoq+rKx3YQUXERKQwBQd3M2sws0fNbEcxGlSvMouIDQAbgP5776Wno4OBeHz8vXic\nno4Oom1tk94TEYHijLlfC/wGmFeEc9WtVAnhJhKBfSPQAzQdOcLo9u1c97OfMf+88zg+PJzTln4i\nUt8K6rmb2RLgAyRKmEsBgiWE+0gG9uR7h4C5Bw7QvWNHzlv6iUh9K7TnfgvwRWB+EdpS14IlhPvv\nvZemI0fS7/UxXlUysz78QPL91PDNZWvWsGvTJsYGB9Pb+805elTZNyJ1Ju/gbmaXA8Pu/riZRYBp\nZ3W7u7vTjyORCJFIJN/LhlpzSwvRbdsm1IOHiQE9WB8+c/hm7/bt3HzXXdx24kS61HA3aPhGpAbE\nYjFisVjRzpd3KqSZ3QR0ACeAU4A3A993909mHKdUyFkK1oNvArqA9UwO6BuAdYwH/p7A856M9yAR\n4De0txPdtq0sv4eI5K9iqZDufoO7n+HuZwJXAg9kBnbJT3qIpr2daFsbIx/+MDecccakLf2ee/Ob\nJwTvYA8/2/Z+IhJ+WqFapVJDNCkD8fikLf36uromDN8Eh2xm2t5PRMJNK1RrWObwzV7g5sbGCWPu\nqYnYvcD1b3oTy1euZE5r64SJV022ilQfbdZR54Lb+TUsWjQetAPb+x0/eJCjTzzBxt/9btKXgEod\niFQnBXeZUU9HB+sCwzfZJls7k8M96tGLVFahwV1j7nUgs7TBdLnyT+7YQc8992j1q0gIqHBYHUiV\nNkg/h/TzVGrlOuDcY8e0+lUkJDQsUweyTbwGc+WjJIZsJnwWuG7hQs5ZvlwrXkXKSGPukpPpJl77\n772XrclSB5lj8QOMZ9xkZt9oElaktBTcpSDBydYJ5QyYuDJ2qsD/LWBgwQJaV6+e0ItPf5EkJ2WV\ndikyewruUpCphmyunzuXs1es4OV9+9h68CAwccgm80tgFLhu6dIpSxJnpl2mzr98xQrmtLYq0ItM\nQ8FdCpY5ZJMKuMFefba6NcHhm2z1bqb6UtDQjsjUFNylZIK9+uCY+1eZOPEaDOCZk7LB57MZ2hGp\nd8pzl5IJ1pgfGxrC582j253+hx5idHh4xpLEmc+Dx03oxR88yOj27cqpFyki9dxl1nItSZwt7VIl\niUWyU89dyi6zRz8ybx43PPYYN7344oSSxGevWEFTaytXr1nDhk2bONzfz9qnn2bjyIhKEouUmHru\nUhTTTcpOd9wTu3bx7cDQDiR6+V9etowVy5YpZVLqniZUpSZNuWoWuA1l0oiAgrvUsGBv/+l4nK37\n9yuTRiSpYsHdzJYAW4GFJBIhvunu/zrFcQruMqNoWxs9yc2Bp5qU1cInqTeVnFA9AXze3R83s7nA\nr83sfnd/poBzSp1KVa5sIlF+OBXYB4DNwJ0jIzTt3s3o7t1KmRTJQSEbZL/s7o8nH4+Q6GAtLlbD\npL509vYSbW1llIn58H2MB3pQGWKRXBWlnruZLQNWAg8V43xSf9Lple3tPLVwYbrevFImRfJTcJ57\nckjmbuDaZA9+ku7u7vTjSCRCJBIp9LISQs0tLUS3bWMgHieazKTJXPFK8nnDokWVaaRIicRiMWLJ\neadiKChbxswagR8B/+nut05zjCZUZdZSmTSH+/s5mlz4pBRJqScVTYU0s63AIXf/fJZjFNylIBPq\nwz/8MJ133knzFVdUulkiJVXJVMi/AH4GPAV48ucGd/+/GccpuEvx3HgjHDsGt9xS6ZaIlFTFUiHd\n/efAG/L9vEheOjuhiOOSImGlwmFSW848kwEz+jo6tG2fSBYqPyA1JbMmjSZYJawKHZYpSp67SLn0\ndXWlAztoUZPIdBTcpaaMDQ5qUZNIDhTcpaakatAEaVGTyGQK7lJTgjVoYHzMvbO3t5LNEqk6mlCV\nmpNe1PTSSxx96CEazzuPOSefzNH582l0Z87RozQsXsxla9awa9MmZdVITdJmHVK3BuJxNl54IT3D\nwxwCbgV6mbwxt7JqpBZpg2ypW31dXfQk92HdwHhgB/gupAM7wCHglP5+ulat4vQLL5y2hx/s/Wf+\nS0A9f6klCu5Ss4KZM5mlgYPPgzs7HTp4kFvvuYduAj38u+7ithMn0r3/bpjwONXzv+5nP2P+eecp\n2EtNUHCXmhXcvSmzNHDweR/jG35k6+EH38s87hAw98ABug8cGB/m0Y5QUsWULSM1K5g50wl0QTqL\n5uPANY2Nk3Z2ytbDz3ZcHxODvRZPSbVTz11qVnr3pq4uxoaG8Hnz6HZnzrFjNCxaxNVr1rBh0yae\n2rWL0eTYfLYe/nSPYXKwHyAR8PvvvZeejg4N0UjVUbaMhF6wHk22rJrge5nHdQHrGd+0OzWGnzrH\n9XPnsnzFCua0tioFU4pCqZAiOUjnxg8NcXTevEQWTLKHnw7GGe9lPh577DFuevFFNgDrmD7QB1Mw\ng4H/DwsX5pSloy8EgcrvxPR+4F9I/Ct2s7vfPMUxCu4SCqkviP5772XrkSNAIqinAn3m8wlZOuT2\nLwbl5EtKJXdiagCeAy4FhoCHgSvd/ZmM4xTck2KxmDYHT6rle9HT0cG67dtpAqIkgndK8Hkw0Gf7\nEugEbmPimP5e4MvLlrFi2bKsufdhy9Gv5b+LYqvkIqY/B55394FkQ74DfBh4Juun6pj+cMfV8r3o\n7O0luns3Pf39WSdoc83SiTN5snYzsHX/fg7t3z9t7n2+OfrF+LIo1XEPPPgg569cOevzVUPbi3Vc\n0b6I3T2vH+CjwKbA8w7gX6c4ziUhGo1WuglVo9bvxf59+7y7vd2vXbXKPz13ro+AO/hvwD/V2Ogj\n4N2Qfj34OPP5xVney/Uc2Y7bD35d8rXpHme2vVLHXZvH+aql7cU4bgT8C62tvn/fPk/GzvxjdN4f\nVHCftVoPaMUUpnuRCvQ3trV5d3u7P/jTn04K/LkGNAf/h0BgvnGax9neyzyu2F8WpTzu4jzOVy1t\nL8ZxqQDf3d5ecHAvZMx9FdDt7u9PPl+fbMzNGcdpwF1EJA9eoQnVNwDPkphQ/W/gV8BV7r4338aI\niEhx5D2h6u5/NLP/DdzPeCqkAruISBUo+SImEREpv5IVDjOz95vZM2b2nJldX6rrVCMzW2JmD5jZ\nHjN7ysz+Lvn6aWZ2v5k9a2Y/NrP5lW5ruZhZg5k9amY7ks/r8l6Y2Xwz+56Z7U3+fby7ju/Fl5L3\n4Ekz225mb6yXe2Fmm81s2MyeDLw27e+evFfPJ/9u/iqXa5QkuCcXOP0f4H3AO4GrzOzsUlyrSp0A\nPu/u7wQuBK5J/v7rgV3ufhbwAPClCrax3K4FfhN4Xq/34lbgPndfDvwZiXUhdXcvzKwZuBo4z93P\nJTFEfBX1cy+2kIiPQVP+7mb2pyQKnS4H/ifwDTObcaK1VD339AIndz8OpBY41QV3f9ndH08+HiGx\n3mQJiXvwb8nD/g34SGVaWF5mtgT4APCtwMt1dy/MbB7wXnffAuDuJ9z9VerwXgBHgT8ATWbWCJwC\nDFIn98LdHwQOZ7w83e/+IeA7yb+X/cDzJGJsVqUK7ouBA4HnLyVfqztmtgxYCewGFrr7MCS+AIAF\nlWtZWd0CfBEITvDU471oAQ6Z2ZbkENUmM5tDHd4Ldz8M/DPwIomg/qq776IO70XAgml+98x4OkgO\n8VSbdZSQmc0F7gauTfbgM2evQz+bbWaXA8PJf8lk+6dk6O8FiaGH84Hb3P18EpUB1lOffxdnAtcB\nzcAiEj34durwXmRR0O9equA+CJwReL4k+VrdSP5T827g2+5+T/LlYTNbmHz/bcDBSrWvjP4C+JCZ\n7QPuBC4xs28DL9fhvXgJOODujySf/zuJYF+PfxcXAD9391fc/Y/AD4D3UJ/3ImW6330QWBo4Lqd4\nWqrg/jDwJ2bWbGZvBK4EdpToWtXqduA37n5r4LUdJIoAAnwKuCfzQ2Hj7je4+xnufiaJv4MH3P1v\ngR9Sf/diGDhgZu9IvnQpsIc6/LsgsQBylZm9KTk5eCmJCfd6uhfGxH/NTve77wCuTGYTtQB/QmLR\naHaF1C7I9gO8n8T/wOeB9aW6TjX+kOit/hF4HHgMeDR5P94C7Erel/uBUyvd1jLfl4uBHcnHdXkv\nSGTIPJz82/g+ML+O78UXSXy5PUliAvGkerkXwB0kSqW/TmLe4dPAadP97iQyZ14gkZzxV7lcQ4uY\nRERCSBOqIiIhpOAuIhJCCu4iIiGk4C4iEkIK7iIiIaTgLiISQgruIiIhpOAuIhJC/x+dmpEy6N3x\njgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dim = 10\n", "step_size = 0.1\n", "X = np.random.randn(n_points, dim)\n", "w_truth = np.random.randn(dim)\n", "y = X.dot(w_truth).ravel() + 0.001 * np.random.randn(n_points)\n", "errors = []\n", "w = np.random.randn(dim)\n", "for iteration in range(100):\n", " idx = np.random.randint(n_points)\n", " point = X[idx, :].ravel()\n", " w -= step_size * (w.dot(point) - y[idx]) * point\n", " errors.append(np.mean(np.square(X.dot(w)-y)))\n", "plt.plot(errors, 'ro--');" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }