{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#imports and helper functions\n", "import GPy\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "%matplotlib inline\n", "\n", "def plot_hist(bins,bin_ranges,errs,alpha):\n", " \"\"\"Plots a histogram\"\"\"\n", " assert len(bins)==(len(bin_ranges)-1)\n", " yvals = bins/(np.diff(bin_ranges)[:,None])\n", " evals = 1.96*errs/(np.diff(bin_ranges)[:,None]) #the error is in the area, which is 'spread'\n", " plt.bar(bin_ranges[0:-1],yvals,np.diff(bin_ranges),lw=1,alpha=alpha,color='#ccccff')\n", " midpoints = .5*(bin_ranges[0:-1] + bin_ranges[1:])\n", " plt.errorbar(midpoints,yvals,evals,elinewidth=1,capthick=1,color='black',alpha=alpha,lw=0)\n", " \n", "def histogram_data(age,height,weight,age_step,height_step):\n", " inputs = []\n", " simple_inputs = []\n", " outputs = []\n", " for a in np.arange(1.5,8.5,age_step):\n", " for h in np.arange(70,125,height_step):\n", " weights = weight[ (age>=a) & (age=h) & (height < h+height_step) ]\n", " if len(weights)>0:\n", " inputs.append([a,a+age_step,h,h+height_step])\n", " simple_inputs.append([a+(age_step/2.0),h+(height_step/2.0)])\n", " outputs.append(np.mean(weights))\n", " inputs = np.array(inputs)\n", " simple_inputs = np.array(simple_inputs)\n", "\n", " original_outputs = np.array(outputs)\n", " return inputs,simple_inputs,original_outputs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Integral Kernel\n", "\n", "I've called the kernel the 'integral kernel' as we use it when we know observations of the integrals of a function, and want to estimate the function itself.\n", "\n", "Examples include:\n", "\n", "- Knowing how far a robot has travelled after 2, 4, 6 and 8 seconds, but wanting an estimate of its speed after 5 seconds (use the `Integral` kernel)\n", "- Wanting to know an estimate of the density of people aged 23, when we only have the total count for binned age ranges (use the `Integral_Limits` kernel)\n", "- Wanting to estimate the weight distribution from a set of child, for a child of 5 years, with a height of 90cm, given data binned into a 3d table (using the `Multidimensional_Integral_Limits` kernel).\n", "\n", "It should be noted that all three examples can be solved with the `Multidimensional_Integral_Limits` kernel. It might be worth, in the future, removing the other two kernels, to simplify the codebase.\n", "\n", "## Speed of robot\n", "\n", "This is the most simple example. For this example we use the `Integral` kernel.\n", "\n", "We don't know this, but the robot is accelerating at a constant $\\mathtt{1\\; ms}^{-2}$, from stationary at $t=0$. We do know that after two seconds it had travelled two metres, after four seconds it had travelled eight metres, and after six and eight seconds it had travelled 18 and 32 metres respectively. The questions is: How fast was it going after five seconds?" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "After 5 seconds the robot was travelling at 5.00 m/s\n" ] } ], "source": [ "#the observations\n", "times = np.array([2.0,4.0, 6.0, 8.0])[:,None]\n", "distances = np.array([2.0,8.0,18.0,32.0])[:,None]\n", "\n", "#model configuration\n", "kernel = GPy.kern.Integral(input_dim=1,variances=10.0)\n", "m = GPy.models.GPRegression(times,distances,kernel)\n", "m.optimize()\n", "#m.plot_f()\n", "\n", "#prediction for after five seconds\n", "(speed, var) = m.predict_noiseless(np.array([[5.0]]))\n", "print(\"After 5 seconds the robot was travelling at %0.2f m/s\" % speed);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ages of people living in Kelham island: Probability density of being 23\n", "\n", "In this example we are given some binned histogram data: We know that between the ages of zero and ten there are 19 children, between 11 and 20 there are 52, etc." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 10 0]\n", " [ 20 10]\n", " [ 30 20]\n", " [ 40 30]\n", " [ 60 40]\n", " [100 60]]\n" ] }, { "data": { "text/plain": [ "(0, 15)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nnhdbMI8GAOBBeQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "bins = np.array([19,52,114,45,22,20])[None,:]\n", "bin_ranges = np.array([0,10,20,30,40,60,100])\n", "\n", "#The domain of each bin is set by pairs of values in the first two dimensions (see output).\n", "#These could overlap!\n", "X=np.vstack([bin_ranges[1:],bin_ranges[0:-1]]).T\n", "print(X)\n", "Y = bins.T\n", "\n", "kernel = GPy.kern.Integral_Limits(input_dim=2, variances=0.1, lengthscale=10.0)\n", "m = GPy.models.GPRegression(X,Y,kernel)\n", "m.Gaussian_noise=0.001\n", "m.optimize()\n", "\n", "Xtest = np.arange(0,100,1.0) #for plotting\n", "Xpred = np.array([Xtest,np.zeros(len(Xtest))])\n", "Ypred,YpredCov = m.predict_noiseless(Xpred.T)\n", "SE = np.sqrt(YpredCov)\n", "\n", "plot_hist(bins.T,bin_ranges,0,alpha=0.2)\n", "plt.plot(Xtest,Ypred,'r-',label='Mean')\n", "plt.plot(Xtest,Ypred+SE*1.96,'r:',label='95% CI')\n", "plt.plot(Xtest,Ypred-SE*1.96,'r:')\n", "plt.title('Population density of people of different ages')\n", "plt.xlabel('Age')\n", "plt.ylabel('Density (Frequency)')\n", "plt.ylim([0,15])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Predicted range of weights of a child\n", "\n", "I'm quickly generating some example data to illustrate the integral kernel over multiple dimensions." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#generate 100 simulated children heights, weights and ages.\n", "Nchildren = 100\n", "ages = np.random.random(Nchildren)*3.0+3.0 #ages 3 to 6\n", "heights = 70 + ages * 7.0\n", "weights = 9.0 + (heights-70)*0.2\n", "weights += np.random.normal(0,0.3,weights.shape)\n", "heights += np.random.normal(0,3,weights.shape)\n", "ages += np.random.normal(0,0.3,weights.shape)\n", "\n", "#group into a histogram (this is often the sort of data we'll actually have)\n", "spacing_age = 1.0\n", "spacing_height = 5.0\n", "area = spacing_age * spacing_height\n", "inputs, simple_inputs, outputs = histogram_data(ages,heights,weights,spacing_age,spacing_height)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Age Range Height Range Average Weight (rounded)\n" ] }, { "data": { "text/plain": [ "array([[ 2.5, 3.5, 85. , 90. , 13. ],\n", " [ 2.5, 3.5, 90. , 95. , 14. ],\n", " [ 2.5, 3.5, 95. , 100. , 14. ],\n", " [ 2.5, 3.5, 100. , 105. , 14. ],\n", " [ 3.5, 4.5, 85. , 90. , 14. ],\n", " [ 3.5, 4.5, 90. , 95. , 14. ],\n", " [ 3.5, 4.5, 95. , 100. , 15. ],\n", " [ 3.5, 4.5, 100. , 105. , 15. ],\n", " [ 3.5, 4.5, 105. , 110. , 16. ],\n", " [ 4.5, 5.5, 90. , 95. , 15. ],\n", " [ 4.5, 5.5, 95. , 100. , 15. ],\n", " [ 4.5, 5.5, 100. , 105. , 16. ],\n", " [ 4.5, 5.5, 105. , 110. , 16. ],\n", " [ 4.5, 5.5, 110. , 115. , 16. ],\n", " [ 5.5, 6.5, 100. , 105. , 17. ],\n", " [ 5.5, 6.5, 105. , 110. , 17. ],\n", " [ 5.5, 6.5, 110. , 115. , 17. ]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\" Age Range Height Range Average Weight (rounded)\")\n", "np.hstack([inputs,np.round(outputs[:,None])])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now have a set of " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "outputmean = np.mean(outputs)\n", "outputs -= outputmean" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#we have twice as many dimensions as the actual data as each\n", "#pair of dimensions is used to specify one dimension in the domain of each bin.\n", "#the input matrix above is used, so dimension 0 and 1 specify the start\n", "#and end of each bin in the 'age' direction. etc...\n", "kernel = GPy.kern.Multidimensional_Integral_Limits(input_dim=4, variances=1.0, lengthscale=[8.0,4.0])\n", "m = GPy.models.GPRegression(1.0*inputs,1.0*area*outputs[:,None],kernel)\n", "m.optimize()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nxpgq+X+JabOUrVkj6AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "a = 4.0\n", "h = 100.0\n", "Xpred = []\n", "test_heights = range(70,140)\n", "for h in test_heights:\n", " Xpred.append([a,0,h,0])\n", "Xpred = np.array(Xpred)\n", "weight, err = m.predict_noiseless(Xpred)\n", "plt.plot(test_heights,weight+outputmean)\n", "plt.plot(test_heights,weight+outputmean+np.sqrt(err),':')\n", "plt.plot(test_heights,weight+outputmean-np.sqrt(err),':')\n", "plt.xlabel('Height / cm')\n", "plt.ylabel('Weight / kg')\n", "plt.title('Results from Children Age, Height, Weight simulation')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above curve is based on the histogram 'binned' data." ] }, { "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.11" } }, "nbformat": 4, "nbformat_minor": 0 }