Skip to content

Instantly share code, notes, and snippets.

@syrte
Forked from tillahoffmann/weighted_kde.ipynb
Created May 9, 2019 12:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save syrte/b83ec663813fb190674006b1ec70146d to your computer and use it in GitHub Desktop.
Save syrte/b83ec663813fb190674006b1ec70146d to your computer and use it in GitHub Desktop.
Weighted kernel density estimation based on `scipy.stats.gaussian_kde`.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:bd7da438830aee7783ceaabc207256057aa50c3181ef25876eaeb5c71e8e8644"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"from scipy.spatial.distance import cdist\n",
"\n",
"class gaussian_kde(object):\n",
" \"\"\"Representation of a kernel-density estimate using Gaussian kernels.\n",
"\n",
" Kernel density estimation is a way to estimate the probability density\n",
" function (PDF) of a random variable in a non-parametric way.\n",
" `gaussian_kde` works for both uni-variate and multi-variate data. It\n",
" includes automatic bandwidth determination. The estimation works best for\n",
" a unimodal distribution; bimodal or multi-modal distributions tend to be\n",
" oversmoothed.\n",
"\n",
" Parameters\n",
" ----------\n",
" dataset : array_like\n",
" Datapoints to estimate from. In case of univariate data this is a 1-D\n",
" array, otherwise a 2-D array with shape (# of dims, # of data).\n",
" bw_method : str, scalar or callable, optional\n",
" The method used to calculate the estimator bandwidth. This can be\n",
" 'scott', 'silverman', a scalar constant or a callable. If a scalar,\n",
" this will be used directly as `kde.factor`. If a callable, it should\n",
" take a `gaussian_kde` instance as only parameter and return a scalar.\n",
" If None (default), 'scott' is used. See Notes for more details.\n",
" weights : array_like, shape (n, ), optional, default: None\n",
" An array of weights, of the same shape as `x`. Each value in `x`\n",
" only contributes its associated weight towards the bin count\n",
" (instead of 1).\n",
"\n",
" Attributes\n",
" ----------\n",
" dataset : ndarray\n",
" The dataset with which `gaussian_kde` was initialized.\n",
" d : int\n",
" Number of dimensions.\n",
" n : int\n",
" Number of datapoints.\n",
" neff : float\n",
" Effective sample size using Kish's approximation.\n",
" factor : float\n",
" The bandwidth factor, obtained from `kde.covariance_factor`, with which\n",
" the covariance matrix is multiplied.\n",
" covariance : ndarray\n",
" The covariance matrix of `dataset`, scaled by the calculated bandwidth\n",
" (`kde.factor`).\n",
" inv_cov : ndarray\n",
" The inverse of `covariance`.\n",
"\n",
" Methods\n",
" -------\n",
" kde.evaluate(points) : ndarray\n",
" Evaluate the estimated pdf on a provided set of points.\n",
" kde(points) : ndarray\n",
" Same as kde.evaluate(points)\n",
" kde.pdf(points) : ndarray\n",
" Alias for ``kde.evaluate(points)``.\n",
" kde.set_bandwidth(bw_method='scott') : None\n",
" Computes the bandwidth, i.e. the coefficient that multiplies the data\n",
" covariance matrix to obtain the kernel covariance matrix.\n",
" .. versionadded:: 0.11.0\n",
" kde.covariance_factor : float\n",
" Computes the coefficient (`kde.factor`) that multiplies the data\n",
" covariance matrix to obtain the kernel covariance matrix.\n",
" The default is `scotts_factor`. A subclass can overwrite this method\n",
" to provide a different method, or set it through a call to\n",
" `kde.set_bandwidth`.\n",
"\n",
" Notes\n",
" -----\n",
" Bandwidth selection strongly influences the estimate obtained from the KDE\n",
" (much more so than the actual shape of the kernel). Bandwidth selection\n",
" can be done by a \"rule of thumb\", by cross-validation, by \"plug-in\n",
" methods\" or by other means; see [3]_, [4]_ for reviews. `gaussian_kde`\n",
" uses a rule of thumb, the default is Scott's Rule.\n",
"\n",
" Scott's Rule [1]_, implemented as `scotts_factor`, is::\n",
"\n",
" n**(-1./(d+4)),\n",
"\n",
" with ``n`` the number of data points and ``d`` the number of dimensions.\n",
" Silverman's Rule [2]_, implemented as `silverman_factor`, is::\n",
"\n",
" (n * (d + 2) / 4.)**(-1. / (d + 4)).\n",
"\n",
" Good general descriptions of kernel density estimation can be found in [1]_\n",
" and [2]_, the mathematics for this multi-dimensional implementation can be\n",
" found in [1]_.\n",
"\n",
" References\n",
" ----------\n",
" .. [1] D.W. Scott, \"Multivariate Density Estimation: Theory, Practice, and\n",
" Visualization\", John Wiley & Sons, New York, Chicester, 1992.\n",
" .. [2] B.W. Silverman, \"Density Estimation for Statistics and Data\n",
" Analysis\", Vol. 26, Monographs on Statistics and Applied Probability,\n",
" Chapman and Hall, London, 1986.\n",
" .. [3] B.A. Turlach, \"Bandwidth Selection in Kernel Density Estimation: A\n",
" Review\", CORE and Institut de Statistique, Vol. 19, pp. 1-33, 1993.\n",
" .. [4] D.M. Bashtannyk and R.J. Hyndman, \"Bandwidth selection for kernel\n",
" conditional density estimation\", Computational Statistics & Data\n",
" Analysis, Vol. 36, pp. 279-298, 2001.\n",
"\n",
" Examples\n",
" --------\n",
" Generate some random two-dimensional data:\n",
"\n",
" >>> from scipy import stats\n",
" >>> def measure(n):\n",
" >>> \"Measurement model, return two coupled measurements.\"\n",
" >>> m1 = np.random.normal(size=n)\n",
" >>> m2 = np.random.normal(scale=0.5, size=n)\n",
" >>> return m1+m2, m1-m2\n",
"\n",
" >>> m1, m2 = measure(2000)\n",
" >>> xmin = m1.min()\n",
" >>> xmax = m1.max()\n",
" >>> ymin = m2.min()\n",
" >>> ymax = m2.max()\n",
"\n",
" Perform a kernel density estimate on the data:\n",
"\n",
" >>> X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]\n",
" >>> positions = np.vstack([X.ravel(), Y.ravel()])\n",
" >>> values = np.vstack([m1, m2])\n",
" >>> kernel = stats.gaussian_kde(values)\n",
" >>> Z = np.reshape(kernel(positions).T, X.shape)\n",
"\n",
" Plot the results:\n",
"\n",
" >>> import matplotlib.pyplot as plt\n",
" >>> fig = plt.figure()\n",
" >>> ax = fig.add_subplot(111)\n",
" >>> ax.imshow(np.rot90(Z), cmap=plt.cm.gist_earth_r,\n",
" ... extent=[xmin, xmax, ymin, ymax])\n",
" >>> ax.plot(m1, m2, 'k.', markersize=2)\n",
" >>> ax.set_xlim([xmin, xmax])\n",
" >>> ax.set_ylim([ymin, ymax])\n",
" >>> plt.show()\n",
"\n",
" \"\"\"\n",
" def __init__(self, dataset, bw_method=None, weights=None):\n",
" self.dataset = np.atleast_2d(dataset)\n",
" if not self.dataset.size > 1:\n",
" raise ValueError(\"`dataset` input should have multiple elements.\")\n",
" self.d, self.n = self.dataset.shape\n",
" \n",
" if weights is not None:\n",
" self.weights = weights / np.sum(weights)\n",
" else:\n",
" self.weights = np.ones(self.n) / self.n\n",
" \n",
" # Compute the effective sample size \n",
" # http://surveyanalysis.org/wiki/Design_Effects_and_Effective_Sample_Size#Kish.27s_approximate_formula_for_computing_effective_sample_size\n",
" self.neff = 1.0 / np.sum(self.weights ** 2)\n",
"\n",
" self.set_bandwidth(bw_method=bw_method)\n",
"\n",
" def evaluate(self, points):\n",
" \"\"\"Evaluate the estimated pdf on a set of points.\n",
"\n",
" Parameters\n",
" ----------\n",
" points : (# of dimensions, # of points)-array\n",
" Alternatively, a (# of dimensions,) vector can be passed in and\n",
" treated as a single point.\n",
"\n",
" Returns\n",
" -------\n",
" values : (# of points,)-array\n",
" The values at each point.\n",
"\n",
" Raises\n",
" ------\n",
" ValueError : if the dimensionality of the input points is different than\n",
" the dimensionality of the KDE.\n",
"\n",
" \"\"\"\n",
" points = np.atleast_2d(points)\n",
"\n",
" d, m = points.shape\n",
" if d != self.d:\n",
" if d == 1 and m == self.d:\n",
" # points was passed in as a row vector\n",
" points = np.reshape(points, (self.d, 1))\n",
" m = 1\n",
" else:\n",
" msg = \"points have dimension %s, dataset has dimension %s\" % (d,\n",
" self.d)\n",
" raise ValueError(msg)\n",
"\n",
" # compute the normalised residuals\n",
" chi2 = cdist(points.T, self.dataset.T, 'mahalanobis', VI=self.inv_cov) ** 2\n",
" # compute the pdf\n",
" result = np.sum(np.exp(-.5 * chi2) * self.weights, axis=1) / self._norm_factor\n",
"\n",
" return result\n",
"\n",
" __call__ = evaluate\n",
"\n",
" def scotts_factor(self):\n",
" return np.power(self.neff, -1./(self.d+4))\n",
"\n",
" def silverman_factor(self):\n",
" return np.power(self.neff*(self.d+2.0)/4.0, -1./(self.d+4))\n",
"\n",
" # Default method to calculate bandwidth, can be overwritten by subclass\n",
" covariance_factor = scotts_factor\n",
"\n",
" def set_bandwidth(self, bw_method=None):\n",
" \"\"\"Compute the estimator bandwidth with given method.\n",
"\n",
" The new bandwidth calculated after a call to `set_bandwidth` is used\n",
" for subsequent evaluations of the estimated density.\n",
"\n",
" Parameters\n",
" ----------\n",
" bw_method : str, scalar or callable, optional\n",
" The method used to calculate the estimator bandwidth. This can be\n",
" 'scott', 'silverman', a scalar constant or a callable. If a\n",
" scalar, this will be used directly as `kde.factor`. If a callable,\n",
" it should take a `gaussian_kde` instance as only parameter and\n",
" return a scalar. If None (default), nothing happens; the current\n",
" `kde.covariance_factor` method is kept.\n",
"\n",
" Notes\n",
" -----\n",
" .. versionadded:: 0.11\n",
"\n",
" Examples\n",
" --------\n",
" >>> x1 = np.array([-7, -5, 1, 4, 5.])\n",
" >>> kde = stats.gaussian_kde(x1)\n",
" >>> xs = np.linspace(-10, 10, num=50)\n",
" >>> y1 = kde(xs)\n",
" >>> kde.set_bandwidth(bw_method='silverman')\n",
" >>> y2 = kde(xs)\n",
" >>> kde.set_bandwidth(bw_method=kde.factor / 3.)\n",
" >>> y3 = kde(xs)\n",
"\n",
" >>> fig = plt.figure()\n",
" >>> ax = fig.add_subplot(111)\n",
" >>> ax.plot(x1, np.ones(x1.shape) / (4. * x1.size), 'bo',\n",
" ... label='Data points (rescaled)')\n",
" >>> ax.plot(xs, y1, label='Scott (default)')\n",
" >>> ax.plot(xs, y2, label='Silverman')\n",
" >>> ax.plot(xs, y3, label='Const (1/3 * Silverman)')\n",
" >>> ax.legend()\n",
" >>> plt.show()\n",
"\n",
" \"\"\"\n",
" if bw_method is None:\n",
" pass\n",
" elif bw_method == 'scott':\n",
" self.covariance_factor = self.scotts_factor\n",
" elif bw_method == 'silverman':\n",
" self.covariance_factor = self.silverman_factor\n",
" elif np.isscalar(bw_method) and not isinstance(bw_method, string_types):\n",
" self._bw_method = 'use constant'\n",
" self.covariance_factor = lambda: bw_method\n",
" elif callable(bw_method):\n",
" self._bw_method = bw_method\n",
" self.covariance_factor = lambda: self._bw_method(self)\n",
" else:\n",
" msg = \"`bw_method` should be 'scott', 'silverman', a scalar \" \\\n",
" \"or a callable.\"\n",
" raise ValueError(msg)\n",
"\n",
" self._compute_covariance()\n",
"\n",
" def _compute_covariance(self):\n",
" \"\"\"Computes the covariance matrix for each Gaussian kernel using\n",
" covariance_factor().\n",
" \"\"\"\n",
" self.factor = self.covariance_factor()\n",
" # Cache covariance and inverse covariance of the data\n",
" if not hasattr(self, '_data_inv_cov'):\n",
" # Compute the mean and residuals\n",
" _mean = np.sum(self.weights * self.dataset, axis=1)\n",
" _residual = (self.dataset - _mean[:, None])\n",
" # Compute the biased covariance\n",
" self._data_covariance = np.atleast_2d(np.dot(_residual * self.weights, _residual.T))\n",
" # Correct for bias (http://en.wikipedia.org/wiki/Weighted_arithmetic_mean#Weighted_sample_covariance)\n",
" self._data_covariance /= (1 - np.sum(self.weights ** 2))\n",
" self._data_inv_cov = np.linalg.inv(self._data_covariance)\n",
"\n",
" self.covariance = self._data_covariance * self.factor**2\n",
" self.inv_cov = self._data_inv_cov / self.factor**2\n",
" self._norm_factor = np.sqrt(np.linalg.det(2*np.pi*self.covariance)) #* self.n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Unweighted test"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%pylab inline\n",
"import matplotlib.pyplot as plt\n",
"from scipy import stats\n",
"\n",
"#Define parameters\n",
"num_samples = 1000\n",
"xmax = 5\n",
"bins=21\n",
"\n",
"#Generate equal-weighted samples\n",
"samples = np.random.normal(size=num_samples)\n",
"weights = np.ones(num_samples) / num_samples\n",
"\n",
"#Plot a histogram\n",
"plt.hist(samples, bins, (-xmax, xmax), histtype='stepfilled', \n",
" alpha=.2, normed=True, color='k', label='histogram')\n",
"\n",
"#Construct a KDE and plot it\n",
"pdf = gaussian_kde(samples)\n",
"x = np.linspace(-xmax, xmax, 200)\n",
"y = pdf(x)\n",
"plt.plot(x, y, label='kde')\n",
"\n",
"#Plot the samples\n",
"plt.scatter(samples, np.zeros_like(samples), marker='x', \n",
" color='k', alpha=.1, label='samples')\n",
"\n",
"#Plot the true pdf\n",
"y = stats.norm().pdf(x)\n",
"plt.plot(x,y, label='true PDF')\n",
"\n",
"#Boiler plate\n",
"plt.xlabel('Variable')\n",
"plt.ylabel('Density')\n",
"plt.legend(loc='best', frameon=False)\n",
"plt.tight_layout()\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nrkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x10bbbc210>"
]
}
],
"prompt_number": 2
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Weighted test"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from scipy import stats\n",
"\n",
"#Define a Gaussian mixture to draw samples from\n",
"num_samples = 10000\n",
"xmin, xmax = -10, 8\n",
"#Weight attributed to each component of the mixture\n",
"gaussian_weights = np.array([2, 1], dtype=np.float)\n",
"gaussian_weights /= np.sum(gaussian_weights)\n",
"#Mean and std of each mixture\n",
"gaussian_means = np.array([-1, 1])\n",
"gaussian_std = np.array([2, 1])\n",
"#Observation probability of each mixture\n",
"gaussian_observation = np.array([1, .5])\n",
"\n",
"#How many samples belong to each mixture?\n",
"gaussian_samples = np.random.multinomial(num_samples, gaussian_weights)\n",
"samples = []\n",
"weights = []\n",
"#Generate samples and observed samples for each mixture component\n",
"for n, m, s, o in zip(gaussian_samples, gaussian_means, gaussian_std, gaussian_observation):\n",
" _samples = np.random.normal(m, s, n)\n",
" _samples = _samples[o > np.random.uniform(size=n)]\n",
" samples.extend(_samples)\n",
" weights.extend(np.ones_like(_samples) / o)\n",
"\n",
"#Renormalise the sample weights\n",
"weights = np.array(weights, np.float)\n",
"weights /= np.sum(weights)\n",
"samples = np.array(samples)\n",
"\n",
"#Compute the true pdf\n",
"x = np.linspace(xmin, xmax, 200)\n",
"true_pdf = 0\n",
"for w, m, s in zip(gaussian_weights, gaussian_means, gaussian_std):\n",
" true_pdf = true_pdf + w * stats.norm(m, s).pdf(x)\n",
" \n",
"#Plot a histogram\n",
"plt.hist(samples, bins, (xmin, xmax), histtype='stepfilled', \n",
" alpha=.2, normed=True, color='k', label='histogram', weights=weights)\n",
"\n",
"#Construct a KDE and plot it\n",
"pdf = gaussian_kde(samples, weights=weights)\n",
"y = pdf(x)\n",
"plt.plot(x, y, label='weighted kde')\n",
"\n",
"#Compare with a naive kde\n",
"pdf = stats.gaussian_kde(samples)\n",
"y = pdf(x)\n",
"plt.plot(x, y, label='unweighted kde')\n",
"\n",
"#Plot the samples\n",
"plt.scatter(samples, np.zeros_like(samples), marker='x', \n",
" color='k', alpha=.02, label='samples')\n",
"\n",
"#Plot the true pdf\n",
"plt.plot(x,true_pdf, label='true PDF')\n",
"\n",
"#Boiler plate\n",
"plt.xlabel('Variable')\n",
"plt.ylabel('Density')\n",
"plt.legend(loc='best', frameon=False)\n",
"plt.tight_layout()\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nrkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x110e5f210>"
]
}
],
"prompt_number": 10
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"2D weighted test"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from scipy import stats\n",
"\n",
"#Define a Gaussian mixture to draw samples from\n",
"num_samples = 10000\n",
"xmin, xmax = -10, 8\n",
"#Weight attributed to each component of the mixture\n",
"gaussian_weights = np.array([2, 1], dtype=np.float)\n",
"gaussian_weights /= np.sum(gaussian_weights)\n",
"#Mean and std of each mixture\n",
"gaussian_means = np.array([-1, 1])\n",
"gaussian_std = np.array([2, 1])\n",
"#Observation probability of each mixture\n",
"gaussian_observation = np.array([1, .5])\n",
"\n",
"#How many samples belong to each mixture?\n",
"gaussian_samples = np.random.multinomial(num_samples, gaussian_weights)\n",
"samples = []\n",
"weights = []\n",
"#Generate samples and observed samples for each mixture component\n",
"for n, m, s, o in zip(gaussian_samples, gaussian_means, gaussian_std, gaussian_observation):\n",
" _samples = np.random.normal(m, s, (n, 2))\n",
" _samples = _samples[o > np.random.uniform(size=n)]\n",
" samples.extend(_samples)\n",
" weights.extend(np.ones(len(_samples)) / o)\n",
"\n",
"#Renormalise the sample weights\n",
"weights = np.array(weights, np.float)\n",
"weights /= np.sum(weights)\n",
"samples = np.transpose(samples)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#Evaluate the true pdf on a grid\n",
"x = np.linspace(xmin, xmax, 100)\n",
"xx, yy = np.meshgrid(x, x)\n",
"true_pdf = 0\n",
"for w, m, s in zip(gaussian_weights, gaussian_means, gaussian_std):\n",
" true_pdf = true_pdf + w * stats.norm(m, s).pdf(xx) * stats.norm(m, s).pdf(yy)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#Evaluate the kde on a grid\n",
"pdf = gaussian_kde(samples, weights=weights)\n",
"zz = pdf((np.ravel(xx), np.ravel(yy)))\n",
"zz = np.reshape(zz, xx.shape)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"kwargs = dict(extent=(xmin, xmax, xmin, xmax), cmap='hot', origin='lower')\n",
"#Plot the true pdf\n",
"plt.subplot(221)\n",
"plt.imshow(true_pdf.T, **kwargs)\n",
"plt.title('true PDF')\n",
"\n",
"#Plot the kde\n",
"plt.subplot(222)\n",
"plt.imshow(zz.T, **kwargs)\n",
"plt.title('kde')\n",
"plt.tight_layout()\n",
"\n",
"#Plot a histogram\n",
"ax = plt.subplot(223)\n",
"plt.hist2d(samples[0], samples[1], bins, ((xmin, xmax), (xmin, xmax)), \n",
" True, weights, cmap='hot')\n",
"ax.set_aspect(1)\n",
"plt.title('histogram')\n",
"plt.tight_layout()\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x103b13a90>"
]
}
],
"prompt_number": 7
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment