{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook was put together by [Jake Vanderplas](http://www.vanderplas.com). Source and license info is on [GitHub](https://github.com/jakevdp/sklearn_tutorial/)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Density Estimation: Gaussian Mixture Models"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we'll explore **Gaussian Mixture Models**, which is an unsupervised clustering & density estimation technique.\n",
"\n",
"We'll start with our standard set of initial imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy import stats\n",
"\n",
"plt.style.use('seaborn')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introducing Gaussian Mixture Models\n",
"\n",
"We previously saw an example of K-Means, which is a clustering algorithm which is most often fit using an expectation-maximization approach.\n",
"\n",
"Here we'll consider an extension to this which is suitable for both **clustering** and **density estimation**.\n",
"\n",
"For example, imagine we have some one-dimensional data in a particular distribution:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n",
" warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAewAAAFJCAYAAABZ+x49AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAG5JJREFUeJzt3X9snWX9//FXe85OnT1nFsPBoXLm\nGBz5kdSuI9OkFNyagi6YLyJsXaUGu7CxCMLofjGh67rSdmAnCtsQ3Y6mDtsJiaJ/aKgb61aHmSce\nm850xhG7RMhyli3S+wg9dOf+/rEPt5T9uE/Hac+5ep6PhGT3ue5zeJ/37p3Xue5zn+sU2LZtCwAA\n5LTCbBcAAADcEdgAABiAwAYAwAAENgAABiCwAQAwAIENAIABvNku4H2jo2d0+vR/s11Gzrvsso/T\npzTRq/TQp/TQp/TRq/QEg4Fx7Z8zM2yv15PtEoxAn9JHr9JDn9JDn9JHryZGzgQ2AAC4MAIbAAAD\nENgAABiAwAYAwAAENgAABiCwAQAwAIENAIABCGwAAAxAYAMAYAACGwAAAxDYAAAYgMAGAMAArr/W\nlUql1NTUpKNHj8rn86mlpUWzZs0as8+pU6dUU1Oj3/72tyoqKtKZM2fU1tamgYEBJZNJPfTQQ1qw\nYMGEPQnAVPXtey84tmv9wkmsBECuc51h9/T0KJlMqru7Ww0NDWpvbx8zfuDAAdXX1+vkyZPObb/5\nzW80Ojqqrq4u7dixQ0NDQ5mvHACAPOIa2NFoVJWVlZKksrIyDQwMjH2AwkJFIhGVlJQ4tx08eFAz\nZ87U8uXL9fjjj2vhQmYKAAB8FK6nxC3Lkt/vd7Y9Ho9GR0fl9Z69a0VFxTn3OX36tIaGhvTjH/9Y\nhw8f1mOPPabdu3e7FjPeH/POV/QpfSb3ajJrN7lPk4k+pY9eZZ5rYPv9fiUSCWc7lUo5YX0hJSUl\n+vKXv6yCggLNnz9f//rXv9IqJh4fTmu/fBYMBuhTmkzv1WTVbnqfJgt9Sh+9Ss9439S4nhIvLy9X\nb2+vJCkWiykcDrs+6Lx587R//35J0uDgoK688spxFQUAAMZynWFXV1err69PNTU1sm1bra2tikQi\nCoVCqqqqOu99Fi9erI0bN2rx4sWybVubNm3KeOEAAOQT18AuLCxUc3PzmNvmzJlzzn579/7v6yk+\n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\ndXV1lqvMvg/36e9//7u+/e1vq76+PsuV5ZZXXnlFJSUlevrpp3X69Gl9/etf13XXXTeuYyrrbw/L\ny8vV1NTkbFuWpWQyqVAopIKCAt188806dOhQ9grMMUeOHNGJEydUV1en+++/X2+88Ua2S8opF1uZ\nD2MNDg7qnXfeUX19vb71rW8pFotlu6ScEgqF9OyzzzrbR44c0fz58yWdXcHxT3/6U7ZKyykf7tPA\nwIBee+01ffOb39SGDRtkWVYWq8sdX/nKV/Twww872x6PZ9zH1KQF9q9+9SvdcccdY/7r7+/XokWL\nVFBQ4Oz34ZXV0l0pbSo6X88uv/xyLV++XJ2dnVqxYoXWrFmT7TJzyoVW5sO5Pvaxj2nZsmXauXOn\nNm3apNWrV9OrD7j99tudRaKksx9Hvf9alc+vSx/24T6VlpZq7dq12r17t6666ipt27Yti9XljuLi\nYvn9flmWpe9+97t65JFHxn1MTdop8XvuuUf33HOP637nWz0tX1dKO1/P3nnnHXk8HknSTTfdpBMn\nToz5S893F1uZD2PNnj1bs2bNUkFBgWbPnq2SkhLF43FdeeWV2S4tJ33ws8V8fl1yU11d7fSmurpa\nmzdvznJFueOtt97Sd77zHdXW1uprX/uann76aWcsnWMq66fEP8zv92vatGk6fvy4bNvWwYMHddNN\nN2W7rJzx3HPP6ec//7mks6c0P/3pTxPWH3Cxlfkw1ksvveT8+t6JEydkWZaCwWCWq8pdN9xwg/78\n5z9LOruCI69L57ds2TL19/dLkg4dOsT1R//n5MmTqq+v15o1a3T33XdLGv8xlZNTj/dPz505c0Y3\n33yzvvCFL2S7pJyxfPlyrVmzRvv375fH4+Gq3g+prq5WX1+fampqnJX5cH533323HnvsMS1dulQF\nBQVqbW3lbMRFrFu3Tk888YS2bt2qq6++Wrfffnu2S8pJTU1N2rx5s6ZNm6bLL7+cGfb/ef755/X2\n229r+/bt2r59uyTpe9/7nlpaWtI+pljpDAAAA+TcKXEAAHAuAhsAAAMQ2AAAGIDABgDAAAQ2AAAG\nILABADAAgQ0AgAEIbAAADPD/AeSIUi+hxscJAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"np.random.seed(2)\n",
"x = np.concatenate([np.random.normal(0, 2, 2000),\n",
" np.random.normal(5, 5, 2000),\n",
" np.random.normal(3, 0.5, 600)])\n",
"plt.hist(x, 80, normed=True)\n",
"plt.xlim(-10, 20);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Gaussian mixture models will allow us to approximate this density:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n",
" warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n"
]
},
{
"data": {
"image/png": "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\nYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.mixture import GMM\n",
"X = x[:, np.newaxis]\n",
"clf = GMM(4, n_iter=500, random_state=3).fit(X)\n",
"xpdf = np.linspace(-10, 20, 1000)\n",
"density = np.exp(clf.score(xpdf[:, np.newaxis]))\n",
"\n",
"plt.hist(x, 80, normed=True, alpha=0.5)\n",
"plt.plot(xpdf, density, '-r')\n",
"plt.xlim(-10, 20);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that this density is fit using a **mixture of Gaussians**, which we can examine by looking at the ``means_``, ``covars_``, and ``weights_`` attributes:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.25306823],\n",
" [ 3.96038601],\n",
" [ 1.45350312],\n",
" [ 9.56303626]])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf.means_"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 6.4601766 ],\n",
" [ 23.19014431],\n",
" [ 5.80884786],\n",
" [ 14.79998213]])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf.covars_"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.31823886, 0.21876416, 0.35341345, 0.10958354])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf.weights_"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n",
" warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(x, 80, normed=True, alpha=0.3)\n",
"plt.plot(xpdf, density, '-r')\n",
"\n",
"for i in range(clf.n_components):\n",
" pdf = clf.weights_[i] * stats.norm(clf.means_[i, 0],\n",
" np.sqrt(clf.covars_[i, 0])).pdf(xpdf)\n",
" plt.fill(xpdf, pdf, facecolor='gray',\n",
" edgecolor='none', alpha=0.3)\n",
"plt.xlim(-10, 20);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These individual Gaussian distributions are fit using an expectation-maximization method, much as in K means, except that rather than explicit cluster assignment, the **posterior probability** is used to compute the weighted mean and covariance.\n",
"Somewhat surprisingly, this algorithm **provably** converges to the optimum (though the optimum is not necessarily global)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## How many Gaussians?\n",
"\n",
"Given a model, we can use one of several means to evaluate how well it fits the data.\n",
"For example, there is the Aikaki Information Criterion (AIC) and the Bayesian Information Criterion (BIC)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"25911.1937804\n",
"25840.421853\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n"
]
}
],
"source": [
"print(clf.bic(X))\n",
"print(clf.aic(X))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's take a look at these as a function of the number of gaussians:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n"
]
},
{
"data": {
"image/png": "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\nSUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n_estimators = np.arange(1, 10)\n",
"clfs = [GMM(n, n_iter=1000).fit(X) for n in n_estimators]\n",
"bics = [clf.bic(X) for clf in clfs]\n",
"aics = [clf.aic(X) for clf in clfs]\n",
"\n",
"plt.plot(n_estimators, bics, label='BIC')\n",
"plt.plot(n_estimators, aics, label='AIC')\n",
"plt.legend();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It appears that for both the AIC and BIC, 4 components is preferred."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example: GMM For Outlier Detection\n",
"\n",
"GMM is what's known as a **Generative Model**: it's a probabilistic model from which a dataset can be generated.\n",
"One thing that generative models can be useful for is **outlier detection**: we can simply evaluate the likelihood of each point under the generative model; the points with a suitably low likelihood (where \"suitable\" is up to your own bias/variance preference) can be labeld outliers.\n",
"\n",
"Let's take a look at this by defining a new dataset with some outliers:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"np.random.seed(0)\n",
"\n",
"# Add 20 outliers\n",
"true_outliers = np.sort(np.random.randint(0, len(x), 20))\n",
"y = x.copy()\n",
"y[true_outliers] += 50 * np.random.randn(20)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class GMM is deprecated; The class GMM is deprecated in 0.18 and will be removed in 0.20. Use class GaussianMixture instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function distribute_covar_matrix_to_match_covariance_type is deprecated; The function distribute_covar_matrix_to_match_covariance_typeis deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n",
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n",
" warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n"
]
},
{
"data": {
"image/png": "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\nAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"clf = GMM(4, n_iter=500, random_state=0).fit(y[:, np.newaxis])\n",
"xpdf = np.linspace(-10, 20, 1000)\n",
"density_noise = np.exp(clf.score(xpdf[:, np.newaxis]))\n",
"\n",
"plt.hist(y, 80, normed=True, alpha=0.5)\n",
"plt.plot(xpdf, density_noise, '-r')\n",
"plt.xlim(-15, 30);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's evaluate the log-likelihood of each point under the model, and plot these as a function of ``y``:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/jakevdp/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:77: DeprecationWarning: Function log_multivariate_normal_density is deprecated; The function log_multivariate_normal_density is deprecated in 0.18 and will be removed in 0.20.\n",
" warnings.warn(msg, category=DeprecationWarning)\n"
]
},
{
"data": {
"image/png": "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\n4erdu7fef//9wNedMo7t27dr4sSJWr58ud577z19+9vflt/vD3zdpHE4Ysq6f//+6tevnyTp8ssv\nV319vTwejxITE3Xy5ElZlqXS0lJdd911NlfavqysLL366quSpPLycl155ZWOHIckFRcXa8eOHdqx\nY4eSk5P11FNPOXIsx44d05IlS5SXl6cpU6ZIkiPHIUmZmZl67bXXJEllZWVKS0uzuaLO+/DDD3XH\nHXdoxYoV+qd/+idJ0he+8AXt27dPkvTaa6854ncgSQUFBfrlL3+pHTt2aPTo0dq8ebMmT57suLFk\nZWXp9ddfl2VZqqmp0blz5zRhwgTHjePC/BgwYIAaGxuN/X/LEQ+XqKmp0erVq/Xpp5+qsbFRixcv\n1g033KCysjJt3LhRTU1NmjhxopYuXWp3qe1qaGjQ2rVrVVVVJcuytG7dOo0ZM8Zx47jYtGnTtHv3\n7sAqayeN5Z577lFFRYWuuuoqSc1hvHXrVseNQ/rbKuujR4/Ksixt3LhRI0aMsLusTtmwYYN2796t\n4cOHB/oefPBBbdiwQX6/X8OHD9eGDRsUHx9vY5VdN2/ePK1bt069evXSmjVrHDeWH//4x9q3b58s\ny9LSpUuVkpLiuHHU19dr1apVqq2tld/v1+23364vfvGLRo7DEYEMAIDbOWLKGgAAtyOQAQAwAIEM\nAIABCGQAAAxAIAMAYAACGQAAAxDIAAAYgEAGAMAA/x9tBA9gVDUIfQAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"log_likelihood = clf.score_samples(y[:, np.newaxis])[0]\n",
"plt.plot(y, log_likelihood, '.k');"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"true outliers:\n",
"[ 99 537 705 1033 1653 1701 1871 2046 2135 2163 2222 2496 2599 2607 2732\n",
" 2893 2897 3264 3468 4373]\n",
"\n",
"detected outliers:\n",
"[ 99 537 705 1653 2046 2135 2163 2222 2496 2732 2893 2897 3067 3173 3253\n",
" 3468 3483 4373]\n"
]
}
],
"source": [
"detected_outliers = np.where(log_likelihood < -9)[0]\n",
"\n",
"print(\"true outliers:\")\n",
"print(true_outliers)\n",
"print(\"\\ndetected outliers:\")\n",
"print(detected_outliers)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The algorithm misses a few of these points, which is to be expected (some of the \"outliers\" actually land in the middle of the distribution!)\n",
"\n",
"Here are the outliers that were missed:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{1033, 1701, 1871, 2599, 2607, 3264}"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"set(true_outliers) - set(detected_outliers)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And here are the non-outliers which were spuriously labeled outliers:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{3067, 3173, 3253, 3483}"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"set(detected_outliers) - set(true_outliers)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, we should note that although all of the above is done in one dimension, GMM does generalize to multiple dimensions, as we'll see in the breakout session."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Other Density Estimators\n",
"\n",
"The other main density estimator that you might find useful is *Kernel Density Estimation*, which is available via ``sklearn.neighbors.KernelDensity``. In some ways, this can be thought of as a generalization of GMM where there is a gaussian placed at the location of *every* training point!"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAewAAAFJCAYAAABZ+x49AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xd8VFX+//HXnZpkZtJDqAkQCFVK\nKCIYaWJdy+oKyC67Lrq6zXUR+yoiuoiubYu6+hPZldWl6Fcsq6L0gEoJhN5DQgmE9DJJpt7fH5MM\nRBJmApNMkvk8Hw8fD3Ibn7kmvHPOPfccRVVVFSGEEEK0appgFyCEEEII3ySwhRBCiDZAAlsIIYRo\nAySwhRBCiDZAAlsIIYRoAySwhRBCiDZAF+wC6jidLkpKqoJdRqsXExMh98lPcq/8I/fJP3Kf/Cf3\nyj8JCZYmHd9qWtg6nTbYJbQJcp/8J/fKP3Kf/CP3yX9yr5pHqwlsIYQQQjROAlsIIYRoAySwhRBC\niDZAAlsIIYRoAySwhRBCiDZAAlsIIYRoAySwhRBCiDZAAlsIIURIOnnyBE8++Qj33nsXf/jDr3n4\n4QfIzj7CggVvcdVVIyksLPAeW1JSzNixl/PFF59x6lQeV145nP/851/1rvfoozP5/e/vbbZ6JbCF\nEEKEnJqaGh577EGmTv0Zb7/9L/72t3/yy1/+ildeeQGAbt2SWL36G+/xq1Z9TWJiR+/XXbp0Ze3a\n1d6vy8vLOHHieLPW3GqmJhVCCBGa5swx8tlngY2jm25yMmeOrdH9GzeuZ9iwEQwcOMi7rX//gfz9\n72/x7rtvM2HCJNasWcnkydNqj89gzJirvMdGRUUTFRVFTs5RunfvwapV3zB+/NVkZW0L6Oc4l7Sw\nhRBChJy8vDy6dOnm/fqxxx7k97+/l2nTbqeg4AxxcXEYjWGcPHmCEyeO06FDIgaDod41rr76Wlat\n+hqAjIx1pKePa9aapYUtRCuglJdhfugBVEsUlS+9BooS7JKEaDFz5tgu2BpuDomJiezfv9f79fz5\nrwBw77134XK5gLOB7HQ6ueaa69m8+ft610hPH8fvfncPN9xwE3FxcYSFhTVrzdLCFqIVCH/rDcKW\n/x/hixZiqP2NXQjRfK68cixbt25m9+5d3m0nThynoOAMSu0vzOPGTSQjYx07dmQxdOiw864RERFB\nUlIyb7zxNyZNuq7Za5bAFqIVMH623PtnwzcrgliJEKEhIiKCF154lWXLPuD3v7+X3/xmBvPnP8sj\njzzhHVxmNpvp0KEDffr0QaNpOC4nTbqenTu3M2zYiGavWVFVVb3QAW63mzlz5nDgwAEMBgPPPfcc\nycnJ9Y4pLi5m6tSpfPbZZxiNRlwuF88//zy7d+/Gbrdz//33M378eJ/FFBRUXNqnCQEJCRa5T35q\nC/dqeUY24aVF/OzuieQNHEHCoV1UJHblo1c/5Nb0ni1SQ1u4T62B3Cf/yb3yT8DXw165ciV2u50l\nS5Ywa9Ys5s+fX29/RkYGM2bMoLCw0Lvtk08+wel0snjxYt58801yc3ObVJQQoST+iOc5Wt6A4ZQk\n9SIqLwfF5QxyVUKI1sZnYGdmZpKeng7AkCFD2L17d/0LaDQsXLiQ6Oho77YNGzbQsWNH7r33Xp58\n8kkmTJgQ4LKFaD/icg4AUNSjLyVde6J1Ook8fSLIVQkhWhufo8QrKysxm83er7VaLU6nE53Oc+qY\nMWPOO6ekpITc3FzeeusttmzZwuOPP87777/vs5imdg+EKrlP/mvt98pkMpJwKgeAmr4DqDqTC2sg\nsehki9be2u9TayH3yX9yrwLPZ2CbzWasVqv3a7fb7Q3rxkRHRzNu3DgURWHkyJHk5OT4VYw88/BN\nng35ry3cK6vVhulYNk69gTOmWMzRiQDoTxxrsdrbwn1qDeQ++U/ulX8C/gw7LS2N9evXA5CVlUVq\naqrPiw4bNox169YBsH//fjp16tSkooQIGapK5KljVCR2BY2GynjP6FRTwakgFyaEaG18trAnTZrE\nxo0bmTp1KqqqMm/ePBYuXEhSUhITJ05s8JzJkyfz9NNPM3nyZFRV5Zlnngl44UK0B2HlJRirKjk1\nYDiAN7DNhaeDWZYQohXyGdgajYa5c+fW25aSknLecatXn50E3WAw8PzzzwegPCHat8hTxwAo65QE\nQFVMAm6NFlNRfjDLEqLd27ZtK5988hHPPOPJqjVrVvLuu28TExNLWVkpFkskLpeL6Oho7r//QTp3\n7sKCBW/xzTcriI+P915nxIjL+cUv7m6RmmVqUiGCKKo2sMtrAxuNhprIaMLLS7AHsS4hQsnKlSv4\n4INF/PWvb/Lmm39n2rSfM2rUaAB27NjO7NmP88477wEwdeo0br31J0GpUwJbiCCqe33LG9hATWQM\npqJ8CWwRMkxznqw3218g2G66Feuc53we99VX/+Ojj5bw2mtvEBkZed7+wYOHotPpmn3pTH9IYAsR\nROZCz+CyioSzAzOro2KJPXYY7Hb4wepAQojA2bEji4KCAsrLy70LfjQkJiaW0tJSABYv/oCVK8/O\n9/+LX8xgxIhRzV4rSGALEVR1g8uscYnebTWRMQBoiotwd5Q3LET7Z53znF+t4UCLi4vn1Vdf5/PP\nl/Pss0/x0kt/a/C4/PxTdOjQAQhul7gs/iFEEJkKT1MVHY9bf7YlXR0VC4BSUBCssoQICV27dsVo\nNHL77VPQ6fS899675x2zZcv3GI1hdOiQ2MAVWpa0sIUIFrcbc+Fpinr0qbfZ28IuKqTxTjohRCA9\n/vhsZsz4KRqNhoMH9/Of//wLrVZLREQEc+eefevph13iSUnJPPLIn1qkRglsIYJEU3AGrdPhffe6\nTl0LW1MoLWwhmkta2nDS0oZ7v46JieHjj7+44Dl3330fd999X3OX1ijpEhciSDS1o04rEzrX235u\nC1sIIepIYAsRJJqTnle6Gm9hS2ALIc6SwBYiSLQnGg7suha2Il3iQohzSGALESSak3Vd4vVf3aqx\nRHn21773KYQQIIEtRNBoj9cG9g9a2PYIz/rzSnl5i9ckhGi9JLCFCBLNyRM4DWHYLNH1tqs6PQ5j\nGEp5WZAqE0K0RhLYQgSJ9uRxT+taUc7bZzdZ0JRJl7gQ4iwJbCGCwWpFU1xMZULHBnfbIyzSwhZC\n1COBLUQQaPNOAucPOKtjN5k9z7BVtSXLEkK0YhLYQgSBd9KU+IYD2xZhQXE6oaqqJcsSQrRiEthC\nBIH2RMMjxOvYTRYANNItLoSoJYEtRBB438FupIVdF9hKmQS2EMJDAluIIPDOcnaBQWcg72ILIc6S\nwBYiCOrmEbfGNbzG7tkucXm1SwjhIYEtRBBoTxzH1SERt97Q4H6bdIkLIX5AAluIluZ2o8k7ibtb\nt0YPkWfYQogfksAWooVpzuSjOBy4ulwgsOueYVfIM2whhIcEthAtrO4dbHeXro0eYzd5FgDRSAtb\nCFFLAluIFqatHXDm7tp4YDvCIgBQrJUtUpMQovWTwBaihWlqX+m6UJf42cC2tkhNQojWz2dgu91u\nZs+ezZQpU5g+fTq5ubnnHVNcXMw111yDzWart/3IkSMMGzbsvO1ChLK6SVPcXbo0eowjvDawK6WF\nLYTw8BnYK1euxG63s2TJEmbNmsX8+fPr7c/IyGDGjBkUFhbW215ZWckLL7yAwdDwaytChCrtSc/C\nH/61sCWwhRAePgM7MzOT9PR0AIYMGcLu3bvrX0CjYeHChURHR3u3qarKU089xYMPPkh4eHiASxai\nbdOczkM1GFDj4ho9xq03oOr10iUuhPDS+TqgsrISs9ns/Vqr1eJ0OtHpPKeOGTPmvHP+8Y9/MHbs\nWPr27dukYhISLE06PlTJffJfq7xXp09B164kdIjEZDI2ephiNqO3VbfIZ2iV96kVkvvkP7lXgecz\nsM1mM9Zzfst3u93esG7Mp59+SseOHfnoo48oKChgxowZvP/++z6LKSio8KPk0JaQYJH75KdWea8c\nDuJPn8YxajRlBRVYrY2P73BFmKCsnOJm/gyt8j61QnKf/Cf3yj9N/aXGZ2CnpaWxZs0abrjhBrKy\nskhNTfV50W+++cb75wkTJvDuu+82qSgh2itN/mkUVcXdqbPPY1WzGU1hQQtUJYRoC3wG9qRJk9i4\ncSNTp05FVVXmzZvHwoULSUpKYuLEiS1RoxDthiYvDwB358ZHiNdRTSaU3JxmrkgI0Vb4DGyNRsPc\nuXPrbUtJSTnvuNWrVzd4fmPbhQhFmtO1gd2p4XWwz6WazCg1NeB0go/HUEKI9k8mThGiBWnzal/p\n6uRPC9sz2FNe7RJCgAS2EC3qbJe4H8+wTSZAZjsTQnhIYAvRgjSnmvIMu7aFLbOdCSGQwBaiRWnz\nTqJqtbgTOvg8VjVLl7gQ4iwJbCFakOb0KdwdO4FW6/NY6RIXQpxLAluIluJ2ozmV59c72CBd4kKI\n+iSwhWghSkEBitOJy4/n13BuC1sCWwghgS1Ei9Ge8rzS5XcL2/sMW7rEhRB+TJwihLg0yzOyAUje\ntI1rgJ01RnbVbrsQ6RIXQpxLWthCtJCIEs+84NZY3yPEQbrEhRD1SWAL0UIiSooAqIqJ9+t46RIX\nQpxLAluIFhJeWghAdbSfgW2SwBZCnCWBLUQLiSitbWFHx/l1vLdLvFLWFRZCSGAL0WLCSwtxGow4\nIsx+HS9d4kKIc0lgC9FCIkqLqI6OA0Xx63g1QmY6E0KcJYEtREtQVcJLC6ny8/k1AHo9qtGIYpUu\ncSGEBLYQLcJYWY7W6fS0sJtANZulhS2EACSwhWgRdSPEm9TCxjNSXCZOEUKABLYQLaJuhHh1TBNb\n2BERKFXSwhZCSGAL0SK872BHXUxgVzVHSUKINkYCW4gW4J3lrKnPsE1mFJsNnM7mKEsI0YZIYAvR\nArwtbD+nJa2jRkQASLe4EEICW4iW0NRZzuqcDWzpFhci1ElgC9ECLvoZdt184tLCFiLkSWAL0QLC\nS4qwRZhxGcOadJ63hS3vYgsR8iSwhWgBEaWFfq/Sda66BUCwSpe4EKFOF+wChGhNHA7IydFQVKRg\nMql07+7GYrm0aypOB2EVpZR069nkc73ziUuXuBAhz2dgu91u5syZw4EDBzAYDDz33HMkJyfXO6a4\nuJipU6fy2WefYTQaqaio4OGHH6ayshKHw8Fjjz3G0KFDm+1DCHGptmzR8M47Blau1FFRcXZxDo1G\nJS3NzfTpdm6/3YnB0PRrh5eXoKjqRbWwkS5xIUQtn4G9cuVK7HY7S5YsISsri/nz5/Pmm29692dk\nZPDyyy9TWFjo3bZw4UJGjRrFXXfdRXZ2NrNmzeLjjz9unk8gxCXIz1f405+MfPqpHoDkZDc33uik\nY0c3lZUKO3dq2LpVy9at4fz1r25eeKGGsWNdTfo7wi9yhDjIoDMhxFk+AzszM5P09HQAhgwZwu7d\nu+vt12g0LFy4kNtvv9277a677sJQ2xRxuVwYjcZA1ixEQHz/vZa77w6joEDD8OEu/vQnG6NHu85b\n/fLECYXXXzewcKGeO+6IYOZMG48+akfj5wiQiJLaEeIX8wxbWthCiFo+A7uyshKz2ez9WqvV4nQ6\n0ek8p44ZM+a8cyIjIwEoKCjg4Ycf5oknnvCrmISES3xYGCLkPvmvsXv1+efwk5+AwVnFqy/q+cMs\nPRpNRCPXgHfegd/8BiZPhldfNVJYaOTdd0HnxyiQ6OoyAFyJHTGZ/P/lNSHBAp08IW/RuLA04/93\n+Z7yj9wn/8m9Cjyf/9yYzWas5/x273a7vWF9IQcOHODBBx/kkUceYeTIkX4VU1Ag6/76kpBgkfvk\np8bu1YoVWmbMCCdZe4I94YPQ/DOO4h+vQY2KvuD1kpLgq6/gzjsjWLRIS0mJg//3/2rQai9chzb/\nNAClEVFYrTa/6y8oqEDv1BANWM8UU9VM/9/le8o/cp/8J/fKP039pcZnp15aWhrr168HICsri9TU\nVJ8XPXz4MA888AAvv/wyY8eObVJBQjSnHTs0zLg7DEXj5p8j/ozBWoou+wj7//IWyzOyfZ4fHQ3L\nllUxZoyTzz/X8+STRlT1wudc0jNs6RIXQtTyGdiTJk3CYDAwdepUnn/+eR5//HEWLlzIqlWrGj3n\n5Zdfxm638+c//5np06fzm9/8JqBFC3Ex8vMVfv7zcJwOhXsfzGXwiXXefZ12b/H7OmYz/Pvf1fTr\n52LBAgPvvKO/4PFnn2FfTGDXvdYl72ELEep89m1rNBrmzp1bb1tKSsp5x61evdr753NHkQvRGrjd\n8Otfh3HqlIbbp+cxbMBp4nIOcKr/MGKOHSY+e1+TrhcZCe+/X81110Xw9NNG0tJcDBvmbvDY8NIi\n3BoNNZGxTa67buIUGSUuhJCZzkRIePNNPRs36rjuOgfX3FJAbM5BFFWlIKU/RT36EHX6OFpbdZOu\n2bWryptv1uBywX33hVNW1vBxEaWF1ETGoPp62N0A6RIXQtSRwBbt3t69GubNM9Khg5tXX7WhKBB/\ndD8ART36UpHYBQBLwakmXzs93cXMmXaOHdPwxBMNzxMeXlp0Ud3hIO9hCyHOksAW7ZrbDQ8/HIbD\nofDaazXExXlGiEWf8AwwK05KoaJDbWDnn7yov+Ohh+wMHuxi2TI9q1f/oBVdVYWh2krVxcxyBmAw\noGq18gxbCCGBLdoupbCQ6BuuJnpiOsqZMw0es2SJji1btNx0k4Orrz47Q1n0yRwAyjonewPbXJB3\nUXXodPDqqzXodCoPPRRGZeXZfZoCT10X28JGUVAjTNIlLoSQwBZtV8RfX0K/dTP6XTswvTjvvP3F\nxTB3rpGICJVnn63//nPUyRwqEjrhMoZT0aEzcPEtbICBA93cf7+dEyc0vPba2QnHNWfyAS6+hU3t\nwDPpEhci5Elgi7bJ7cb48Ue4o6NxdepM2IdLwFY/lJ9+GoqKNDz0kI3Onc++LK23VmAqKaC0q2f1\nLG+X+JmLa2HXeeABO126uPnnPw3k5HjmN9XUtvyrYy6yhY1n4Jm0sIUQEtiiTdLu34f2TD72a67H\ndvOPUaqs6L/d4N2fm6vw1lvQvbube+911Ds3Oi8HgNIu3QFPd7XTEIblIrvE60REwFNP2bDbFebO\n9UxBGpAWdoRJnmELIWQ9bNE26bdsAmBzbC8qErtyI3Di30v5TtcDgG8W98fhgMces523JGb0iaMA\nlHbxHIuiUJHQCcuZPC51MsUf/9jJO++4+PxzPd9+6+Dq2sCujrr4FjYmk2eUuKpy3sokQoiQIS1s\n0Sbpdu4AoKD3QE73S8MebqLbNk8L+0RuGB9+qGPwYLj1Vud559YNOPMGNmCN60BYRSnU1FxSXYoC\nzz3nucazzxoD1yXudl9ybUKItk0CW7RJugP7cGu0lHbpgVuv59SA4USdPo75TB6f/Lcjqqowbx4N\nLoEZfbK2hd31nMCO7wiAJu/iB57VSUtzc8MNDjIztRTt9QT2pXaJg0xPKkSok8AWbY+qoj2wn/KO\n3XDrPf3dJwddDkD42u3s2BLF8OEurr++4dOjTuZQY46kJjLGu80amwiA9tSlPceu88gjdhRFpWTv\nGVw6PXbTxS81KNOTCiFAAlu0QZr802jKSinpdnZO+5ODRwEQvnobAH/8o63hx70OB1Gnj1PWpXu9\n58HWuA6eaweghQ3Qv7+bW291ElmdT2lEwiU9e5bpSYUQIIEt2iDtfs9CHecGdmmXHlREdWBowXq6\ndrMyaZKr4XNzjqJxOes9vwawxnla2JoAtbABHn6oho6c5lhNZ59LcF7I2S5xCWwhQpkEtmhzdIcO\nAFDSrefZjYrCRtN4OlDAr8esbLRBqz10EDj7SledusDWBqiFDdA7oQQjdo7ZO7MnKxBd4vIMW4hQ\nJoEt2hxNbg4A5R27ebdVlGl5M38aAD+q+LDRc7WH6wK7kRZ2AAO7boT4aTqyYnnCRV/H28KWLnEh\nQpoEtmhztLWBXZHY1btt/TdxfOm6jkpDFL2+XQHO81/nAtAd9LTOy34Q2DZzJA5jGJq8wHWJ102a\n4kqM4cBuCzmHwy/qOjLoTAgBEtiiDdLm5uCOjMJmjgQ82bxuRRyaMC1Hxt6AqaQA44dLGjxXt2sH\nDmMY5bVLanopCta4xIB2idcFdofhnkFjX33c4aKuI4POhBAggS3aGlVFm5uDK7m7d+R11uYoSosN\njB5fwp7bf45Lp8P08gtQXV3/XKsV7YH9FPbsj6o9f5I/a1wimsKC8+Ykv1h1gR3Z30JyShXbN0WR\nn2fwcdb5ZNCZEAIksEUbo5w5g1JdjTu5u3fbmi88k5KMv74Qa0In9l431dNtPmdOvXP1u3aguN0U\n9B7Y4LW9r3YFaKT4ubOcXXvrGVRVYdX/mv4sWwadCSFAAlu0MXXPr121gX38aBiH9pkZMKScjl08\nLeOtd/7Os/+ll9Btz/Seq9vm+XNBrwENXjvQk6fUtbCro+MZenkZMfF2vlsbQ5XVvx+75RnZLM/I\nZv3hUgAO7j/h3SaECD0S2KJN0eZ6phWtC+w1X9a2rm8o9B7jDAun4pW/g9uN5Y+/83Zx6zeuByA/\ndVCD1w70SHFNQd20pLFotTDu2iJsNVq+WxvbpOs4jJ7Bavqaah9HCiHaMwls0aac28KurtKweUM0\n8R1sDBxaf50tR/pYuO8+dPv2Ypr/HEpZKYaMdTj79sOa0KnBa58N7MB1ibstkbhqA/fKiUXo9G7W\nfBmP2+3/dZxhnkFnOpss/iFEKJPAFm2K9lgu4AnsLRuisdu0jJlY3OAiH7z0Es6eKUS8/lcifzEN\npaaGmp9MafTalfF1s50FqIV9Og93YqL3a0uUixFjSjlzysi+Hf5PpOIIq2thyzNsIUKZBLZoUzQ5\nR1E1Gtxdu7FhVRyKRmX0+OKGDzabqfjnAtTwcAzfbsDVtRs1d93d6LXrVuzSHj926YXW1KApKsLd\nuWu9zRNqu+5Xf+n/6l3O2ha6TrrEhQhp57/bIkQrps3Nwd2lK7sPhpFzOIJBw8qIiTt/kpTlGdmY\nTEas1mii5n9A5z1byR0xlqodRY1e22aOwh0Tg/bwoUuus26kubtz53rbk1Oq6ZlqZfc2C2dOG+jQ\n0e7zWnWBrbdJYAsRyqSFLdqOmhq0p/JwJXfngw/0AFx5dSOt63OUde3BvmvvoCrWx8QlioKrdx+0\nOUfB7jtIL6RuAhbXDwIbPAPkVFVh3Vdxfl1L1WpxGozopEtciJAmgS3ajLquanuX7ixbpicy2sHA\ntPKA/h3OPv1QXC50B/Zd0nXqRpq7O3U5b9+wUWWYI518ty4Wh8O/ZTcdYREySlyIEOczsN1uN7Nn\nz2bKlClMnz6d3Nzc844pLi7mmmuuwVb7+kxNTQ33338/06ZN41e/+hXFxb5bQUL4UvdK196anpSV\nKYweX4wuwA91HMNHAKDbstm7TXPiOLptW1GKG+9O/6HGusQBdHqVK8YVU1muY8fmSL+u5zSGyTNs\nIUKcz8BeuXIldrudJUuWMGvWLObPn19vf0ZGBjNmzKCw8Ox7sP/9739JTU3lgw8+4NZbb+WNN94I\nfOUi5NSt0vX14V4AjB5fEvC/w3H5FQAYvvkK3fffETNuNHFpA4i5bgJxg/pgXPpfv65ztku8a4P7\nr5zo+SU2Y6V/3eJOY7g8wxYixPkM7MzMTNLT0wEYMmQIu3fvrn8BjYaFCxcSHR3d4DlXXXUV3333\nXSBrFiFKm+NpYX+2tzdDh7q8M5sFkrtnCo60YRhXfUPMzdei3bcH27XXU3Xfb1HDI7A8/Ee/Jlbx\ndok30MIG6NTVRq9+lezbaaEw3/f84o7wCHQS2EKENJ8dipWVlZjNZu/XWq0Wp9OJrrYvcsyYMQ2e\nY7F43jM1mUxUVFScd0xDEhL8fzc1lIXsfTp1AoDDagpP36XFZDL6PMWfY86VkGCBt9+CKVMgNhbl\nr3/FeIWn1U3aYLjvPuKWL4Gnn77whc6chvBw4nsnYTracNBefWM5h/eZ2bQ+gcl3FTZ4TB13hAmd\n3YY5TIeq1Qb8eyBkv6eaSO6T/+ReBZ7PwDabzVjPWdbP7XZ7w9qfc6xWK5GR/j2nKyjwL9hDWUKC\nJeTuU93c2bdn7UWniaRUjcFh2YPV2vCa13U8r3U1rRVeUFABSanw3fZzNtbe70k3ER/2AK4lyyj5\n7YMXvE7cseO4O3WmpLCy0RoGpBUSHpHIuq+juO62k2i1jV/PpvP84mErLsURYQ7o90Aofk9dDLlP\n/pN75Z+m/lLjs0s8LS2N9es9czBnZWWRmprq86JpaWmsW7cOgPXr1zNs2LAmFSXEeVQV8+mTHHH3\npP/QSiKjLhzWzcJsxjFqNLp9e1Dy8xs/zmZDU1iAu/P5I8TPZTSqXH5VCaXFenZvu/AvtQ7v9KTS\nLS5EqPLZwp40aRIbN25k6tSpqKrKvHnzWLhwIUlJSUycOLHBc+68804effRR7rzzTvR6PS+//HLA\nCxehJby0CIO9mmx6MuqqwA82q3OhlbBuTe+JY9RoDGtXo8/ahv3a6xs87uwI8QsHNngGn639Kp6M\nlbEMHtH4K2rOuulJq6uojvF5WSFEO+QzsDUaDXPnzq23LSUl5bzjVq9e7f1zeHg4f/vb3wJQnhAe\nUcc9A84Oa1MZPLIsaHU4Bw8BQLczq9HA1p44DoCri+/ATupZTXJKFbu2RVJarCM6tuGeA6cxzPP3\nSgtbiJAlE6eINsGZ6RlwVp3aHaNRDVodjstqA3vXjkaP0R71tNJdPc7/xbYhYyYUo7oVvl/feNO5\nrktcXu0SInRJYIu2IcvTajVf2fDSmC1F7dABV8dO6HbWD+zlGdne/7IztgGwtjzsgl3sdUaMKUWn\nc/PdmljURn4XOdslLoEtRKiSwBatntOhEJt3BDcKMVf5mA+8Jeq5bBDavJMohQ2/ihV5yvPLRXnH\nbn5dz2RxMWh4OadOhHEsO7zBY2TQmRBCAlu0ent3munr3sfpiCTcEQ0HWkty9RsA0Oh845Gnj+MI\nC6c62r9ZzACuGOcZSPfd2oa7xb0rdskCIEKELAls0eodW20lkTOUdO8V7FIAcPbpC4B2fwOBrapE\n5h+nPLEbKP4t7AEwYGg5lkgfPgzEAAAgAElEQVQHmzJicDawIIgjTNbEFiLUSWCLVs1mA/O2vQBU\npg0McjUerr79gIZb2BElBehrqv3uDq+j08HIq0qxVujYte38yRSc0iUuRMiTwBat2po1Wobbvwcg\nv++QIFfj4eyViqrRNNjCjs09DEBxkn8jxM81epxnQZDv1saet88hXeJChDwJbNGqffKJntF8i1Or\np7Bnv2CX4xEejqt7D08L+wfDumOOHQKgONn3jIA/1K1HDV2Tq9m1zUJFef15Sh3hdYEtLWwhQpUE\ntmi1qqsh88tihrOVgt4DcdVOHtIauPr0Q1NSgnLmTL3tcbmewC5J7n1R1x01rgSXU8OWDfUHnznC\nTADoq60NnSaECAES2KLVWrNGx01VS9DiJvfyCcEupx5nv9rn2Pv31tsem3sQpyGM8sSG18H25fL0\nEjQa9bzR4naTZ8U8Q1XlRV1XCNH2+ZyaVIhg+fqjaubxMg6dgUNjbwx2OfUmQempxjER2PvFBvZo\nkgHQOOxEnzhKUfdU1AstvXUBUTFO+g+pYPe2SPKOGemc5FnpyxHuCWy9BLYQIUta2KLV0e3agfGp\np5j7+UiSOcbum6dTE3X+QKxgKknyvGIWe/ywd1t89j60TgcFvS+7pGvXDT779pzBZ05jGG6NVlrY\nQoQwaWGLVsX40VIsv7sXxe3GiIH1g37Nwan3BLus85R1Ssat1RFz/Ih3W+L+LABOX+Jo9sEjygmP\ncLE5I4bbfnoKjRZQFOwRJgzyDFuIkCUtbNFqKCXFmB+dhWq2MH/kUmIowfnqS6ja1vd7pVuvp6xT\nEjHHs70jxRMPeOYXz+8z+JKurTeoDB9dSmmxnv27zd7tjgiztLCFCGES2KJVWJ6RzfHH56IpL+Pb\nm+7h6R23Yemo5XDJYd8nB0lJtxQMVZWYivJRXC467ttOZVwi1oRLX6BkVO1Upd+vOzv4zB5ulmfY\nQoQwCWzRKiguF6lrPqPGHMXSxHuw27SkXVHalNk9W1xx7XPsuJyDdDi0k/DyEo6nXRmQa/fqayW+\ng43tm6Kw1Xh+TO0RZk+XuNsdkL9DCNG2SGCLViFxfxamkgKOjprI1m2eFbmGXl4W5KourG7mtU57\ntpK8eS0AuSPGBuTaigKXX1WCrUbL9k2RADgiTCiqKmtiCxGiJLBFq9B90yoADl8+iR1bI4mJs5Oc\n0rqDKb/vEBzGMHpuXEFKxpc4wsLJGzgyYNcfNbZ2Ba91ntHi9gh5F1uIUCaBLVqFTnszceoNrFOv\noqpSx5CR5Wha+Xeny2Ake8x1mIvyMRefYf/EHwd0NrbEznZ6plrZv8tMSZEOu7yLLURIa33Db0XI\nUcrLiMs5yOl+aWS2ke7wOpt/9gciSgpw6Q1kTv1twK8/amwJ2QdNbM6I4doIz/Sk0sIWIjRJYIug\n023djKKqnOozhKx1UZjMTnr3bxuhVBMVy1dPvt5s1x8+ppQlCzvz/boY7FfWdYnLu9hChKJW3uko\nQoF+03cA7IgaRWmxnsEjyrnImT3bHbPFxWVpFZw8Fk5+dTQA+uq28cuMECKwJLBF0Om//w5VUfis\nYBwAQ9pId3hLuaJ2qtI9RzsC0iUuRKiSwBbBZbOh355JUXJvNmZ2wxjmov+gimBX1aoMTKsgwuxk\n+yHPhCwGq9wfIUKRBLYIKt3OLJSaGrK7DufMaSMDhlZgMKrBLqtV0etVRowu5YTVMyDPWCk9EEKE\nIglsEVT6Td8DsM6dDrSd0eEtbdS4EoqIAyCsQu6REKFIAlsElX7TtwAsOz4Rrc7NZWnlQa6odeqZ\nWoUmofY97FIJbCFCkc/AdrvdzJ49mylTpjB9+nRyc3Pr7V+6dCm33XYbkydPZs2aNQDk5eXxs5/9\njJ/+9Kf89re/pbq6dc9YJYLE7Ua/+XtsnZPZcrw3fS+rJMIk82Q3RFEgdZxnYnVHnrzWJUQo8hnY\nK1euxG63s2TJEmbNmsX8+fO9+woKCli0aBGLFy9mwYIFvPLKK9jtdv71r39x/fXX8/7779O7d28+\n/PDDZv0Qom3SHjyApqSEAwljAEiT7vALGjGugjIiUYpk0JkQochnYGdmZpKe7nm+OGTIEHbv3u3d\nt3PnToYOHYrBYMBisZCUlMT+/fvp168f5eWers3Kykp0OpmfRZzPkLEWgM/Lr0JRVAaPkO7wC0no\naKdMH4u5poSTJ1vxMmZCiGbhM0krKysxm83er7VaLU6nE51OR2VlJRaLxbvPZDJRWVlJx44defnl\nl/n888+x2+38/ve/96uYhASL74NE+7lPG9YC8M+jN5A6oJpOXbRAYGdMMZmMAb1esLliokg4c4D/\nfGXmsccCd9128z3VzOQ++U/uVeD5DGyz2YzVevaZmdvt9raYf7jParVisViYPXs2zz//POnp6axd\nu5ZHH32Ut99+22cxBQXS1edLQoKlfdynmhri166lKLEfx/O7cceIk1ittoD+FSaTMeDXDDYl0Uz4\nmRoWv1vBjBkEZL3wdvM91czkPvlP7pV/mvpLjc8u8bS0NNavXw9AVlYWqamp3n2DBg0iMzMTm81G\nRUUFR44cITU1lcjISG/Lu0OHDt7ucSHqGL5ZgVJdzSrj9YC8zuUvZ7RnbeyiQ6Xs3CkveQgRSny2\nsCdNmsTGjRuZOnUqqqoyb948Fi5cSFJSEhMnTmT69OlMmzYNVVWZOXMmRqORp556irlz5+J2u1FV\nldmzZ7fEZxFthctFxOuvATAvbwYDB7qI7+AIclFtQ43FM594LMUsW5bI4MHtqwdBCNE4RVXVVjOt\nlHSh+Nbmu5ocDix/+A1hHy3l8PA76L11KY8+aiNl5P6A/1XtsUs8bcmbDFv6FrdavmGjcQI7dljR\n6y/tmm3+e6qFyH3yn9wr/wS8S1yIQFmekU3JT+8i7KOl5KcO4m7lLwCEdcwJbmFtSI0lBoDrhp+h\nsFDD2rWyrJkQoUICW7SY+MO7SV37GQUp/Vn+2Fts2tWVDp1sdO5WE+zS2oyqmHgAxqWeAGDZskts\nXgsh2gwJbNFi+qz6BICtd/6eXQcTsdVoGXp5WUBGOoeKqjjPAiDdtCfp1cvFV1/pkDGdQoQGCWzR\nMlSVpMz11FiiOTnocrZvigJkdHhTWWM9ga09dZI77nBSU6Pw2WfSyhYiFEhgixahzT6MuSifk5eN\nxImWHVsjiY510L1XVbBLa1OqouNwazRoTp3i9ts9I+uXLZOZBIUIBRLYokXotm8DIL/vEA7tNWGt\n0DFkZBka+Q5sElWnpzoqDu2pPJKSVEaPdvLttzqOHZPnCkK0d/LPpWgRup07ACjs2Y/tmzzvEg8Z\nKd3hF6MqNgHN6VOgqtxxhxOAjz6SbnEh2jsJbNEidLt2oCoKRcmpZG2OJMLsJHVAZbDLapOssR1Q\nbDaUkmJuuslBWJjKsmU6Ws+MCkKI5iCBLZqf241u5w7KOiVzOC+ekiIDg4aVI4u4XRxr7UhxTV4e\nkZFw3XVODh/Wsn27/DgL0Z7JT7hodprcHDQV5RSm9JPR4QFQkdgVAO3RbADuuKNu8Jl0iwvRnklg\ni2an35kF1D2/jkJvcNN/iExbeLFKuvYEQHdgHwDjxrmIj3fz8cc67PZgViaEaE4S2KLZ1Q04O2gZ\nxOmTYQwcWo7RKA9cL1ZJtxQAtAc886/r9XDbbU6KizWsXi1TlQrRXklgi2anq21hf51/OQBDRsrU\nXJfCGt8Rt8mM7uDZBVMmT5ZucSHaOwls0bxUFd2uHbiSu7NhWxIarcqg4RLYl0RRcPXpg/bwIXB4\ngvqyy9z06eNixQodpaVBrk8I0SwksEWz0h4+hKa4mPJ+I8g9EkGfAZWYzK5gl9XmOfsPRHE40O3f\nC4CiwB13OLHbFT79VFrZQrRHEtiiWem//xaATcZ0QEaHB4rjijEA6DdkeLfdfrsDRVFlqlIh2ikJ\nbNGs6gL7/WNXATB4hAR2IDiu9NxPfcZa77YuXVSuvNLFpk06cnJkqlIh2hsJbNF83G70GetwRcWw\neMdAeqZaiYlzBruqdsHdqTPOXr3Rf/ct577LVfdO9uLF0i0uRHsjgS2ajeGbFWhPn2J/v5txurUM\nke7wgLJPuBqNtdLbiwFw001OLBaVDz7Q45TfjYRoVySwRUAtz8hmeUY2//tqB9o//gG3Vsecil8B\nMFQW+wgo+6TrADB8/aV3m8kEP/mJg9OnNaxaJe9kC9GeSGCLZjHq369gLspny833sPzgFXTuVk1i\nZ5mGK5AcV4zBbbZgXPEl5678MX26p1t80SJDsEoTQjQDCWwRcLFH99N31ccUdU/lve4zcTo0DL1c\n3r0OOIMBx/iJaHNz0B466N08cKCbtDQXK1dqOXlSBp8J0V5IYIuA6/f1RwBsmXY/W7cmAMjz62Zi\nu/oaAAzrVtfbPn26A7db4YMPZPCZEO2FBLYILFUlaes6asxR5AwYza7MSOIS7CT1qA52Ze1K3ViB\nLzVdADj9xRrvNoBbbnFgMnkGn7lknhoh2gUJbBFQpsLTmIvPkDdwBPv3RVNd5RkdrkjPbLMo75RE\ndWQMiQd31NtuNnsmUjl5UsOaNTL4TIj2QAJbBFR8tmfJx8KUfmzfHAnI6PBmpSjk9xmMpeAUEUX5\n9Xb9/OeewWfvvSfd4kK0BxLYIqDisz0rSBUke9a+tkQ66NXXGuSq2reC3gMBSDiyt972QYPcDB7s\n4ptvdJw+LV0cQrR1PgPb7XYze/ZspkyZwvTp08nNza23f+nSpdx2221MnjyZNWvWAFBVVcUjjzzC\ntGnTuOOOO9i5c2fzVC9anfijnhb2FkcaFWV6ho4qQyM9ss2qODkVgNhjh8/bN326A5dLYdEiaWUL\n0db5DOyVK1dit9tZsmQJs2bNYv78+d59BQUFLFq0iMWLF7NgwQJeeeUV7HY7CxYsoHfv3nzwwQc8\n++yzZGdnN+uHEK1HbM5BrLEJrNuVAkDaKOkOb27FSb0AiMk9dN6+225zEBmp8t57+nNnMBVCtEE+\nAzszM5P0dM9KS0OGDGH37t3efTt37mTo0KEYDAYsFgtJSUns37+fDRs2oNfrufvuu3njjTe854t2\nrroac1E+pZ26s+37KEwWJ30GVga7qnavMqET9nBTgy1ssxnuvNNBfr6G//1PVvESoi3z+RNcWVmJ\n2Wz2fq3VanE6neh0OiorK7FYLN59JpOJyspKSkpKKC8vZ8GCBSxfvpwXXniBF1980WcxCQkWn8eI\nVnyf9p0A4LSpJ+WlesZdV0pkpDGoJZlMwf37W0pZ997EHdiFRa+c9/3x0EPw9tvw73+Hc++9DZ/f\nar+nWhm5T/6TexV4PgPbbDZjtZ4dNOR2u9HpdA3us1qtWCwWoqOjmTBhAgDjx4/n7bff9quYgoKK\nJhUfihISLK32Phm27SIK2F7q6aIdPLwYq9UWtHpMJmNQ//6WVNilJwn7stAdPkhBQY96+6KiYOLE\ncFau1LFypZXBg9319rfm76nWRO6T/+Re+aepv9T47BJPS0tj/fr1AGRlZZGamurdN2jQIDIzM7HZ\nbFRUVHDkyBFSU1MZNmwY69atA2DLli306tWrSUWJtkmbmwPAtyf7EWF20ucy+YFtKWWdkwGIOnWs\nwf333ON5gP3OOzK/uBBtlc8W9qRJk9i4cSNTp05FVVXmzZvHwoULSUpKYuLEiUyfPp1p06ahqioz\nZ87EaDRy33338eSTTzJlyhR0Oh0vvPBCS3wWEWSa2sDeae3DkAnl6OSRaYvxBnZeboP7x41z0bOn\nm+XLdTz9tEJ8vNrgcUKI1svnP6kajYa5c+fW25aSkuL98+TJk5k8eXK9/dHR0fzjH/8IUImirdDm\nHAUgm578bFRpkKsJLeWdkoDGW9gaDdx9t50//SmM//xHzx//KEPGhWhrZOIUETDanBxKlWhqIqLo\nN0hGh7ek8sSuuDUaIhsJbICpUz3zi//rX3ocjhYsTggREBLYIjDcbpScHI6oPRkysgydXrpcW5Jb\nb8Aa35GoUw13iQNYLJ5XvPLyNCxfLs8rhGhrJLBFQGjO5KO113CEFIZdId3hwVDWKZmI0iKUisbX\nHr/vPjsajcrrrxtQ5XcqIdoUCWwREJqcHACO65LpN1i6w4OhrPY5tvZo4zMLJier3HKLk717taxd\nK3PGCtGWSGCLgDix3tMV6+jeGb10hweFN7CPnD/j2bl+9zvPgLPXX5dXvIRoSySwRUDkrDkOgHlY\nXJArCV11r3Zps49c8LhBg9ykpztZv17Hzp3yT4AQbYX8tIpL5nJB1R5PCzvmitggVxO66l7t8hXY\ncLaV/cYb0soWoq2QwBaX7LvvtHSqOYobhZqOHYNdTsiq6NAZt1bnV2CPH++if38Xn3yiQxbTE6Jt\nkMAWl+zjj3X04Cg18V1x62Xd5WBRtTrKE7ugzb7wM2wARYEHHrDjcinMm9cCxQkhLpkEtrgkdjus\n+NRNF06i650c7HJCXlnn7mhKSlCKinwee/PNTnr3dvHvf8OxY0oLVCeEuBQS2OKSrFmjJarsGBpU\n3MkS2MFWWjfw7NBBn8dqtfDgg3acTvjrX+VZthCtnQS2uCQff6ynB545xF3J3YNbjKCsi2dpTd2R\nQ34df+utTlJT4b//1XP8uLSyhWjNJLDFRbNa4auvdAyP9QxyciVJCzvYSrt0B/xrYYOnlf3kk+B0\nKtLKFqKVk8AWF+3rr3VUVSlM7FEX2N2DW5A4G9h+trAB7rwTevRwSytbiFZOAltctI8/9iwgMTjs\nAACulF7BLEcAtsgY3LGxaA/7H9g6HTz0kA2HQ+HFF43NWJ0Q4lJIYIuLUloKq1bp6NfPRVTePtxx\ncajx8cEuSwCulN6etcnt/q95fdttTvr3d7F0qY49e+SfBSFaI/nJFBfl00/1OBwKU26pRJubg7N3\nn2CXJGo5e6eiuFxoc3P8Pkerhdmzbaiqwp//LK1sIVojCWxxUZYs0aMoKlPT9qG43bhS+wa7JFHL\nVfvLk3b/3iadN368iyuvdLJypY6NG2UlLyFaGwls0WTZ2QpbtmhJT3fRqWQfAK4+0sJuLZyXDQJA\nv3NHk85TFHjqKRsAc+caZb1sIVoZCWzRZEuXeqYfnTLFgW7PbgCcffoFsyRxDuegwQDodmxv8rlD\nh7q55RYH27drWb5cF+jShBCXQAJbNInb7Qlsk0nlhhuc6LZuRlUUnEPTgl2aqKVGx+BK6o5u1w4u\nppn8xBM2jEaVOXOMVFY2Q4FCiIsigS2a5NtvtZw4oeHmm52YDA70Wdtw9e2PaokMdmniHM5Bg9EU\nFaE5fqzJ5/boofK739k5dUojk6kI0YpIYAvfVJXwf/4Dy32/ZMfrm4Ha7vC9u1GqqnAMHxnkAsW5\nlmdkk9nBM6Zgz4JlLM/I9v7nrz/8wU7Xrm7eeMPAkSMymYoQrYEEtvDJuGwx5tlPEPbxRzy66npu\n6LiFUaNc6NetBcAx8vLgFijOczztSgC6bdtwUedHRMAzz3gmU/nTn8JkAJoQrYAEtrggpaIc8zNP\noYaHs/HWeRixsbD8x6z4aju2Re/j1mhZbunb5BacaF7lnZIo65RElx3fo7VVX9Q1fvQjJ1dd5WT1\nah2ffCID0IQINglscUERf5mPpuAMVX98iMeLHmYus+lQdZKfPPBj4nIPcnTURGyW6GCXKRpwZMy1\nGGqqGPmfvzH6nfn88s5RRF8/AaW0xK/zFQVefLGG8HCVJ54wUlzcyIE2G6YnHib6+okYvvg8cB9A\nCFGPBLZo0PKMbNa9/zVhb79JWcdu/D3xNjIydCzuO5PsK64moqyYquh4Nk9/INilikbsvnEaVdHx\nDPzivwz4cjE6ew36zK2Ynp3j9zV69lR55BEbhYUannoqrMFjTPOfI+Kdt9BnbiHynp+j3b0rQJ9A\nCHEun4HtdruZPXs2U6ZMYfr06eTm5tbbv3TpUm677TYmT57MmjVr6u3bsmULY8eODWzFomWoKle8\n+yIat4vvf/kw69d3AmDMNaWsmvUXlv71Y5b+4xMqO3QJcqGiMbbIGD577l2233Y3qx/4M+/+dxPO\nnimELf6P361sgPvuczBkiItly/SsXl1/BjSlvIzwhf8PV9dulC14D8XpxPTS/EB/FCEEfgT2ypUr\nsdvtLFmyhFmzZjF//tkfxoKCAhYtWsTixYtZsGABr7zyCvbaBQdOnTrFu+++i9PpbL7qRbPp8d03\ndNm1mWPD0skechUbV8cSYXKSNqoMFIWyrj1whJuCXabwobxTElt/ej9HrroRl8FIzZ0/Q3E4MHz5\nP7+vodPBq6/WoNOpzJwZVq9r3LhsCUpVFdW/mIH9pltxDByE4esvUQoKmuHTCBHafAZ2ZmYm6enp\nAAwZMoTdu3d79+3cuZOhQ4diMBiwWCwkJSWxf/9+bDYbTz/9NHPmzGm2wkUzqqpi1L9exqXT890v\nH2ZXZiTlpXpGjS3BYJThwm2Z7ZbbAAhb/lGTzhswwM2jj3rezZ416+yoceNny1EVheU90lmekc2W\nkdehOJ0c+ssbMghRiADzOfSzsrISs9ns/Vqr1eJ0OtHpdFRWVmKxWLz7TCYTlZWVzJ07lxkzZpCY\nmNikYhISLL4PEs1/n/75PhTls2fyPbh69WbjvxIAuObmCkymtrWSU1urt7nFjegLw4djyFhHgtYB\nsbGAf99TzzwDGRnwv//p+ewzPXdPq4atmylO6YemaxdMwKlrbkZd+Bd6bsvg6NR72t3PdHv7PM1J\n7lXg+Qxss9mM1Wr1fu12u9HpdA3us1qt6PV6tm7dyrFjx3j99dcpKytj5syZvPrqqz6LKSiouJjP\nEFISEizNe59UlZhXX0PR6dh+zRROHHWzK9NEzz5WYhMqOOd/d6tnMhmxWm3BLqNVKSioIPzaGzFv\n3Ur5B8uwTZnWpO+p115TGD/exB/+AKOqVjHAbud4/+He+2zVmyns2Y+EPduwFxa3q5/pZv/Za0fk\nXvmnqb/U+OwST0tLY/369QBkZWWRmprq3Tdo0CAyMzOx2WxUVFRw5MgRBg0axIoVK1i0aBGLFi0i\nKirKr7AWrYN29y50Bw+QM3IC1TEJbFwdi6oqXHV1UbBLEwGwPCObLzp65n0vfm8xyzOy+WDFfr+7\nr7t2VXnppRqqqhTWz/kWgFMDR9Q75vjQMWhcTjrv3BTY4oUIcT4De9KkSRgMBqZOncrzzz/P448/\nzsKFC1m1ahUJCQlMnz6dadOm8Ytf/IKZM2diNEoXZFtmWLMKgNyR43C5YMOqWMIiXAwbXRbkykSg\nlHVOprhbCl13fIeuugqA7t+vwjzrAXSbvvd5/i23OLnnHjtJxZ7lO/N7X1Zv/8lBnpnvOu3NDHDl\nQoQ2n13iGo2GuXPn1tuWkpLi/fPkyZOZPHlyo+dv3LjxEsoTLc2wZiWqonBy0CiyNkdRWmxg/PWF\nGMPcwS5NBNDR0ZMYtuSfpK75FIvdyqBFfwcgbOkHlKzMwNWn7wXPnzPHhu69nZywd+F/a3sx6eZC\n776CXgNwa3V0OLCzWT+DEKFGJk4RZ9ls6Dd/j/OywdRExbL6i3gAxl9f6ONE0dbsu+YOHGHhjFkw\nn0GL/k5FQiesj/4JxWYj4tUXfZ5vtBaTaD/BfsNlfLioM7syzz6LcxnDKeqeSvzRfVBT05wfQ4iQ\nIoEtvHT796I4HDiHDed4ThiH9prpP7iCjl1k4FZ7Ux0dx+o/zqc8sSun0sbwyfOLqHrwEZwpvTB+\n8TlK+YUfgej27gGgxy390elU3n4lmdzscO/+/D6D0Tqd6HZkNevnECKUSGALr7p/XJ2DhrCmtnU9\n4QaZAKO9OjZiLEve+Jw1896hOiYeFIWaqT9FqanB+OnyC56r2+uZjyFh4gDu+WMudpuGv/+5B0Vn\n9IAnsAH0Wzc374cQIoRIYAsv3U7PIKKi5MFsyoghPtHGwKHyakYosd38YwAMK7++4HHaPZ7AdvYf\nyNDLy5l8Vx7lpXpee7YnZSW6s4G9RUaKCxEoEtjCS7crC9Vg4N9bB+Owaxh/XSEare/zRPvh7tET\nV1J39BvWwwWmFdbt3Y1qMOBK6QXAxB8Vcu2tZ8jPC+PVZ3pyWt8Fa0wCuqxtLVW6EO2eBLbwcDjQ\n7d2Ds+8AFiwyYTC6GDOxsfUURXtmHzseTXlZ42HrcqHbvw9nal/Q672bb/vZKSbeWEDe8XBefbYX\np5MHoM07iZKf30KVC9G+SWALALQH9qPYbByJHsLx4xquGFtChEle5QpF9nETADCsXd3gfm32EZSa\nGlwDBtbbrigw+Zd5jL2mkBM54fxf9pUA6Hdub9Z6hQgVEtgCAN0uz/PrD48MR1FUrr5JBpuFKkf6\nVagaDY0Fdt2AM2f/geftUxS481cnmXhjAWvKrwCgfI2MFBciEHxOnCJCg36n5x/VT08O58YfOUns\nbA9yRSJY1OgYnEOHocvcglJWihoVXW+/1hvYAxo8X6PxtLQ36rvCctj77x3Yb9YyapTL7xouNFXq\nrek9/b6OEO2JBHYIO/cfxZs3fI8eLbu4jIljcoJXlAiac78fhvYazvDMLWT9czFHR19TLyR1expv\nYddRFLhyukrFmi4MKssk+fZwXnzRxk9/6vCrlk67t9B902qyR19Dfr+hF/mJhGhfpEtcoLhcxGQf\nZA8DSBrgomdqVbBLEkF2PG0MAN22e6YWXp6R7flv/RFcm7dijU3g4/0VPhcNMYweSidO0ysij5kz\nw3j0UaNn8jNVRXv4UIMzoek2fc8Nz/yagV/8lxvn3EvnHb7nNxciFEhgC6JPHsXgqGEbaVx7y5lg\nlyNagcKe/amOjKHr9m9BVb3bTYWniSgt5EzvQX5dxznE0zr+5KkN9OvnYuFCA9ddGw7T7iZ29DBi\nr7ocTf7psyeoKuYnH0VR3Wy//R4Arn7pISLzcgP34YRooySwBcYdhwA4HHMZA9NkohQBaDQcTxuD\nqaSADod2eTcnHvQs6E30Wu4AACAASURBVHEm9bLGzqzHMdgT2J3ztvHll1X8/Od2uu1bScKqD3Ho\nwtDmHMU86w/eXwoMK1eg37Gd7CsmsXXa78n49VMYqyq56akZ9F77GcaK0gB/UCHaDnmGLahZfRSA\niIndUZQgFyNajcPpN5C69nP6rPqYM6meFnWHg57wrvvaF2dtYOt2bCciAl56yYZ1z1uQCaOd63kj\n6jFGfP0Vxv9bhu3W2zHNexZVUdh+x70AHBp/M4aqSkb962XG/f0pVEXB1X8gzgEDoaYGxeWiesav\ncKSPbYY7IETrIoEd4orO6Ol7bB8uNCTe3BnV9ykiRJwcNIqKhE6kbPiKLdPupyYqls47N+HUGyhI\n6efXNdS4OFzdktDv2A6qilJURPLO/1GdOpCEnoOZ/NU77GYg2gcfxfj9ZnR7dlEzZRolSb2819hz\n4zSODbuKXhu+pPOuzXQ6tBPdnrOtfsOKLyh/ayH2m24J+D0QojWRwA5xX/1fPL9jO6djU1BN4b5P\nEKFDo2Hnzb9gzIL5DFv8Jnuvn0LcsUMcG5aOy+jf98ryjGwmJPUjZeMK1ixeTdK2DcQ7HGwfcz0/\n/tE+ug+K5PF/vMzfqn4D/36birBYPhn3i/OuU9GxK9t/8iu2/+RXaO02TEX5OMJNxBw/wqQXZmL6\n9d24EzviHHl5oO+CEK2GPMMOYUVn9JSsPo2FSioH9gl2OaIV2nfN7ZR07Un/r5dx3XO/A2D/xB83\n6RonBnsmUEnKXE/q6uW4dHoOj70RgKGXl9PrrTE8NfoDntXMZnDNFh5/IZ2dmZZzx7rV4zIYKe+U\nRHV0HHmXjWTlQ39B43IRNX0y+tXfXPyHFaKVk8AOYV9+3IHRLs9rO/kD0oJcjWiNVJ2eVbNexBqb\ngLkon6OXTyR3xLgmXePY8Ktw6XSMeu9VYv9/e3ceFlXVB3D8O/vCIKCCKwjugqEgapprppjlvqSW\nZppa2WKZmVpp7mWavW65vZZbaWrmW2nu4oKYCyoqguK+IJvAzDD7vH9QlCtjqTPI+TwPj8/MXGZ+\n9+dwfveec+85F89wtmErzN5/Tcai0ToIGhaKcu4LlG3hy+XzamZNqsyE4dU4GOuDo5AZci/XbUzM\nkLFI9Hp8e3bF+42BYBZruAuPH9ElXkylpEjYvbUUQ9XbwQTXaomCLdxZVlBVVs5aj3faVW5UCOF+\nr0w0+ZTk1NOdCd30AzaFkvhur95xu5Klrbzy1kVad0hjw5oADuz1Zd4XwZQpb6LVc+k82TwLtebO\n1Tu5RXvqdGqBbvhQ1KtX4ihZEsOEz+57XwXBk0mczrt1PD16aWnilqLC+Pt7P5A8DRqkZt06OZm6\n8qhkFpYv2nrfDbGn8/JSYTCIM63CPIo8Sa1WquzeQEZIDTKDXRt+Sb2iZMOPZYiL8cVuk6LW2GnU\nIosWbdMpV/H2eDs1rQxGI36tmiA7d5bMuHgcQZUe2D48qL+94kDkyjX+/t73tb3oEi+GDh+Wsm6d\ngqaVTuCnv8a10MjHrlgLnsWhUJDcsoPLxRqgTHkL/YZcZMrXJ+nQ8ypqjZ3tG0oz5p2aTBlVlZ2/\nlcKgv2XBdq0W4zvDkNjtqFeucO2D7K7PcS4I7iQKdjHjdML48SoA3qj7MwDXQuu5MyRBuCcfPxvP\nd7/OpLknGfz+OWrVyeVskpbl8ysyfEAoX39RiSO/lygYtjY/3xGn1iu/YN9jAFyWeBK/5k9SukIp\nvF8bAHl5/ypOzcwZ+DVvhHrZt//qfQThbsQYdjGzfbuM3bvltGplIyp9BwBXatd3b1CC4AK5HOo1\nyqZeo2yyMuTExfgRu6Mkh2J9ORTry5LZTqKjbbRvL6frsx3wWvMd8sMHsdW7/fstvXoF387tkGZk\nYA+qhHrtDzi1WvTTZ/6j2JSbNqAb/wkAumFvY60bib22a7PBCYKrxBl2MWK1wiefqJBInIz+0EjF\nI7HoS5clK7CKu0MThPviV8pG285pjJ1xilGfJdG6/XUUKiurVyt4+WUNL6/vDkDcmNWs3Hzutt/3\n+vRjpBkZ6MdNInPPAWxhT6BZ9i3yQwf+UTzaGdNwSiToPx6HxOlEs3jBv9k9QbgjUbCLkYULFSQl\nyejb10pdy37U+mwuRjwlxq+FIksigeCqeXTvd5XJX59k1GdJRHe6zn6/FhjRELx/G+/2C+PFFzUs\nWaLg2jUJ8rh9qNf+gLVOBHmD3gCVCv3E/CvKtV9MufuH5eSgWrkC+ZHDNz0tP3IYxYH9WFq1Ju+N\nt7CXLYfqf+vErWXCAye6xIuJ1FQJU6eq8PNzMnKkGeX8TQD5BVsQHgN/Fu/gqnl0eQnOjW1CaMJm\nnip9hM2bI9i8WY4EBwmakfgBCQOnUkEiRQJYGzfBWr8hqi2bkKWcxl45f2rUP5cPlZvy6PRRP/zO\nnsIpkbDt3SmkPBUNQLNZ0/ADtjXswKW952lY/xnC/7cU5Y5tWKKfdUsuhMeTOMMuJiZOVKHXS/jw\nQzMlS4Jq4wbscjlXwsVUjsLjRyKB1Jb5C4JMbflfJs05yQv9LzOywteE5h1kGS8S+WYrQp9QMnq0\nipgYGbmvvAaAetH8296vzo+L8Tt7iguRTbCqNDSdOw7vaxfxykil6q4NZJcL4lLdxgCce/JpAJSb\nNj6ivRWKi0ILtsPh4JNPPuGFF16gT58+nD9/87q0q1atokuXLvTo0YPt27cDcOXKFfr160efPn14\n6aWXSEm59yL3wsMVFyfj++8V1K5tp29fK7LjCchPJHAxoglWjZe7wxOEh+JCVDMcUhkhsVsoHWCm\nbYuzjNZ/jFWp4eiAN6n/VBYGvZwFC5R066al2ojeZKgrIF+yjNxL2QXvozDqCft1BSafkmx5fyp7\nBo1GmWeg5YxRNFjyJTKblfgu/UGa35xerxaOw88P5dZN3HV+VUH4Bwot2Fu2bMFisbBy5UqGDRvG\nlCl/jfGkpaWxdOlSvv/+exYtWsT06dOxWCx89dVXvPTSSyxdupTBgwczffr0h7oTwt2ZTPDee/kX\nmk2ZYkImo+D+1OTmz7s5OkF4eCy6Elyo15TSZxMpe+IgjRZPRZudSXzX/lRrp2HgexeY/t/jrF5t\nZOBAC16+cr4wDUFp1jMnahU9emjY+Vspgtf/iMqo51SnPthVGk43f47kZu0ok3yMqrs3cqN8MMnN\nniv4XKdMhqXlM8iuXEZ24rgbMyA8bgodwz548CBNmzYFoG7duiQkJBS8dvToUSIiIlAqlSiVSoKC\ngkhMTGTEiBF4e+fP4GK321GpVA8pfKEwM2YoCU/+kR2+H1Pqy0DMXXugXvoN9oAyXIhq5u7wBOGh\niu8ygODfd9Bu3GvIbDbSqoRytGO/gtflCieZJFO/LURFQ+aJlpg/VfOO5D8E73gH1Y6SfM4K9BId\ns5xvEHLNjn9ZC7teH4O+dDm0NzI43G0gTrnips+1tI5GvfYHlFt+Iy+s9iPea+FxVWjB1uv16HS6\ngscymQybzYZcLkev1xcUZgAvLy/0ej0lS5YEICUlhc8++4zZs2e7FMz9TtNWXLmap6NH4X9fpZBA\nb5Q3rLA1EdXWP1Yzmj0Lje/jn28vL3Gw6IrHNU/GiCgODv6QOt98RUZIDfaOnoHGV3fX7XUNVFxo\n04FqG1axpe8E0k5ZKR93lUnOkSxcUh2WQFBlE1GNc7neejSBwWYkErh1YKlE904wZBC6HVvQTRj7\n1wsOB1gsoFY/jN31KKI9f/AKLdg6nQ6DwVDw2OFwIJfL7/iawWAoKOD79u3j008/5fPPP6dy5cou\nBSPmni2cq3P0Wq3Qt6+WIfavUGIlZ84CHBUDUf20FmvDRpjbdcGw6/G+tkDMJe6axz1Ph9r05FCb\nnn89Uci+7u/yKoG7NtJ82TgATDofSkxpz8DTV9m3y4uTR3SsTfFn7TJ//MuaiWiYTVTjG1Sqkldw\nh2SaQ4lvvfrIY2PJOHkWZ+nSKGL34P3GQKRXLmPq3Qf91Bn5s8E8hsRc4q6534OaQr8tkZGRbN++\nnXbt2hEfH0/16tULXgsPD2fGjBmYzWYsFgtnzpyhevXq7Nu3j4kTJ7Jw4UIqVKhw/3sh/GtffKEk\n6YiZQfL/Yg+ogLljF1AosD7Z2N2hCYJHM5YMYMfbE2n51SgcMjnb3p2CqpyWFlWzqd/0OnlGKQmH\nS3B4nw/HDnmz6acANv0UQOkyZuo/dYOop27gbALmDp1Q/B6HesVSrE82xqdXN7BacARWQrN8CTgc\n6GfMLpgHQaLPRXY6GVvt8Me2kAv/TqGrdTkcDsaOHUtSUhJOp5NJkyYRExNDUFAQrVq1YtWqVaxc\nuRKn08ngwYOJjo6mQ4cOWCwW/P39AQgJCWHcuHGFBiOOyArnypFrbKyMTp00DCj1IwvSu2J8ZxiG\n0WNu226dOMMWEHm6G8kfi4I4ZfkLjNwpT1aLhONHvDm415f4/SUwm/K3rVbNTs/oND75phYyizH/\nCnKrlZyFS1irCOG5sQMJOH2c3YNGczK6O/5Jx2gz5R202ZlY69Xnxo+/FOluc3GG7Zr7PcMWy2sW\nMYX9IWRnQ4sWXly7JuFciz5U3LqcHz9bRnrV4nfhiyhErhF5ck1hebKYJRw7VILf9/hy4rAPJpOE\n7qximaQPyOVcGDcPnwEdWbcrBa/0a3Qe3gulMZeTbbpTc8tapDYrjlphyI8fwzDyY4zvDn+Ee/dg\niYLtGlGwH3P3+kNwOqF/fzW//KJgxDADk/4biFGi4Lt5GwvuES1ORCFyjciTa+4nT6Y8KUcOlODA\nHl8uHnJgtiswoCO4moEnm92g/lNZVLsUR9tJb6Ew5WFRa9n23hSiXu1KyTq1cGq1ZB46DgpF4R/m\ngUTBds0DH8MWio5Zs5T88ouCRo1sDG8cg3RaFufb9iiWxVoQ3EmtcdCw6Q0aNr2B0SAlPs6H3/c4\nOHHUm3PJXqxaXJ6wiCB29nmCVpoYMmuHYyxVhno6b0wv9EK7cB7Kjb9gad/J3bsieBBRsB8TMTEy\nJk5UUrasgwULTGinrQXgXIOn3RyZIBRvWi8HjZ/OovHTWWRnyTmwx5d9MX4cO1iCYwcbMEtdj8gn\ns2nYLIv2jcH08gC0C+eh/n65KNjCTUSXeBFzp66mCxckREdrycmRsG6dkfoRFkqFVwck/HfOBpyy\n4nlcJrp6XSPy5JoHnaerl1TExfgRF+NHRpoSgDJlHHTpYmPKtkZ4nz5CxpFTOAMCHthnPiqiS9w1\n99slLvpKiyKnE9mpRCTp6dy4Ab17a8jIkDJxopn69R0oN21Emp6OuX3HYlusBcHTlatoplPva0yc\nc5LhE07TtHUGJpOEuXOVjD7VD4ndzv5313L58l/L38rj9qFevBDppYtujFxwF3GGXcT4y21Y27ZD\nsX8fTpmMxeVGMvDSWAYOtjN+vBmcTnzbtEB+NJ6smDjWXFe6O2S3EWeOrhF5cs2jyJPVKiHhkDeJ\nW+z8dqgWCdSmnuQQ1UINDPefy6s7PgDAotay8ePZpNaMAKBTU9cmp3pUxBm2a8QZ9uPulVdQ7N+H\nuVlL0pUV6H9pAvv9n2Pc0KsAaObMRHHkMOYOnbHXqOnmYAVBuB8KhZOIhjn0Gm3gQmRTIoinS6Ud\nPHl8Df13jCCdUsyvMByZxUKbSe+gyUpzd8jCIyT6S4uIdbtSCDoQQ/RPP3EltB495Ss5kqfkJ68e\ntEj7DUeDcBz+/shTzuDwD8AwbpK7QxYE4V840elFqhzazvK0jigkBgwKH3r5/sKWyw05ShCzDG9R\nYdRMfnlzGo6nxM0gxYH4Ly5CIlbPxymRMMpvBru2+eNbWcHR2Z+hHzMBp58f0tRUzG2fI+vnTTjK\nlXd3uIIg/AvXwqI41G0QSqMeQ6kybJ44l+5z1Hz8xSmS23djv6whLa+vZ9snOdSr58X48UpOnhRN\n+uNMjGEXEXsXraPjyL7ElmlL49QNVAzOY9jYM3h5290dmscSY7OuEXlyjbvypDDqsak0BVOk/qnc\n4X08P+E1dpduy7OmX9Hr8y9OCwuz07WrlS5dbJQv757mXYxhu0aMYT+mQv+3AoCPUt+nQlAe734i\nirUgFAdWre62Yg1wtW5DrtWKoEn6RpJW7mHhwjzatrWSlCRl3Dg1ERFedOmiYcUKOTk5bghceODE\nGXYRkHf6CuUa1yaRmnQP3cfrH6ag9XK4OyyPJ84cXSPy5BpPzFPFw3t5dsIbmDp3JXfeYgAyM2H9\negVr1siJi8u/TEmlcvLMMzY6drTxzDM2dDqQXr2Cav2PIJFg7tAZR9lyDywucYbtGjGX+GMmJUXC\n4XYTeS1zCmMr/Yfg/7TBajO5O6wiwRMbWE8k8uQaj8yT00nn4T0pdT6ZzNhDOEJuvr3rwgUJa9cq\nWPODlOvJuZQmnZaK3bzms4K6GduQ/NH8O3Te6Kd9hblztwcSlijYrhFd4o+RHTtkdIqW0i1zAdmK\nklSY2AClymOOrwRBcDeJhKMd+yFxONDOnXnTS4ptW3hieCfGLQrm5Bk1mZQiiRrMsw4gIn0re52N\neEs+h3mh07HZJJQY3B/Ngrlu2hHBFeK2Lg9ktcLUqUq++krJEOlcSpPB4fb9QVN018cVBOHhSGnc\nmuZr56FevoS8/oOwV62G16RxaGfNACA3oDyGGnUwefti1vmQVSGE/YHRbE6uw8FYX2adUDObVvxG\nNOVGj2Dz+lTODu5Hn+eD3btjwm1El7iHSUmR8MYbGg4dklElyMwxU3XUOddZPvsX8nxLeWa3nIcS\nuXKNyJNrPDlPPYyn8OnzArYqVXGWLIXi9zhslauQO38xq7NL3PN3r1xQcSDWl7SYLL671o4QzvEF\nw1jTcDLRbe20bWujSpW7lAmbDdmZ09iDQ0ClKnhadIm7RoxhF1EWC8ydq2TaNGX+wvfdrcyKWkjA\niDcwvjqY5c++Dnh2o+FpRK5cI/LkGk/PU4MlX1Lnp28BONvwaXYO+RSr1/0VBH3CDbpPe5WKOadZ\nQh8GMw8TGqpWtdOmTX7xjoqyI5eD9PIlfF7ojDzpFPaKgdxY87+CMXRRsF0jCnYRtG+fjA8+UJGY\nKMPf38HkyWY6tsjAr3EU0pxsMmMPsTbFAnh+o+FJRK5cI/LkmqKQJ59LZ5E67GQFVgGJpPBfuAN1\ndibRk98mIDmB1KBIhldZzZq4YIzG/PcrUcLJM41zmH2sJWUvH8basBGKuFhstULJ2rgdNBpRsF0k\nLjorQhITpfTtq6ZDBy2JiTL69rWwd6+BDh1saKdMQHY9FePQ93FUqOjuUAVBKAKyK4aQFVT1Hxdr\nAJNPSX4etwhTzxcpc+EQ3yQ8yZklW1ixwsjLL1vw87HTY+Mgyl4+zAJeJfDCVn4KegX5yROce2v0\nA9wb4VbiDNsNkpKkzJyp5Icf5DgcEho2tDFmjJmoqPx7qxV7duHT5XnslauQtSMWVCrW7UoBisZR\nvqcQuXKNyJNril2enE7Cfv2OJ7+ZhlMqIb5zf66EP0nNTauptutXTpZtQN8K/+PY8VLITXkkUJsK\nXKZPrf1Uah9BnTpGGja0U+LeQ+jFmugS91BOZ37X95w5Sn77Lf/i/Jo17Xz0kZnWre1IJPkLfCj1\nOXR9rzvarHTWT/yGtOpP3PQ+xa7R+BdErlwj8uSa4pqncsd+5+kvR6DNzix47nrVMDZ+NBuzty82\nq4SUJC2ajXGM2/sS8dSlBdvJxpdSkgxq1nRQu5kPjRrZqV/fjr+/x5Qct7vfgi1u63pQHA6w2UB5\n8/rTaWkSVq2Ss2KFguTk/OkF69Wz89ZbFtq2td28wo7TSZP5E9FlpHKg5xu3FWtBEIRH7eoT9Vk5\n+2eq7NmI7+VzZFaqxpmn2uJQKACQK5xUDzNAWG1OenWl7uY1pOlCMDq1+BiuwEnYcrIVr837mjNU\nJTDQQWSknYgIO5GRDsLD7Wi1bt7JIkKcYf9DBV3U6deo9dsqam75EU1OFmlVQrG8+xFrbB35+Rcl\n27fL0NhyaSqPpWPYKZ6plEQFUwrSrExs1Wvk3zf5RDgAySPG03jxVK7VqMPP4xfhlN1+PFVcj/L/\nCZEr14g8uUbkyQUOB1Hfzaba7g04HU6yAisjNxopf+owN1SlGBGxiTXJdcnI+OtMRSZzUquWg4gI\nO2FhDkJDHYSGFo+u9OLRJW40Ijt3FmfJkg90/luXGY0cm7GYajt/psKRWKQOBwatL+d11alx/QAy\nHMTQlANE0Vy7nwjTPqSOmxfqcEokBdMCmp/rgMPfH803izD6lmLdZ8sxlC57x48WjYbrRK5cI/Lk\nGpEn192UK6eTWptW89SCSTh9fbmx5mdSvMM5dEjGoUMyDh+WcvSoDJPp5gvlgoLyC3doqIOwMAc1\najgIDnbc2olZpD3eBdts5tLQkdT+ZTkKUx4AmUFVSXkqmpB3XsVRucrDDdBoxOuziaiXfoNUnx/r\nMa96zLEN5hvzS5jQUJOTLCgxjCY5G4D8wmyLrIelaQvsNWuxNVtFbplALFodFY7GEblyLmWSjwGQ\nU6Yim0Z8SValancNQTQarhO5co3Ik2tEnlx3p1xV37aO5rPH4ihVihvrNmCvUbPgNVu2gcxvNsD2\nXUguXsKgd5KUF8gyU3c20hbIL+YymZOgICdVqjioGmKltX0j4enb8VPnoapaAUur1gU9ln8nycpE\n+9V0ZGdTMHfuirljl391Jf2D8vgWbIMBn369Ue7cjr5kABfrNcUrI5Xyx/Yjt+bfo2yrXgNL85ZY\nnn0ea+Mm3DxAnE+WchrN7P+g2L8P2xN1MAwfeduE+X+yWuHcOSlJSVJM2/fTYe2rlNef5iIV+ZaX\nWUofkqhBydIWaoXnUitcT80n9JTwtaG7fhntjQxuVAjG4nWPvh2nk4CkoyiNeq6G1sOuuvf0o6LR\ncJ3IlWtEnlwj8uS6u+Wq59mdeL//DvaAMuTOno8ttDaapYvRfD0L6Y0bd3yvY9Vb8XPn5SRc9OP0\naSlnzkhRZlzjO3rRnJjbtt9T6nlWN5uOtlYQgYEOqivO0HhCF9Tnkgu2yXt5APrPp7u9aD+WBVty\nIwufF3ug+D2O81HN2T50ElaNFwAKQy7Bv++gUeJulHt2ITEaAbAHBWPq9SKmF3qzLslIQPIxwn79\njpB9W5A4nTikMqQOO3a1lvjBXxFb9UUuX5Zy+bKES5ekXLok4dw5KVKrmTF8ygd8jgQns+RDWRv5\nKaqyeQRXNRJczUgpf+sj+38XjYbrRK5cI/LkGpEn190tV52aVka9aD660R8gcfy1RLDDz48jLbtw\ntlFrsstXwiGTUercKRos+w/lE37HVrkKOYuXY68VijxuH96vvIQ8/TqHQtrwXeAbXMgqRenrZ+mV\nvoAm9l3komM0E7lGWWbxJgGkMY33WO/Xl3l5L1PTdIQNNd5i87OfE1AGAgKc+Ps7KVnSiZ9f/o/8\nEVyS/cALtsPhYOzYsZw6dQqlUsmECROoVKlSweurVq3i+++/Ry6X8/rrr9OyZUsyMzN5//33MZlM\nBAQEMHnyZDQazb0jMZtJu5IJOt1NT0svXsDnpR7IT57A1Lkry3p+iFOef3Wiww4mkxRTngyTUYpV\nb6fcqcPUjV9PVOLPqGx5t33MMWVdpqs+4HtTVzpbVzOX1/Ehh8X04z+8jQEvypBKDe1F6qri6Zr3\nPeVMF0n3CeTXVyaS1zgc6e1ryT8yotFwnciVa0SeXCPy5LrCcuWfdIxam35Ak5PF1dB6nGzTDatW\nd9t2EruN+itmUWfdN9iUKtIr1yIgKX8IMe7ld0l47sWbz5KdToI3/UyTZV+gMWYDYJUomB48iYXq\n18jOUqDIzGKTpRVhnGAmbzKUGTi4vVH39s4v3BV9cuhuXkabjO8pl3eWXF1Zkms+x+mo7lhDquLt\nDTqdE52XAx/nDbRldOh8ZXh53bGT9+Y8POiCvWnTJrZt28aUKVOIj49n3rx5zJ2bvwRbWloa/fv3\nZ82aNZjNZnr37s2aNWv4/PPPCQ0NpUuXLsyfPx+lUkm/fv3uGYhDKkPqdGCUe3NW9wTJ2idQWfQ0\nz1yH1mHgW583+Vj3JTf0TmxWKVarBJv17tnQkUsPVtGRn9ChJ4nqrKIHe5TN8PZxoCthw7uEjZZl\nL/PBgV5UTDtyx/exKVWciO7BoRdeKzirdyfRaLhO5Mo1Ik+uEXly3YPOVXDcNhos+RKfaxfJCKpG\nbP8PuPpE/btur8lKp9bm1cjNJpKbP58/+9vftAn0pnSvDnidOc71SpHsixhEorouqSYfsnOk2DJy\nKJl+mqjMzbTPW4U3emzIuEgg5bmCivxh2HjqFDxXnSS80QNwmiocIIrDsiiOquqToS6PRK1CplGg\nUoFGZUejdrJmb+B95aHQgj158mTCw8N57rnnAGjatCm7du0CYOvWrezcuZNx48YBMGTIEAYPHsyY\nMWOYP38+/v7+JCYmMn36dObPn3/PQGIkzdCjoxLnqUkiMvK7S65QnvGaiazx6oNaI8Fit6BQOpEr\nHCiVTjRaO2qNA7Xm5n81GjuqPx576ex4l7Ch87GhusN60lKrhcp7N1M28TASu508n5IY/fzJKRdI\nas26HlGo/yQaDdeJXLlG5Mk1Ik+ueyi5cjpRGPX5Z+IPYAxSlZtN44WTqbp74z23y/Uvx/EWXThY\nvzvXZWVxZBmpdnQ7Ecd+ptb5XcgdNswyNVe0wVxVBaGx5FLZcBIf+53H5G/dp/tRaC+9Xq9H97du\naplMhs1mQy6Xo9fr8fb+65Tey8sLvV5/0/NeXl7k5hZ+u1Yz5+0XDwCUB+b+8ZPvIa0J/cLdj9YE\nQRCEx9DLzQrdxBt48o+fv0QA7xU8UgEhf/w8TIUu/qHT6TAYDAWPHQ4H8j9G4299zWAw4O3tfdPz\nBoOBEsXhDnhBEARBeIgKLdiRkZHExOSf/cbHx1O9evWC18LDwzl48CBms5nc3FzOnDlD9erViYyM\nZOfOnQDExMRQGw+cHAAABMdJREFUr169hxS+IAiCIBQPLl8lnpSUhNPpZNKkScTExBAUFESrVq1Y\ntWoVK1euxOl0MnjwYKKjo0lPT2fEiBEYDAb8/PyYNm0aWjFZrCAIgiD8Yx51H7YgCIIgCHdWaJe4\nIAiCIAjuJwq2IAiCIBQBHrEe9ubNm9m4cSPTpk0D8i9umzhxIjKZjCZNmvDmm2+6OULP4XQ6adas\nGcHBwQDUrVuXYcOGuTcoD1LYzHzCzTp16lRwC2bFihWZPHmymyPyLEeOHOGLL75g6dKlnD9/ng8/\n/BCJREK1atUYM2YM0sKmsiom/p6n48eP89prrxW0Ub169aJdu3buDdADWK1WRo0axeXLl7FYLLz+\n+utUrVr1vr5Tbi/YEyZMYPfu3dSqVavguTFjxjBz5kwCAwMZNGgQx48fJywszI1Reo4LFy4QFhbG\n119/7e5QPNKWLVuwWCysXLmS+Ph4pkyZUjAzn3Azszl/YoulS5e6ORLPtGDBAtavX18wrfLkyZMZ\nOnQoDRs25JNPPmHr1q20bt3azVG63615OnHiBK+88gr9+/d3c2SeZf369fj6+jJ16lSysrLo3Lkz\nNWvWvK/vlNsPDyMjIxk7dmzBY71ej8ViISgoCIlEQpMmTYiNjXVfgB7m+PHjpKam0qdPHwYOHEhK\nSoq7Q/IoBw8epGnTpkB+70NCQoKbI/JciYmJ5OXl0b9/f/r27Ut8fLy7Q/IoQUFBzJw5s+Dx8ePH\nadCgAQDNmjVj79697grNo9yap4SEBHbs2MGLL77IqFGj0Ov1bozOc7Rt25Z33nmn4LFMJrvv79Qj\nK9g//PADzz///E0/R48epV27dkj+Ns3crTOruTpT2uPoTjkrXbo0gwYNYunSpQwePJjhw4e7O0yP\ncreZ+YTbqdVqBgwYwKJFi/j00095//33Ra7+Jjo6umCSKMgfjvqzrSrO7dKtbs1TeHg4H3zwAcuX\nLycwMJDZs2e7MTrP4eXlhU6nQ6/X8/bbbzN06ND7/k49si7x7t27071790K3u9PsacV1prQ75Swv\nLw+ZLH9lmaioKFJTU2/6Ty/u7jUzn3CzkJAQKlWqhEQiISQkBF9fX9LS0ihXrpy7Q/NIfx9bLM7t\nUmFat25dkJvWrVszfvx4N0fkOa5evcqQIUPo3bs37du3Z+rUqQWvufKdcnuX+K10Oh0KhYILFy7g\ndDrZvXs3UVFR7g7LY8yaNYtvv/0WyO/SLF++vCjWf3OvmfmEm61evZopU6YAkJqail6vx9/f381R\nea7Q0FDi4uKA/BkcRbt0ZwMGDODo0aMAxMbGiuuP/pCenk7//v0ZPnw43bp1A+7/O+WRpx5/ds/Z\n7XaaNGlCnTp13B2Sxxg0aBDDhw9n586dyGQycVXvLVq3bs2ePXvo2bNnwcx8wp1169aNkSNH0qtX\nLyQSCZMmTRK9EfcwYsQIPv74Y6ZPn07lypWJjo52d0geaezYsYwfPx6FQkHp0qXFGfYfvv76a3Jy\ncpgzZw5z5swBYPTo0UyYMMHl75SY6UwQBEEQigCP6xIXBEEQBOF2omALgiAIQhEgCrYgCIIgFAGi\nYAuCIAhCESAKtiAIgiAUAaJgC4IgCEIRIAq2IAiCIBQBomALgiAIQhHwf6O9HxMH6pdTAAAAAElF\nTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.neighbors import KernelDensity\n",
"kde = KernelDensity(0.15).fit(x[:, None])\n",
"density_kde = np.exp(kde.score_samples(xpdf[:, None]))\n",
"\n",
"plt.hist(x, 80, density=True, alpha=0.5)\n",
"plt.plot(xpdf, density, '-b', label='GMM')\n",
"plt.plot(xpdf, density_kde, '-r', label='KDE')\n",
"plt.xlim(-10, 20)\n",
"plt.legend();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"All of these density estimators can be viewed as **Generative models** of the data: that is, that is, the model tells us how more data can be created which fits the model."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [default]",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 1
}