{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Filter Example\n", "\n", "This example demonstrates the connection between MKS and signal\n", "processing for a 1D filter. It shows that the filter is in fact the\n", "same as the influence coefficients and, thus, applying the `predict`\n", "method provided by the `MKSLocalizationnModel` is in essence just applying a filter." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we construct a filter, $F$, such that\n", "\n", "$$F\\left(x\\right) = e^{-|x|} \\cos{\\left(2\\pi x\\right)} $$\n", "\n", "We want to show that if $F$ is used to generate sample calibration\n", "data for the MKS, then the calculated influence coefficients are in\n", "fact just $F$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x0 = -10.\n", "x1 = 10.\n", "x = np.linspace(x0, x1, 1000)\n", "def F(x):\n", " return np.exp(-abs(x)) * np.cos(2 * np.pi * x)\n", "p = plt.plot(x, F(x), color='#1a9850')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we generate the sample data `(X, y)` using\n", "`scipy.ndimage.convolve`. This performs the convolution\n", "\n", "$$ p\\left[ s \\right] = \\sum_r F\\left[r\\right] X\\left[r - s\\right] $$\n", "\n", "for each sample." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import scipy.ndimage\n", "\n", "n_space = 101\n", "n_sample = 50\n", "np.random.seed(201)\n", "x = np.linspace(x0, x1, n_space)\n", "X = np.random.random((n_sample, n_space))\n", "y = np.array([scipy.ndimage.convolve(xx, F(x), mode='wrap') for xx in X])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this problem, a basis is unnecessary as no discretization is\n", "required in order to reproduce the convolution with the MKS localization. Using\n", "the `ContinuousIndicatorBasis` with `n_states=2` is the equivalent of a\n", "non-discretized convolution in space." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from pymks import MKSLocalizationModel\n", "from pymks import PrimitiveBasis\n", "\n", "prim_basis = PrimitiveBasis(n_states=2, domain=[0, 1])\n", "model = MKSLocalizationModel(basis=prim_basis)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fit the model using the data generated by $F$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "model.fit(X, y)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To check for internal consistency, we can compare the predicted\n", "output with the original for a few values" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-0.41059557 0.20004566 0.61200171 0.5878077 ]\n", "[-0.41059556 0.20004566 0.6120017 0.58780769]\n" ] } ], "source": [ "y_pred = model.predict(X)\n", "print y[0, :4]\n", "print y_pred[0, :4]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With a slight linear manipulation of the coefficients, they agree perfectly with the shape of the filter, $F$. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, F(x), label=r'$F$', color='#1a9850')\n", "plt.plot(x, -model.coeff[:,0] + model.coeff[:, 1], \n", " 'k--', label=r'$\\alpha$')\n", "l = plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some manipulation of the coefficients is required to reproduce the filter. Remember the convolution for the MKS is\n", "\n", "$$ p \\left[s\\right] = \\sum_{l=0}^{L-1} \\sum_{r=0}^{S - 1} \\alpha[l, r] m[l, s - r] $$\n", "\n", "However, when the primitive basis is selected, the `MKSLocalizationModel` solves a modified form of this. There are always redundant coefficients since\n", "\n", "$$ \\sum\\limits_{l=0}^{L-1} m[l, s] = 1 $$\n", "\n", "Thus, the regression in Fourier space must be done with categorical variables, and the regression takes the following form.\n", "\n", "\n", "$$ \\begin{split}\n", "p [s] & = \\sum_{l=0}^{L - 1} \\sum_{r=0}^{S - 1} \\alpha[l, r] m[l, s -r] \\\\\n", "P [k] & = \\sum_{l=0}^{L - 1} \\beta[l, k] M[l, k] \\\\\n", "&= \\beta[0, k] M[0, k] + \\beta[1, k] M[1, k]\n", "\\end{split}\n", "$$\n", "\n", "where\n", "\n", "$$\\beta[0, k] = \\begin{cases}\n", "\\langle F(x) \\rangle ,& \\text{if } k = 0\\\\\n", "0, & \\text{otherwise}\n", "\\end{cases} $$\n", "\n", "This removes the redundancies from the regression, and we can reproduce the filter." ] }, { "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.10" } }, "nbformat": 4, "nbformat_minor": 0 }