{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualization of Kernel Density Estimation" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.stats import norm" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "samples = [-1.9, -1.6, -0.9, -0.8, -0.6, 0.1, 0.9]\n", "h = 0.4\n", "nh = len(samples) * h\n", "x = np.linspace(-4, 3, 200)\n", "y = np.array([sum([norm.pdf(xval, loc=sample, scale=h) for sample in samples]) for xval in x]) / nh\n", "\n", "plt.rcParams['text.usetex'] = True\n", "plt.rcParams.update({\"font.size\": 18})\n", "plt.figure(figsize=(10, 4), dpi=60)\n", "# draw samples\n", "plt.scatter(samples, np.zeros_like(samples) + 0.02, marker=\"x\", color=\"black\", label=\"Samples\")\n", "# draw density estimation\n", "plt.plot(x, y, color=\"red\", label=r\"$\\hat{f}(x)$\")\n", "# draw individual samples\n", "for i, sample in enumerate(samples):\n", " xmin = norm.ppf(0.01, loc=sample, scale=h)\n", " xmax = norm.ppf(0.99, loc=sample, scale=h)\n", " x = np.linspace(xmin, xmax, 50)\n", " plt.plot(x, norm.pdf(x, loc=sample, scale=h) / nh, lw=1, color=\"orange\", label=\"Kernels\" if i == 0 else None)\n", " plt.plot([sample, sample], [0, norm.pdf(sample, loc=sample, scale=h) / nh], color=\"gray\", ls=\"dotted\", lw=0.8)\n", "plt.legend()\n", "plt.ylim((0.0, 1.2))\n", "plt.savefig(f\"kde.png\", bbox_inches=\"tight\")\n", "plt.savefig(f\"kde.pdf\", bbox_inches=\"tight\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Copyright © 2023 Felix Kleinsteuber and Computer Vision Group, Friedrich Schiller University Jena" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.4 ('pytorch-gpu')", "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.10.4" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "17cd5c528a3345b75540c61f907eece919c031d57a2ca1e5653325af249173c9" } } }, "nbformat": 4, "nbformat_minor": 2 }