├── .gitignore ├── Keras Quantile Model.ipynb └── mcycle /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints/ 2 | -------------------------------------------------------------------------------- /Keras Quantile Model.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Deep Quantile Regression\n", 8 | "\n", 9 | "One area that Deep Learning has not explored extensively is the uncertainty in estimates. However, as far as decision making goes, most people actually require quantiles as opposed to true uncertainty in an estimate. eg. For a given age the weight of an individual will vary. What would be interesting is the (for arguments sake) the 10th and 90th percentile. The uncertainty of _the estimate_ of an individuals weight is less interesting." 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": { 16 | "collapsed": false 17 | }, 18 | "outputs": [ 19 | { 20 | "name": "stderr", 21 | "output_type": "stream", 22 | "text": [ 23 | "Using TensorFlow backend.\n" 24 | ] 25 | } 26 | ], 27 | "source": [ 28 | "import pandas as pd\n", 29 | "import numpy as np\n", 30 | "import matplotlib.pyplot as plt\n", 31 | "from keras.models import Sequential\n", 32 | "from keras.layers import Dense, Activation\n", 33 | "import keras.backend as K\n", 34 | "\n", 35 | "%matplotlib inline\n", 36 | "\n", 37 | "mcycle = pd.read_csv('mcycle',delimiter='\\t')" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "Standardise the inputs and outputs so that it is easier to train. I have't saved the mean and standard deviations, but you should." 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 2, 50 | "metadata": { 51 | "collapsed": false 52 | }, 53 | "outputs": [], 54 | "source": [ 55 | "mcycle.times = (mcycle.times - mcycle.times.mean())/mcycle.times.std()\n", 56 | "mcycle.accel = (mcycle.accel - mcycle.accel.mean())/mcycle.accel.std()" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 3, 62 | "metadata": { 63 | "collapsed": false 64 | }, 65 | "outputs": [ 66 | { 67 | "name": "stdout", 68 | "output_type": "stream", 69 | "text": [ 70 | "\r", 71 | "32/94 [=========>....................] - ETA: 0s" 72 | ] 73 | }, 74 | { 75 | "data": { 76 | "text/plain": [ 77 | "0.29437355094767631" 78 | ] 79 | }, 80 | "execution_count": 3, 81 | "metadata": {}, 82 | "output_type": "execute_result" 83 | } 84 | ], 85 | "source": [ 86 | "model = Sequential()\n", 87 | "model.add(Dense(units=10, input_dim=1,activation='relu'))\n", 88 | "model.add(Dense(units=10, input_dim=1,activation='relu'))\n", 89 | "model.add(Dense(1))\n", 90 | "model.compile(loss='mae', optimizer='adadelta')\n", 91 | "model.fit(mcycle.times.values, mcycle.accel.values, epochs=2000, batch_size=32, verbose=0)\n", 92 | "model.evaluate(mcycle.times.values, mcycle.accel.values)" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 4, 98 | "metadata": { 99 | "collapsed": false 100 | }, 101 | "outputs": [ 102 | { 103 | "data": { 104 | "image/png": "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\nAElFTkSuQmCC\n", 105 | "text/plain": [ 106 | "" 107 | ] 108 | }, 109 | "metadata": {}, 110 | "output_type": "display_data" 111 | } 112 | ], 113 | "source": [ 114 | "t_test = np.linspace(mcycle.times.min(),mcycle.times.max(),200)\n", 115 | "y_test = model.predict(t_test)\n", 116 | "\n", 117 | "plt.scatter(mcycle.times,mcycle.accel)\n", 118 | "plt.plot(t_test, y_test,'r')\n", 119 | "plt.show()" 120 | ] 121 | }, 122 | { 123 | "cell_type": "markdown", 124 | "metadata": {}, 125 | "source": [ 126 | "## Quantiles 0.1, 0.5, 0.9\n", 127 | "\n", 128 | "The loss for an individual data point is defined as:\n", 129 | "$$\n", 130 | "\\begin{align}\n", 131 | "\\mathcal{L}(\\xi_i|\\alpha)=\\begin{cases}\n", 132 | "\\alpha \\xi_i &\\text{if }\\xi_i\\ge 0, \\\\\n", 133 | "(\\alpha-1) \\xi_i &\\text{if }\\xi_i< 0.\n", 134 | "\\end{cases}\n", 135 | "\\end{align}\n", 136 | "$$\n", 137 | "where $\\alpha$ is the required quantile and $\\xi_i = y_i - f(\\mathbf{x}_i)$ and, $f(\\mathbf{x}_i)$ is the predicted (quantile) model. The final overall loss is defines as:\n", 138 | "$$\\mathcal{L}(\\mathbf{y},\\mathbf{f}|\\alpha)=\\frac{1}{N} \\sum_{i=1}^N \\mathcal{L}(y_i-f(\\mathbf{x}_i)|\\alpha)$$\n", 139 | "\n", 140 | "The following function defines the loss function for a quantile model.\n", 141 | "\n", 142 | "**Note**: The following 4 lines is ALL that you change in comparison to a normal Deep Learning method, i.e. The loss function is all that changes." 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 5, 148 | "metadata": { 149 | "collapsed": true 150 | }, 151 | "outputs": [], 152 | "source": [ 153 | "def tilted_loss(q,y,f):\n", 154 | " e = (y-f)\n", 155 | " return K.mean(K.maximum(q*e, (q-1)*e), axis=-1)" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 6, 161 | "metadata": { 162 | "collapsed": true 163 | }, 164 | "outputs": [], 165 | "source": [ 166 | "def mcycleModel():\n", 167 | " model = Sequential()\n", 168 | " model.add(Dense(units=10, input_dim=1,activation='relu'))\n", 169 | " model.add(Dense(units=10, input_dim=1,activation='relu'))\n", 170 | " model.add(Dense(1))\n", 171 | " \n", 172 | " return model" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 7, 178 | "metadata": { 179 | "collapsed": false 180 | }, 181 | "outputs": [ 182 | { 183 | "data": { 184 | "image/png": "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\n", 185 | "text/plain": [ 186 | "" 187 | ] 188 | }, 189 | "metadata": {}, 190 | "output_type": "display_data" 191 | } 192 | ], 193 | "source": [ 194 | "qs = [0.1, 0.5, 0.9]\n", 195 | "\n", 196 | "t_test = np.linspace(mcycle.times.min(),mcycle.times.max(),200)\n", 197 | "plt.scatter(mcycle.times,mcycle.accel)\n", 198 | "\n", 199 | "for q in qs:\n", 200 | " model = mcycleModel()\n", 201 | " model.compile(loss=lambda y,f: tilted_loss(q,y,f), optimizer='adadelta')\n", 202 | " model.fit(mcycle.times.values, mcycle.accel.values, epochs=2000, batch_size=32, verbose=0)\n", 203 | " \n", 204 | " # Predict the quantile\n", 205 | " y_test = model.predict(t_test)\n", 206 | " plt.plot(t_test, y_test, label=q) # plot out this quantile\n", 207 | "\n", 208 | "plt.legend() \n", 209 | "plt.show() " 210 | ] 211 | }, 212 | { 213 | "cell_type": "markdown", 214 | "metadata": { 215 | "collapsed": true 216 | }, 217 | "source": [ 218 | "## Final Notes\n", 219 | "\n", 220 | "1. Note that the quantile 0.5 is the same as median, which you can attain by minimising Mean Absolute Error, which you can attain in Keras regardless with `loss='mae'`. \n", 221 | "2. Uncertainty and quantiles are **not** the same thing. But most of the time you care about quantiles and not uncertainty.\n", 222 | "3. If you really do want uncertainty with deep nets checkout http://mlg.eng.cam.ac.uk/yarin/blog_3d801aa532c1ce.html" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": null, 228 | "metadata": { 229 | "collapsed": true 230 | }, 231 | "outputs": [], 232 | "source": [] 233 | } 234 | ], 235 | "metadata": { 236 | "anaconda-cloud": {}, 237 | "kernelspec": { 238 | "display_name": "Python [default]", 239 | "language": "python", 240 | "name": "python3" 241 | }, 242 | "language_info": { 243 | "codemirror_mode": { 244 | "name": "ipython", 245 | "version": 3 246 | }, 247 | "file_extension": ".py", 248 | "mimetype": "text/x-python", 249 | "name": "python", 250 | "nbconvert_exporter": "python", 251 | "pygments_lexer": "ipython3", 252 | "version": "3.5.2" 253 | }, 254 | "latex_envs": { 255 | "bibliofile": "biblio.bib", 256 | "cite_by": "apalike", 257 | "current_citInitial": 1, 258 | "eqLabelWithNumbers": true, 259 | "eqNumInitial": 0 260 | } 261 | }, 262 | "nbformat": 4, 263 | "nbformat_minor": 2 264 | } 265 | -------------------------------------------------------------------------------- /mcycle: -------------------------------------------------------------------------------- 1 | times accel strata v 2 | 2.4 0 1 3.7 3 | 2.6 -1.3 1 3.7 4 | 3.2 -2.7 1 3.7 5 | 3.6 0 1 3.7 6 | 4 -2.7 1 3.7 7 | 6.2 -2.7 1 3.7 8 | 6.6 -2.7 1 3.7 9 | 6.8 -1.3 1 3.7 10 | 7.8 -2.7 1 3.7 11 | 8.2 -2.7 1 3.7 12 | 8.8 -1.3 1 3.7 13 | 9.6 -2.7 1 3.7 14 | 10 -2.7 1 3.7 15 | 10.2 -5.4 1 3.7 16 | 10.6 -2.7 1 3.7 17 | 11 -5.4 1 3.7 18 | 11.4 0 1 3.7 19 | 13.2 -2.7 2 607 20 | 13.6 -2.7 2 607 21 | 13.8 0 2 607 22 | 14.6 -13.3 2 607 23 | 14.8 -2.7 2 607 24 | 15.4 -22.8 2 607 25 | 15.6 -40.2 2 607 26 | 15.8 -21.5 2 607 27 | 16 -42.9 2 607 28 | 16.2 -21.5 2 607 29 | 16.4 -5.4 2 607 30 | 16.6 -59 2 607 31 | 16.8 -71 2 607 32 | 17.6 -37.5 2 607 33 | 17.8 -99.1 2 607 34 | 18.6 -112.5 2 607 35 | 19.2 -123.1 2 607 36 | 19.4 -85.6 2 607 37 | 19.6 -127.2 2 607 38 | 20.2 -123.1 2 607 39 | 20.4 -117.9 2 607 40 | 21.2 -134 2 607 41 | 21.4 -101.9 2 607 42 | 21.8 -108.4 2 607 43 | 22 -123.1 2 607 44 | 23.2 -123.1 2 607 45 | 23.4 -128.5 2 607 46 | 24 -112.5 2 607 47 | 24.2 -95.1 2 607 48 | 24.6 -53.5 2 607 49 | 25 -64.4 2 607 50 | 25.4 -72.3 2 607 51 | 25.6 -26.8 2 607 52 | 26 -5.4 2 607 53 | 26.2 -107.1 2 607 54 | 26.4 -65.6 2 607 55 | 27 -16 2 607 56 | 27.2 -45.6 2 607 57 | 27.6 4 2 607 58 | 28.2 12 2 607 59 | 28.4 -21.5 2 607 60 | 28.6 46.9 2 607 61 | 29.4 -17.4 2 607 62 | 30.2 36.2 2 607 63 | 31 75 2 607 64 | 31.2 8.1 2 607 65 | 32 54.9 2 607 66 | 32.8 46.9 2 607 67 | 33.4 16 2 607 68 | 33.8 45.6 2 607 69 | 34.4 1.3 2 607 70 | 34.8 75 2 607 71 | 35.2 -16 2 607 72 | 35.4 69.6 2 607 73 | 35.6 34.8 2 607 74 | 36.2 -37.5 2 607 75 | 38 46.9 2 607 76 | 39.2 5.4 2 607 77 | 39.4 -1.3 2 607 78 | 40 -21.5 2 607 79 | 40.4 -13.3 2 607 80 | 41.6 30.8 3 138 81 | 42.4 29.4 3 138 82 | 42.8 0 3 138 83 | 43 14.7 3 138 84 | 44 -1.3 3 138 85 | 44.4 0 3 138 86 | 45 10.7 3 138 87 | 46.6 10.7 3 138 88 | 47.8 -26.8 3 138 89 | 48.8 -13.3 3 138 90 | 50.6 0 3 138 91 | 52 10.7 3 138 92 | 53.2 -14.7 3 138 93 | 55 -2.7 3 138 94 | 55.4 -2.7 3 138 95 | 57.6 10.7 3 138 96 | --------------------------------------------------------------------------------