├── .gitignore ├── 1 - Linear Regression from Scratch.ipynb ├── 3 - Binary Logistic Regression from Scratch.ipynb ├── 4 - Multinomial Logistic Regression.ipynb ├── LICENSE ├── README.md └── assets ├── gradient-descent-1.png ├── gradient-descent-1.xml ├── gradient-descent-2.png ├── gradient-descent-2.xml ├── gradient-descent-3.png ├── gradient-descent-3.xml └── sigmoid.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /1 - Linear Regression from Scratch.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import matplotlib.pyplot as plt\n", 10 | "import numpy as np" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 2, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "np.random.seed(1)" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 3, 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "m = np.random.randint(0, 25)\n", 29 | "b = np.random.randint(0, 25)\n", 30 | "xs = np.arange(0, 10, 0.01)\n", 31 | "ys = [(m*x+b)+np.random.normal(scale=5) for x in np.arange(0, 10, 0.01)]" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 4, 37 | "metadata": {}, 38 | "outputs": [ 39 | { 40 | "data": { 41 | "image/png": "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\n", 42 | "text/plain": [ 43 | "
" 44 | ] 45 | }, 46 | "metadata": {}, 47 | "output_type": "display_data" 48 | } 49 | ], 50 | "source": [ 51 | "plt.scatter(xs, ys)\n", 52 | "plt.show()" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 5, 58 | "metadata": {}, 59 | "outputs": [], 60 | "source": [ 61 | "def calc_error(y_hat, y):\n", 62 | " \"\"\"\n", 63 | " Mean squared error between target, y, and prediction y_hat.\n", 64 | " \"\"\"\n", 65 | " error = 0.5 * (y - y_hat) ** 2\n", 66 | " return error" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 6, 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [ 75 | "def calc_errors(y_hats, ys):\n", 76 | " \"\"\"\n", 77 | " Calculates the average error between a list of predictions, y_hats\n", 78 | " and a list of labels, ys.\n", 79 | " \"\"\"\n", 80 | " error = np.mean([calc_error(y_hat, y) for y_hat, y in zip(y_hats, ys)])\n", 81 | " return error" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 7, 87 | "metadata": {}, 88 | "outputs": [ 89 | { 90 | "data": { 91 | "text/plain": [ 92 | "22869.0" 93 | ] 94 | }, 95 | "execution_count": 7, 96 | "metadata": {}, 97 | "output_type": "execute_result" 98 | } 99 | ], 100 | "source": [ 101 | "calc_errors([100,200,300], [1,2,3])" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 8, 107 | "metadata": {}, 108 | "outputs": [], 109 | "source": [ 110 | "pred_m = np.random.normal()\n", 111 | "pred_b = np.random.normal()" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 9, 117 | "metadata": {}, 118 | "outputs": [], 119 | "source": [ 120 | "def predict(pred_m, pred_b, x):\n", 121 | " return pred_m * x + pred_b" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 10, 127 | "metadata": {}, 128 | "outputs": [], 129 | "source": [ 130 | "def predicts(pred_m, pred_b, xs):\n", 131 | " return [predict(pred_m, pred_b, x) for x in xs]" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 11, 137 | "metadata": {}, 138 | "outputs": [], 139 | "source": [ 140 | "y_hats = predicts(pred_m, pred_b, xs)" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 12, 146 | "metadata": {}, 147 | "outputs": [ 148 | { 149 | "data": { 150 | "image/png": "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\n", 151 | "text/plain": [ 152 | "
" 153 | ] 154 | }, 155 | "metadata": {}, 156 | "output_type": "display_data" 157 | } 158 | ], 159 | "source": [ 160 | "plt.scatter(xs, ys)\n", 161 | "plt.plot(xs, y_hats, c='r')\n", 162 | "plt.show()" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 13, 168 | "metadata": {}, 169 | "outputs": [ 170 | { 171 | "data": { 172 | "text/plain": [ 173 | "1141.4820519282366" 174 | ] 175 | }, 176 | "execution_count": 13, 177 | "metadata": {}, 178 | "output_type": "execute_result" 179 | } 180 | ], 181 | "source": [ 182 | "calc_errors(y_hats, ys)" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": 14, 188 | "metadata": {}, 189 | "outputs": [], 190 | "source": [ 191 | "def gradient_step(pred_m, pred_b, xs, ys, eta=0.01):\n", 192 | " \"\"\"\n", 193 | " Performs one gradient descent step using all of the data points\n", 194 | " pred_m (float): predicted m value\n", 195 | " pred_b (float): predicted b value\n", 196 | " xs (list[float]): x values for data points\n", 197 | " ys (list[float]): y values for data points\n", 198 | " eta (float): learning rate\n", 199 | " \"\"\"\n", 200 | " \n", 201 | " N = len(xs)\n", 202 | " grad_m = 0\n", 203 | " grad_b = 0\n", 204 | " \n", 205 | " for x, y in zip(xs, ys):\n", 206 | " grad_m += - (1/N) * x * (y - (pred_m * x + pred_b)) \n", 207 | " grad_b += - (1/N) * (y - (pred_m * x + pred_b))\n", 208 | " \n", 209 | " new_m = pred_m - (eta * grad_m)\n", 210 | " new_b = pred_b - (eta * grad_b)\n", 211 | " \n", 212 | " return new_m, new_b" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": 15, 218 | "metadata": {}, 219 | "outputs": [], 220 | "source": [ 221 | "pred_m, pred_b = gradient_step(pred_m, pred_b, xs, ys)" 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": 16, 227 | "metadata": {}, 228 | "outputs": [], 229 | "source": [ 230 | "y_hats_init = y_hats" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 17, 236 | "metadata": {}, 237 | "outputs": [], 238 | "source": [ 239 | "y_hats = predicts(pred_m, pred_b, xs)" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": 18, 245 | "metadata": {}, 246 | "outputs": [ 247 | { 248 | "data": { 249 | "text/plain": [ 250 | "511.83320752069864" 251 | ] 252 | }, 253 | "execution_count": 18, 254 | "metadata": {}, 255 | "output_type": "execute_result" 256 | } 257 | ], 258 | "source": [ 259 | "calc_errors(y_hats, ys)" 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "execution_count": 19, 265 | "metadata": {}, 266 | "outputs": [ 267 | { 268 | "data": { 269 | "image/png": "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\n", 270 | "text/plain": [ 271 | "
" 272 | ] 273 | }, 274 | "metadata": {}, 275 | "output_type": "display_data" 276 | } 277 | ], 278 | "source": [ 279 | "plt.scatter(xs, ys)\n", 280 | "plt.plot(xs, y_hats_init, c='g')\n", 281 | "plt.plot(xs, y_hats, c='r')\n", 282 | "plt.show()" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": 20, 288 | "metadata": {}, 289 | "outputs": [], 290 | "source": [ 291 | "errors = []\n", 292 | "\n", 293 | "for _ in range(1000):\n", 294 | " pred_m, pred_b = gradient_step(pred_m, pred_b, xs, ys)\n", 295 | " y_hats = predicts(pred_m, pred_b, xs)\n", 296 | " error = calc_errors(y_hats, ys)\n", 297 | " errors.append(error)" 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": 21, 303 | "metadata": {}, 304 | "outputs": [], 305 | "source": [ 306 | "y_hats = predicts(pred_m, pred_b, xs)" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": 22, 312 | "metadata": {}, 313 | "outputs": [ 314 | { 315 | "data": { 316 | "image/png": "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\n", 317 | "text/plain": [ 318 | "
" 319 | ] 320 | }, 321 | "metadata": {}, 322 | "output_type": "display_data" 323 | } 324 | ], 325 | "source": [ 326 | "plt.scatter(xs, ys)\n", 327 | "plt.plot(xs, y_hats_init, c='g')\n", 328 | "plt.plot(xs, y_hats, c='r')\n", 329 | "plt.show()" 330 | ] 331 | }, 332 | { 333 | "cell_type": "code", 334 | "execution_count": 23, 335 | "metadata": {}, 336 | "outputs": [ 337 | { 338 | "data": { 339 | "image/png": "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\n", 340 | "text/plain": [ 341 | "
" 342 | ] 343 | }, 344 | "metadata": {}, 345 | "output_type": "display_data" 346 | } 347 | ], 348 | "source": [ 349 | "plt.plot(errors)\n", 350 | "plt.show()" 351 | ] 352 | } 353 | ], 354 | "metadata": { 355 | "kernelspec": { 356 | "display_name": "Python 3", 357 | "language": "python", 358 | "name": "python3" 359 | }, 360 | "language_info": { 361 | "codemirror_mode": { 362 | "name": "ipython", 363 | "version": 3 364 | }, 365 | "file_extension": ".py", 366 | "mimetype": "text/x-python", 367 | "name": "python", 368 | "nbconvert_exporter": "python", 369 | "pygments_lexer": "ipython3", 370 | "version": "3.6.5" 371 | } 372 | }, 373 | "nbformat": 4, 374 | "nbformat_minor": 2 375 | } 376 | -------------------------------------------------------------------------------- /4 - Multinomial Logistic Regression.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import matplotlib.pyplot as plt\n", 10 | "import numpy as np" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 2, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "np.random.seed(1)" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 3, 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "x0s = np.random.normal(loc=3, size=(1000, 2)) # examples for class 0\n", 29 | "y0s = np.zeros(1000) # labels for class 0\n", 30 | "x1s = np.random.normal(loc=6, size=(1000, 2)) # examples for class 1\n", 31 | "y1s = np.ones(1000) # labels for class 1\n", 32 | "x2s = np.random.normal(loc=9, size=(1000, 2)) # examples for class 2\n", 33 | "y2s = np.full(1000, 2.) # labels for class 2" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 4, 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [ 42 | "xs = np.concatenate((x0s, x1s, x2s)) #all examples\n", 43 | "ys = np.concatenate((y0s, y1s, y2s)) #all labels" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 5, 49 | "metadata": {}, 50 | "outputs": [ 51 | { 52 | "data": { 53 | "image/png": "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\n", 54 | "text/plain": [ 55 | "
" 56 | ] 57 | }, 58 | "metadata": {}, 59 | "output_type": "display_data" 60 | } 61 | ], 62 | "source": [ 63 | "plt.scatter(xs[:,0], xs[:,1], c=ys, alpha=0.25)\n", 64 | "plt.show()" 65 | ] 66 | }, 67 | { 68 | "cell_type": "markdown", 69 | "metadata": {}, 70 | "source": [ 71 | "$e_n = - \\sum^M_{m=1} y_{n,m} \\log(\\hat{y}_{n,m})$" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 6, 77 | "metadata": {}, 78 | "outputs": [], 79 | "source": [ 80 | "def calc_error(y_hat, y, eps=1e-10):\n", 81 | " \"\"\"\n", 82 | " Cross-entropy loss between labels, y, and predictions, y_hat \n", 83 | " \"\"\"\n", 84 | " error = - np.sum([_y*np.log(_y_hat + eps) for (_y, _y_hat) in zip(y, y_hat)])\n", 85 | " \n", 86 | " return error" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 7, 92 | "metadata": {}, 93 | "outputs": [ 94 | { 95 | "name": "stdout", 96 | "output_type": "stream", 97 | "text": [ 98 | "0.510825623599324\n", 99 | "0.2231435511892097\n", 100 | "0.10536051554671516\n", 101 | "-1.000000082690371e-10\n" 102 | ] 103 | } 104 | ], 105 | "source": [ 106 | "print(calc_error([0.2, 0.2, 0.6], [0, 0, 1]))\n", 107 | "\n", 108 | "print(calc_error([0.1, 0.1, 0.8], [0, 0, 1]))\n", 109 | "\n", 110 | "print(calc_error([0.05, 0.05, 0.9], [0, 0, 1]))\n", 111 | "\n", 112 | "print(calc_error([0, 0, 1], [0, 0, 1]))" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": 8, 118 | "metadata": {}, 119 | "outputs": [], 120 | "source": [ 121 | "def softmax(x):\n", 122 | " \"\"\"Compute softmax values for each sets of scores in x.\"\"\"\n", 123 | " return np.exp(x) / np.sum(np.exp(x))" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 9, 129 | "metadata": {}, 130 | "outputs": [ 131 | { 132 | "data": { 133 | "text/plain": [ 134 | "array([0.09003057, 0.24472847, 0.66524096])" 135 | ] 136 | }, 137 | "execution_count": 9, 138 | "metadata": {}, 139 | "output_type": "execute_result" 140 | } 141 | ], 142 | "source": [ 143 | "softmax([1, 2, 3])" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 10, 149 | "metadata": {}, 150 | "outputs": [ 151 | { 152 | "name": "stderr", 153 | "output_type": "stream", 154 | "text": [ 155 | "/home/ben/miniconda3/envs/pytorch04/lib/python3.6/site-packages/ipykernel_launcher.py:3: RuntimeWarning: overflow encountered in exp\n", 156 | " This is separate from the ipykernel package so we can avoid doing imports until\n", 157 | "/home/ben/miniconda3/envs/pytorch04/lib/python3.6/site-packages/ipykernel_launcher.py:3: RuntimeWarning: invalid value encountered in true_divide\n", 158 | " This is separate from the ipykernel package so we can avoid doing imports until\n" 159 | ] 160 | }, 161 | { 162 | "data": { 163 | "text/plain": [ 164 | "array([nan, nan, nan])" 165 | ] 166 | }, 167 | "execution_count": 10, 168 | "metadata": {}, 169 | "output_type": "execute_result" 170 | } 171 | ], 172 | "source": [ 173 | "softmax([1000, 2000, 3000])" 174 | ] 175 | }, 176 | { 177 | "cell_type": "markdown", 178 | "metadata": {}, 179 | "source": [ 180 | "https://stackoverflow.com/questions/42599498/numercially-stable-softmax\n", 181 | "https://stackoverflow.com/questions/34968722/how-to-implement-the-softmax-function-in-python" 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": 11, 187 | "metadata": {}, 188 | "outputs": [], 189 | "source": [ 190 | "def softmax(x):\n", 191 | " \"\"\"Compute softmax values for each sets of scores in x.\"\"\"\n", 192 | " e_x = np.exp(x - np.max(x))\n", 193 | " return e_x / np.sum(e_x)" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": 12, 199 | "metadata": {}, 200 | "outputs": [ 201 | { 202 | "data": { 203 | "text/plain": [ 204 | "array([0.09003057, 0.24472847, 0.66524096])" 205 | ] 206 | }, 207 | "execution_count": 12, 208 | "metadata": {}, 209 | "output_type": "execute_result" 210 | } 211 | ], 212 | "source": [ 213 | "softmax([1, 2, 3])" 214 | ] 215 | }, 216 | { 217 | "cell_type": "code", 218 | "execution_count": 13, 219 | "metadata": {}, 220 | "outputs": [ 221 | { 222 | "data": { 223 | "text/plain": [ 224 | "array([0., 0., 1.])" 225 | ] 226 | }, 227 | "execution_count": 13, 228 | "metadata": {}, 229 | "output_type": "execute_result" 230 | } 231 | ], 232 | "source": [ 233 | "softmax([1000, 2000, 3000])" 234 | ] 235 | }, 236 | { 237 | "cell_type": "code", 238 | "execution_count": 14, 239 | "metadata": {}, 240 | "outputs": [], 241 | "source": [ 242 | "w = np.random.normal(size=(3,2))\n", 243 | "b = np.random.normal(size=(3,1))" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 17, 249 | "metadata": {}, 250 | "outputs": [], 251 | "source": [ 252 | "def predict(w, b, x):\n", 253 | " pred_vals = np.matmul(w, x)\n", 254 | " pred_vals = softmax(pred_vals)\n", 255 | " pred_class = np.argmax(pred_vals)\n", 256 | " return pred_vals, pred_class" 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "execution_count": 21, 262 | "metadata": {}, 263 | "outputs": [ 264 | { 265 | "data": { 266 | "text/plain": [ 267 | "(array([4.13837282e-08, 1.67298610e-04, 9.99832660e-01]), 2)" 268 | ] 269 | }, 270 | "execution_count": 21, 271 | "metadata": {}, 272 | "output_type": "execute_result" 273 | } 274 | ], 275 | "source": [ 276 | "predict(w, b, xs[0])" 277 | ] 278 | }, 279 | { 280 | "cell_type": "code", 281 | "execution_count": 38, 282 | "metadata": {}, 283 | "outputs": [], 284 | "source": [ 285 | "def predicts(w, b, xs):\n", 286 | " pred_vals, pred_classes = map(np.array, zip(*[predict(w, b, x) for x in xs]))\n", 287 | " return pred_vals, pred_classes" 288 | ] 289 | }, 290 | { 291 | "cell_type": "code", 292 | "execution_count": 40, 293 | "metadata": {}, 294 | "outputs": [], 295 | "source": [ 296 | "y_hats, c_hats = predicts(w, b, xs)" 297 | ] 298 | }, 299 | { 300 | "cell_type": "code", 301 | "execution_count": 41, 302 | "metadata": {}, 303 | "outputs": [ 304 | { 305 | "name": "stdout", 306 | "output_type": "stream", 307 | "text": [ 308 | "1005\n" 309 | ] 310 | } 311 | ], 312 | "source": [ 313 | "n_correct = (c_hats == ys).sum()\n", 314 | "\n", 315 | "print(n_correct)" 316 | ] 317 | }, 318 | { 319 | "cell_type": "code", 320 | "execution_count": 42, 321 | "metadata": {}, 322 | "outputs": [ 323 | { 324 | "name": "stdout", 325 | "output_type": "stream", 326 | "text": [ 327 | "0.335\n" 328 | ] 329 | } 330 | ], 331 | "source": [ 332 | "accuracy = n_correct / len(c_hats)\n", 333 | "\n", 334 | "print(accuracy)" 335 | ] 336 | }, 337 | { 338 | "cell_type": "markdown", 339 | "metadata": {}, 340 | "source": [ 341 | "https://deepnotes.io/softmax-crossentropy\n", 342 | "https://eli.thegreenplace.net/2016/the-softmax-function-and-its-derivative/\n", 343 | "http://cs231n.github.io/convolutional-networks/\n", 344 | "\n", 345 | "\\begin{align*}\n", 346 | "z &= w_0 x_0 + w_1 x_1 + b\\\\\n", 347 | "\\hat{y} &= \\sigma (z)\\\\\n", 348 | "\\sigma (z_j) &= \\frac{e^{z_j}}{\\sum^K_{k=1}e^{z_k}} \\\\\n", 349 | "e_n &= - \\sum^M_{m=1} y_{n,m} \\log(\\hat{y}_{n,m}) \\\\\n", 350 | " &= - (y_{n,0} \\log(\\hat{y}_{n,0}) + y_{n,1} \\log(\\hat{y}_{n,1}) + y_{n,2} \\log(\\hat{y}_{n,2}))\n", 351 | "\\end{align*}\n", 352 | "\n", 353 | "Derivative of softmax:\n", 354 | "\n", 355 | "$$ \\sigma (z_j) = \\frac{e^{z_j}}{\\sum^K_{k=1}e^{z_k}} $$\n", 356 | "\n", 357 | "$$\\frac{d\\sigma (z_j)}{d z_j} = \\frac{d}{d z_j} \\frac{e^{z_j}}{\\sum^K_{k=1}e^{z_k}} $$\n", 358 | "\n", 359 | "When $i = j$:\n", 360 | "\n", 361 | "$$ \\frac{d}{d z_j} \\sigma (z_j) = \\frac{e^{z_j}}{\\sum^K_{k=1}e^{z_k}} = \\frac{e^{z_i} \\sum^K_{k=1} e^{z_k} - e^{z_j}e^{z_i}}{(\\sum^K_{k=1} e^z_k)^2} $$ \n", 362 | "\n", 363 | "$$=\\frac{e^{z_i}(\\sum^K_{k=1}e^{z_k}-e^{z_j})}{(\\sum^K_{k=1}e^{z_k})^2}$$\n", 364 | "\n", 365 | "$$=\\frac{e^{z_j}}{\\sum^K_{k=1}e^{z_k}} \\frac{(\\sum^K_{k=1}e^{z_k}-e^{z_j})}{\\sum^K_{k=1}e^{z_k}}$$\n", 366 | "\n", 367 | "$$=p_i(1-p_j)$$\n", 368 | "\n", 369 | "When $i \\neq j$:\n", 370 | "\n", 371 | "\n", 372 | "$$ \\frac{d}{d z_j} \\sigma (z_j) = \\frac{e^{z_j}}{\\sum^K_{k=1}e^{z_k}} = \\frac{0 - e^{z_j}e^{z_i}}{(\\sum^K_{k=1} e^z_k)^2} $$ \n", 373 | "\n", 374 | "$$=\\frac{-e^{z_j}}{\\sum^K_{k=1}e^{z_k}} \\frac{(\\sum^K_{k=1}e^{z_i})}{\\sum^K_{k=1}e^{z_k}}$$\n", 375 | "\n", 376 | "$$=-p_j*p_i$$\n", 377 | "\n", 378 | "For loss function:\n", 379 | "\n", 380 | "$$L= - \\sum_iy_i\\log(p_i)$$\n", 381 | "\n", 382 | "$$=\\frac{d L}{\\hat{y}_i} = -\\sum^ky_k \\frac{d \\log (p_k)}{d \\hat{y}_i}$$\n", 383 | "\n", 384 | "$$=-\\sum_ky_k\\frac{d \\log(p_k)}{d p_k} \\times \\frac{d p_k}{\\hat{y_i}}$$\n", 385 | "\n", 386 | "\n", 387 | "$$=- \\sum y_k \\frac{1}{p_k} \\times \\frac{d p_k}{d o_i}$$\n", 388 | "\n", 389 | "From the softmax derivation earlier:\n", 390 | "\n", 391 | "$$\\frac{d L}{d o_i} = -y_i(1-p_i)-\\sum_{k \\neq i} y_k \\frac{1}{p_k}(-p_kp_i)$$\n", 392 | "\n", 393 | "$$" 394 | ] 395 | }, 396 | { 397 | "cell_type": "code", 398 | "execution_count": 44, 399 | "metadata": {}, 400 | "outputs": [], 401 | "source": [ 402 | "def gradient_step(w, b, xs, ys, eta=0.1):\n", 403 | " \"\"\"\n", 404 | " Performs one gradient descent step using all of the data points\n", 405 | " pred_w0 (float): predicted w0 value\n", 406 | " pred_w1 (float): predicted w1 value\n", 407 | " pred_b (float): predicted b value\n", 408 | " xs (ndarray[float,float]): x values for data points\n", 409 | " ys (ndarray[float]): y values for data points\n", 410 | " eta (float): learning rate\n", 411 | " \"\"\"\n", 412 | " \n", 413 | " N = len(xs) #number of examples, used to average gradients\n", 414 | " grads_w0 = [0, 0, 0]\n", 415 | " grads_w1 = [0, 0, 0]\n", 416 | " grads_b = [0, 0, 0]\n", 417 | " \n", 418 | " for x, y in zip(xs, ys):\n", 419 | " y_hat, _ = predict(w, b, x) #get prediction\n", 420 | " \n", 421 | " #de = ? #derivative of error w.r.t. prediction\n", 422 | " #dz = ? #derivative of softmax\n", 423 | " \n", 424 | " \n", 425 | " #de = (y_hat - y) / (y_hat * (1 - y_hat)) #derivative of error w.r.t. prediction \n", 426 | " #dz = y_hat * (1 - y_hat) #derivative of sigmoid\n", 427 | " dedz = y_hat - y #simplified equation for the two derivatives above\n", 428 | " dw0 = x[0] #derivative of sigmoid w.r.t w0\n", 429 | " dw1 = x[1] #derivative of sigmoid w.r.t w1\n", 430 | " grad_w0 += (1/N) * dedz * dw0 #summing averaged gradients for w0\n", 431 | " grad_w1 += (1/N) * dedz * dw1 #summing averaged gradients for w1\n", 432 | " grad_b += (1/N) * dedz #summing averaged gradients for b\n", 433 | " \n", 434 | " new_w0 = pred_w0 - (eta * grad_w0) #parameter update for w0\n", 435 | " new_w1 = pred_w1 - (eta * grad_w1) #parameter update for w1\n", 436 | " new_b = pred_b - (eta * grad_b) #parameter update for b\n", 437 | " \n", 438 | " return new_w0, new_w1, new_b" 439 | ] 440 | }, 441 | { 442 | "cell_type": "code", 443 | "execution_count": 45, 444 | "metadata": {}, 445 | "outputs": [ 446 | { 447 | "name": "stdout", 448 | "output_type": "stream", 449 | "text": [ 450 | "[4.13837282e-08 1.67298610e-04 9.99832660e-01]\n" 451 | ] 452 | }, 453 | { 454 | "ename": "AssertionError", 455 | "evalue": "", 456 | "output_type": "error", 457 | "traceback": [ 458 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 459 | "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", 460 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgradient_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mw\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mys\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 461 | "\u001b[0;32m\u001b[0m in \u001b[0;36mgradient_step\u001b[0;34m(w, b, xs, ys, eta)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0my_hat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mw\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#get prediction\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_hat\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0;36m1\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;31m#de = (y_hat - y) / (y_hat * (1 - y_hat)) #derivative of error w.r.t. prediction\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;31m#dz = y_hat * (1 - y_hat) #derivative of sigmoid\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 462 | "\u001b[0;31mAssertionError\u001b[0m: " 463 | ] 464 | } 465 | ], 466 | "source": [ 467 | "gradient_step(w, b, xs, ys)" 468 | ] 469 | }, 470 | { 471 | "cell_type": "code", 472 | "execution_count": null, 473 | "metadata": {}, 474 | "outputs": [], 475 | "source": [] 476 | } 477 | ], 478 | "metadata": { 479 | "kernelspec": { 480 | "display_name": "Python 3", 481 | "language": "python", 482 | "name": "python3" 483 | }, 484 | "language_info": { 485 | "codemirror_mode": { 486 | "name": "ipython", 487 | "version": 3 488 | }, 489 | "file_extension": ".py", 490 | "mimetype": "text/x-python", 491 | "name": "python", 492 | "nbconvert_exporter": "python", 493 | "pygments_lexer": "ipython3", 494 | "version": "3.6.5" 495 | } 496 | }, 497 | "nbformat": 4, 498 | "nbformat_minor": 2 499 | } 500 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Ben Trevett 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Gradient Descent 2 | 3 | Let's learn gradient descent by using linear regression, logistic regression and neural networks! 4 | 5 | ## Getting Started 6 | 7 | We'll be making use of `scikit-learn`, `numpy` and `matplotlib`. You can install all three with: 8 | 9 | ``` 10 | pip install scikit-learn numpy matplotlib 11 | ``` 12 | 13 | ## Tutorials 14 | 15 | * 1 - Linear Regression from Scratch 16 | 17 | * 2 - Linear Regression with scikit-learn 18 | 19 | * 3 - Logistic Regression from Scratch 20 | 21 | * 4 - Logistic Regression with scikit-learn 22 | 23 | * 5 - Neural Networks: Forward Propagation 24 | 25 | * 6 - Neural Networks: Backward Propagation -------------------------------------------------------------------------------- /assets/gradient-descent-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bentrevett/gradient-descent/9c8aef6727534021484f666c44f5a02f1a2612ba/assets/gradient-descent-1.png -------------------------------------------------------------------------------- /assets/gradient-descent-1.xml: -------------------------------------------------------------------------------- 1 | 7VdNj5swEP01HFcCnJDkmI/d9tKq0lbq2YGBWOtgakw++us7YJvPhGRXOexhc4js5/HzMO/BgEPW+9M3SbPdDxEBd3w3Ojlk4/j+bB7gfwmcNUBmUw0kkkUa8hrglf0DA7oGLVgEeSdQCcEVy7pgKNIUQtXBqJTi2A2LBe+emtEEBsBrSPkQ/cMitdPo3A8a/DuwZGdP9oKFXtnS8C2RokjNeY5P4uqnl/fUcpkLzXc0EscWRJ4dspZCKD3an9bAy9Lasul9L1dW67wlpOqeDb7ecKC8AJtxlZc621pAGi3LkuIs5DTPWeiQ1U7tOQIeDutLcHESi1S90D3jpfBrUUgGEul+wtEsGq29AOf6KIgGWjTZe3VN0Gog9qDkGUOOjShTU8ldSw+LSeBUsUOXnhpvJDVdfcIvwfBg3zU29gLDY11sVbMUOV5gCGZXu8o3iCY9HkVlAmrAg4PWVTdQpeFlPcmXniN6+l0Z/PkH9Zy4N4geJ+jkgqABx7qstjhIVFV2DbA+UOrT0T74Wwi78JRXyi0xwJ9mp2bRsoClwRQ1U5cd4cGJiLXS6hlPwUl1rSYBk6DbKqB0W1YWrCrhdOVMN4jQQoncWKyccpakOOYQl1QHkIrhU3tpYCWy0sAZDVma/C4nm6fJBaOOutoUHKnh9F4fXzGavd9bNicXbN5/vLQd3bHQiF+mY375qBUGDjtaJC9qvd2WCVrwl11u2oXMeo+TxXzgl8kFv5AH+CV4V8NIRQqP6hYx43wtuJDVKSSiMI/LVpQrKd6gtRKEc9jGlsHk5dWR9gWNIBIW8gCRWf7s7cjvdZFHdaM7mxFqSs+tMHM3Xe+ei55LZ+5oWnUeNj4Yjye9lyT7MdAYWWd8ZyfFafMarcObTxXy/B8= -------------------------------------------------------------------------------- /assets/gradient-descent-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bentrevett/gradient-descent/9c8aef6727534021484f666c44f5a02f1a2612ba/assets/gradient-descent-2.png -------------------------------------------------------------------------------- /assets/gradient-descent-2.xml: -------------------------------------------------------------------------------- 1 | 7VdNc5swEP01HDMDCBPnGNtxemmnM+lMzzIsoImMqBD+6K/vCiQbAXYSTw49hINHelqe1vse+vDIcnt4lrQqvosUuBf66cEjKy8MyX2Evxo4dkAYGiCXLO2g4Ay8sL9gQN+gDUuhdgKVEFyxygUTUZaQKAejUoq9G5YJ7s5a0RxGwEtC+Rj9zVJVdOg8jM/4N2B5YWcO4oduZEOT11yKpjTzeSHJ2qcb3lLLZf5oXdBU7HsQefLIUgqhutb2sASuS2vL1r23vjB6yltCqd7zgvlDO8obsBm3eamjrQWU6aMuKfZKUSK4KNSWYy/A5il/HzuZKNWabhnXqi9FIxlI5PoBezNohA5i3WecLwUXsp2FpBTmWaIZlRSv0BuJkzlsMstg8gpOkVYfgkjSyB2kZnhcClMdSB3xTWGeQWxBySMG7M+Sz4xORU9ti0ngVLGdaxlqnJef6E4z/BQMMwl985GEvuEx38jcdxlqLGAC5qW+hAOe6A0eRWUOasSDmtJjL6zSAfXldIMHd5rw3r+a1ikPGx9fjyfxID5w4rHRZWx7PcXOUOvuaaeHH3J6wmlds+SzzP6/ezEYFJ+EN5pxSBS9z4w36Em+9LyiZzj4mD5rcXnv6nKDoNGEoDHHuiw22MhVW/YOYENA6+NoH/9phB24q1vlHjEgnFWH86BlAUuDKXZMLjvCoxkR66U1MJ6Cg3KtJgGToJs2QLvNrLYYPVt4sxUitFGiNhbTXc7yEtscMk21A6kYnk8eDaxEpQ1c0YSV+S/dWd1FU7vsNVdfdLGeDQ5XfXzBaPZ779mcTNh8uLz0He1Y6IpfZtf8cqsVRg7bW6RuTnr7PRP04C+7vGkXcj9YTh7mI79EE34hn+CXIJgwzHDH4ByvGPqMuy+YghcsmB7Z4yXHFYjWVXfvyNhBnzgX7Zm/PXv6w50l13uPaSdiq3ehLsg56Zqz9eBYvF77+GgSSVOGhR+Gf2TXsiZJkAfDrKIj+SZEvqzoLHIUDebjFSCYUDT4uKLYPV+Mug3mfPkkT/8A -------------------------------------------------------------------------------- /assets/gradient-descent-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bentrevett/gradient-descent/9c8aef6727534021484f666c44f5a02f1a2612ba/assets/gradient-descent-3.png -------------------------------------------------------------------------------- /assets/gradient-descent-3.xml: -------------------------------------------------------------------------------- 1 | 7VnLctowFP0alun4HXsZSEgXbacz6UzTpbCFUSssKotXv75XtmQk2xBgSNLOkEVGOrpcXXTO0SMZ+KP55pGjxewzyzAdeE62Gfj3A88LAw9+S2BbA17i1EDOSVZD7g54In+wAnXYkmS4tAIFY1SQhQ2mrChwKiwMcc7WdtiUUXvWBcpxB3hKEe2i30kmZjUae9EO/4hJPtMzu1FSj0xQ+ivnbFmo+QaeP61+6uE50rnUFy1nKGNrA/IfBv6IMybq1nwzwlQurV62+nPjPaNN3RwX4pgPqC+0QnSJdcVVXWKr1wIX2Z1cUugVrABwOBNzCj0Xmk39DnSmrBBjNCdUsj5iS04wh1xf8FoNKqLdSPYJpSNGGa9m8TOE42kqMwrOfmFjJEpjPJnqDKout4nU/PiApEu+wpka7i6FWh2cWeSrhXnEbI4F30LAekd5qHiaGWxrjGOKBFnZkkFKeXmTrpnhKyNQiecok3iOyqM8Ejt2hhIWMMXqQyaFrTzBC3kE4jkWnTzAKdoaYQsZUO4v103sabxb52BZTR06Pjoc70eteNeKh0Zdse4ZjO2gSt39SvdOUnpKUVmS9FJi/9e16LYW3/fOFGM7UXCcGM/g07/yeYBPr2WmS20ux+4uZxAa9BAaUViX4QQauaiWvQZIG5D8WNxHv5dMD9yUFXN3EOCFi81uUGfBOg2UWGeyswPcmREwo6yW8ATeCFtqHEMRaFIFSLWp3Raiw+EgvAcELQUrlcRkl5K8gDbFU5lqhbkgcD+5U7BgCyngBUpJkX+TnfuboO+UPaTqvSqWs+HNQR3vEZr2uyFzv0fm7e3FVLQloQN6CQ/p5VwpdBS21ki5bPh2DBEY8FUuL8rFv21tJ0nc0UvQoxf/AnpprtzGAQG7tb5RqrttyubymKhW3SAEb4h4VrBs/9DtAqp4Njt6xDpcfmIhtmqhJXMAMS5mLGcFop9YRYh76iHUc9ttHT+9bNVbv4L046raxRUW91N42pF06vXSD1xLGW582euf/qYH7wuUwgNTqmA9IwI/gV3kyBqeuLYaULmoX51TspEMDKsXX8VFh/pc3jxU2xSX/c5R6ms9isZjB35kEo4yAkS2w0+Ri94iUsgDYVoyHfP2iGa/n8OglzXTz26Pn91L+NntEtjjZ9Mkp5j7Q/jO9j7T0XGPo5N3cbS+ouu93rmwo+Oro1/B0UHrhHaCt3O0/6qO/j/9nHT9XAv9rf3sJYmtDO/Cfk6ufn4FP+tVbFgL387Px/zN7croiYw2bybNaM+b+0KMQnf3r4ja0rt/9/gPfwE= -------------------------------------------------------------------------------- /assets/sigmoid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bentrevett/gradient-descent/9c8aef6727534021484f666c44f5a02f1a2612ba/assets/sigmoid.png --------------------------------------------------------------------------------