{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Import the required modules\n", "import numpy as np\n", "import matplotlib.pylab as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Kernel Function\n", "# Currently only RBF kernel is implemented.\n", "def kernel_fn(x1, x2, kernel_type=\"RBF\", sigma_f=1.27, sigma_n=.3, l=1):\n", " if kernel_type == \"RBF\":\n", " '''\n", " Sanity Check - kernel_fn(2, 2) = 1.27*1.27 + .3*.3 ~ 1.7\n", " '''\n", " return sigma_f**2 * np.exp(-(x1 - x2)**2/(2*l**2)) + (x1==x2)*sigma_n**2" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Training set \n", "x = np.array([-1.50, -1.00, -0.75, -0.40, -0.25, 0.00], dtype=np.double)\n", "y = np.array([[-1.75, -1.25, -.30, .20, .50, 1]], dtype=np.double)\n", "plt.plot(x.ravel(), y.ravel(), \"r*\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Prepare the K Matrix\n", "K = np.zeros(shape=(x.shape[0],x.shape[0]), dtype=np.double)\n", "\n", "# Fill in the K Matrix\n", "for i in range(K.shape[0]):\n", " for j in range(K.shape[1]):\n", " K[i][j] = kernel_fn(x[i], x[j])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Test Data\n", "# x_star = np.array([0.20, -1.2, -.6], dtype=np.double)\n", "x_star = np.linspace(-2.5, 1, 100)\n", "\n", "# Prepare the K Matrix\n", "K_star = np.zeros(shape=(x_star.shape[0],x.shape[0]), dtype=np.double)\n", "K_star_star = np.zeros(shape=(x_star.shape[0],x_star.shape[0]), dtype=np.double)\n", "\n", "# Fill in the K_star matrix\n", "for i in range(K_star.shape[0]):\n", " for j in range(K_star.shape[1]):\n", " K_star[i][j] = kernel_fn(x_star[i], x[j])\n", "\n", "# Fill in the K_star_star matrix\n", "for i in range(K_star_star.shape[0]):\n", " for j in range(K_star_star.shape[1]):\n", " K_star_star[i][j] = kernel_fn(x_star[i], x_star[j])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Compute the predictions with their variances.\n", "exp_y_pred = np.dot(np.dot(K_star, np.linalg.inv(K)), y.T)\n", "var_y_pred = K_star_star - np.dot(np.dot(K_star, np.linalg.inv(K)), K_star.T)\n", "#print(\"Expected Value of y-star = {} with co-variance = {}\".format(exp_y_pred, var_y_pred))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Show the predictions, along with the variances.\n", "plt.plot(x.ravel(), y.ravel(), \"r*\")\n", "plt.plot(x_star.ravel(), exp_y_pred.ravel(), \"b\")\n", "plt.plot(x_star.ravel(), exp_y_pred.ravel() - 2*np.sqrt(np.diag(var_y_pred)), \"y\")\n", "plt.plot(x_star.ravel(), exp_y_pred.ravel() + 2*np.sqrt(np.diag(var_y_pred)), \"y\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "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.12" } }, "nbformat": 4, "nbformat_minor": 0 }