248 lines
126 KiB
Text
248 lines
126 KiB
Text
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"id": "7ececd15",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"# Estimateur par intervalle"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 1,
|
||
|
|
"id": "e925282e",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"import numpy as np\n",
|
||
|
|
"import matplotlib.pyplot as plt"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"id": "ba74960c",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"Densité $f: \\mathbb{R} \\to [0, \\infty)$ inconnue, échantillon $x_1, \\ldots, x_N$ i.i.d. de $f$. On veut estimer $f$ à partir de cet échantillon.\n",
|
||
|
|
"\n",
|
||
|
|
"$$\n",
|
||
|
|
"f: x \\rightarrow \\frac{1}{\\sigma \\sqrt{2\\pi}} e^{-\\frac{1}{2} \\left( \\frac{x-\\mu}{\\sigma} \\right)^2}\n",
|
||
|
|
"$$"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 2,
|
||
|
|
"id": "c336ac3f",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"mu = 1\n",
|
||
|
|
"sigma = 1\n",
|
||
|
|
"\n",
|
||
|
|
"def unknown_density(x):\n",
|
||
|
|
" return 1 / (sigma * np.sqrt(2 * np.pi)) * np.exp(-0.5 * ((x - mu) / sigma) ** 2)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 3,
|
||
|
|
"id": "44e372eb",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"def generate_samples(density, n_samples):\n",
|
||
|
|
" samples = []\n",
|
||
|
|
" x_min, x_max = -5, 5\n",
|
||
|
|
" y_max = 0.45 \n",
|
||
|
|
"\n",
|
||
|
|
" while len(samples) < n_samples:\n",
|
||
|
|
" # 1. Tirer un x candidat uniformément dans l'intervalle\n",
|
||
|
|
" x_cand = np.random.uniform(x_min, x_max)\n",
|
||
|
|
" # 2. Tirer une hauteur uniforme u\n",
|
||
|
|
" u = np.random.uniform(0, y_max)\n",
|
||
|
|
" \n",
|
||
|
|
" # 3. Accepter si u est sous la courbe de votre densité\n",
|
||
|
|
" if u < density(x_cand):\n",
|
||
|
|
" samples.append(x_cand)\n",
|
||
|
|
" \n",
|
||
|
|
" return np.array(samples)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 4,
|
||
|
|
"id": "02cedfd4",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAImCAYAAABkcNoCAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhHxJREFUeJzs3Xd0FFUfxvHvpidAQoAQAoYq1UIHEREUJKBSBUFRioqKqCCigoViQ1QURQUrzQKviKCUACJIEZUi0hEQCDWElk4C2Xn/GNhkSUIKSWaTPJ9z9nBndnbm2c2SzW/n3js2wzAMREREREREJFNuVgcQERERERFxdSqcREREREREsqDCSUREREREJAsqnERERERERLKgwklERERERCQLKpxERERERESyoMJJREREREQkCyqcREREREREsqDCSUREREREJAsqnERERERERLKgwklERERERCQLKpxEpEiZNGkSM2fOtDqGFGL58R7S+1JEpPBT4SQiRcakSZN49dVXuemmm7L9mGnTpmGz2Thw4IDT+vXr13PzzTdTokQJbDYbEydOzHC7gpBZRquMGTMGm82Wp/t0leeYm/eQFfvMDld5TS/Jj/dNQcro9czua1zYn7uImFQ4iYjL6Ny5M35+fsTGxma6TZ8+ffDy8uLUqVNO69evX8+oUaP4+eefqVmz5lXlOH/+PD179uT06dO8//77zJw5E8MwrmqfWfn9998ZM2YMZ8+ezdfjSOby8j2Un/tMS+8bEZGCo8JJRFxGnz59SExM5Mcff8zw/oSEBObPn0+HDh0oW7as033bt2/nhx9+yPG3+g8++CCJiYlUqVLFsW7fvn0cPHiQ4cOH8+ijj/LAAw/w9NNPp9suL/3++++MHTs2wz+AM8ooeS+376GC3mdaet8UnIxeT73GIsWLh9UBREQu6dy5M6VKleLbb7+lb9++6e6fP38+8fHx9OnTJ919/fv3z9Gx4uPjKVGiBO7u7ri7uzvdd+LECQBKly7tWJfRdgXFymMXJzl9D+XHPi+9L/OC3jd5K6PXU6+xSPGiM04i4jJ8fX3p3r07y5cvdxQvaX377beUKlWKzp07O9YdOXKEhx56iODgYLy9vbnuuuv46quvnB53aXzBjh07uP/++wkMDOSWW24B0o9R6N+/P61btwagZ8+e2Gw22rRpk+lYhiNHjvDwww9TsWJFvL29qVatGoMGDSI5ORmAgwcP8sQTT1C7dm18fX0pW7YsPXv2dNrPmDFjeO655wCoVq0aNpvN6VgZHfvvv/+mY8eO+Pv7U7JkSdq2bcsff/yR7jW79Nz37t1L//79KV26NAEBAQwYMICEhIQsfyZr1qyhadOm+Pj4UKNGDT799NNMt83OzyK7svO6ZWXlypU0adLEKXtGY01y8h7K7ut4te9LvW+cX6vY2FiGDh1K1apV8fb2pnz58txxxx1s2rTpijmOHDmCj48PDz30kNP6X375BU9PT5555pksn8sl2R3jlJPnLiKFi844iYhL6dOnD9OnT+d///sfTz75pGP96dOnWbJkCffddx++vr4AREZGctNNN2Gz2XjyyScJCgpi8eLFPPzww8TExDB06FCnfffs2ZOaNWvy5ptvZjpm6bHHHqNSpUq8+eabPP300zRt2pTg4GCOHDmSbtujR4/SrFkzzp49y6OPPkqdOnU4cuQIc+bMISEhAS8vL9avX8/vv/9O7969ueaaazhw4ACTJ0+mTZs27NixAz8/P7p3786///7Ld999x/vvv0+5cuUACAoKyjDj9u3badWqFf7+/jz//PN4enry6aef0qZNG3777TeaN2+e7jH33nsv1apVY9y4cWzatIkvvviC8uXLM378+Ex/Flu3bqV9+/YEBQUxZswYLly4wOjRowkODk63bU5/FlnJzut2JX///TcdOnQgJCSEsWPHkpKSwquvvpruNc1p7uy8jnnxvtT7xvm1evzxx5kzZw5PPvkk9erV49SpU6xZs4adO3fSqFGjTLNUqlSJRx55hM8++4zRo0dTpUoVdu3aRc+ePenYsSMTJkzI9LG5kZPnLiKFkCEi4kIuXLhghISEGC1atHBaP2XKFAMwlixZ4lj38MMPGyEhIcbJkyedtu3du7cREBBgJCQkGIZhGKNHjzYA47777kt3vKlTpxqAsX//fse6FStWGIDx/fffX3G7vn37Gm5ubsb69evT7ddutxuGYTgypLVu3ToDMGbMmOFY984776Tbf2bH7tq1q+Hl5WXs27fPsc3Ro0eNUqVKGbfeeqvTYy8994ceeshpfbdu3YyyZcumO1ZaXbt2NXx8fIyDBw861u3YscNwd3c3Lv/4yO7PIjOXP8fsvm6Z6dSpk+Hn52ccOXLEsW7Pnj2Gh4eHU/acvoey8zrmxftS7xvn1yogIMAYPHjwFY+bmcOHDxve3t7GoEGDjJMnTxo1atQwGjRoYMTFxeVoPxn9DsjoNc7ucxeRwkdd9UTEpbi7u9O7d2/WrVvn1P3l22+/JTg4mLZt2wJgGAY//PADnTp1wjAMTp486biFhYURHR2drhvP448/nmc57XY78+bNo1OnTjRp0iTd/Ze6g106OwbmbH2nTp3i2muvpXTp0ll2M8pISkoKS5cupWvXrlSvXt2xPiQkhPvvv581a9YQExOT7nGXP/dWrVpx6tSpDLe9dJwlS5bQtWtXKleu7Fhft25dwsLCnLbNzc8iK1fzuqWkpPDLL7/QtWtXKlas6Fh/7bXX0rFjx6vKndXrmFfvS71vnF+r0qVL8+eff3L06NEcP/dKlSoxcOBAvvrqK+666y4SExNZsGCB01iypKQkgoODM31e2ZGT5y4ihZMKJxFxOZcmf/j2228BOHz4MKtXr6Z3796OgdhRUVGcPXuWzz77jKCgIKfbgAEDANKNk6pWrVqeZYyKiiImJobrr7/+itslJiYyatQoQkND8fb2ply5cgQFBXH27Fmio6NzddyEhARq166d7r66detit9s5dOhQuvvS/iEHEBgYCMCZM2cyPU5iYmKGU2hffuzc/CyycjWv24kTJ0hMTOTaa69Nd1/adbnJndXrmFfvS71vnF+rt99+m23bthEaGkqzZs0YM2YM//33XzaeuWn48OEkJSWxZcsWfvrpJypVquR0v7e3N5GRkfj7+2d7n5fLyXMXkcJJY5xExOU0btyYOnXq8N133/Hiiy/y3XffYRiG02x6drsdgAceeIB+/fpluJ8bb7zRaTntt/gF5amnnmLq1KkMHTqUFi1aEBAQgM1mo3fv3o7nUBAym/nLyIPrU+XmZ5GVgnjdcpM7q9cxr96Xet+YLr1W9957L61ateLHH39k6dKlvPPOO4wfP565c+c6nUXMzBtvvAHAhQsXKFOmzFVnF5HiSYWTiLikPn368Morr7Blyxa+/fZbatasSdOmTR33BwUFUapUKVJSUmjXrl2B5wsKCsLf359t27Zdcbs5c+bQr18/p0Ho586dS3fdnctnervScf38/Ni9e3e6+3bt2oWbmxuhoaHZ2ldWx/H19WXPnj3p7rv82Pnxs8ju65aR8uXL4+Pjw969e9Pdl3ZdfuTOq33qfZNeSEgITzzxBE888QQnTpygUaNGvPHGG1kWTu+88w5ffPEFH330Ec899xxvvPEGX3zxhdM2H3zwAVu2bOHLL7/MxrPMWE6eu4gUTuqqJyIu6dLZpVGjRrF58+Z0125yd3fnnnvu4YcffsiweImKisrXfG5ubnTt2pWff/6ZDRs2pLv/0jfy7u7u6b6dnzRpEikpKU7rLo23yKowcHd3p3379syfP99pDFhkZCTffvstt9xyy1V1N0p7nLCwMObNm0dERIRj/c6dO1myZEm6bfP6Z5Hd1y2zx7Zr14558+Y5jYnZu3cvixcvzvfcebFPvW9SX6uUlJR03RPLly9PxYoVSUpKumKeefPmMWLECF577TUGDx7Mo48+yowZM9i/f7/Tdlu2bMnxWdHL5eS5i0jhpDNOIuKSqlWrxs0338z8+fMBMrzo7VtvvcWKFSto3rw5AwcOpF69epw+fZpNmzbxyy+/cPr
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1000x600 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"samples = generate_samples(unknown_density, 2000)\n",
|
||
|
|
"\n",
|
||
|
|
"x_plot = np.linspace(-5, 5, 1000)\n",
|
||
|
|
"y_plot = unknown_density(x_plot)\n",
|
||
|
|
"\n",
|
||
|
|
"plt.figure(figsize=(10, 6))\n",
|
||
|
|
"\n",
|
||
|
|
"plt.hist(samples, bins=50, density=True, alpha=0.6, color='skyblue', label='Échantillons iid générés')\n",
|
||
|
|
"\n",
|
||
|
|
"plt.plot(x_plot, y_plot, 'r-', lw=2, label='Densité théorique (unknown_density)')\n",
|
||
|
|
"\n",
|
||
|
|
"plt.title('Vérification de la génération des $x_i$ iid')\n",
|
||
|
|
"plt.xlabel('$x$')\n",
|
||
|
|
"plt.ylabel('Densité')\n",
|
||
|
|
"plt.legend()\n",
|
||
|
|
"plt.grid(axis='y', alpha=0.3)\n",
|
||
|
|
"plt.show()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 5,
|
||
|
|
"id": "e086397e",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"text/plain": [
|
||
|
|
"Text(0.5, 1.0, 'Noyau uniforme')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"execution_count": 5,
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "execute_result"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzoAAAF2CAYAAACmtO2KAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAM+FJREFUeJzt3XtYVXXe///XBgU8JGooqJF4aDTLpCAJZgwbKZycJmYaMzNBLqWjMzbk3Kk1kHXNYGXqfXszoTZqt9no7Vydphq9C6WuilFD7WDmN8/HjWIJpgYG6/eHP3fuAGVz+Ky9Wc/Hde3rgsVam/de7d7b12d9PguXZVmWAAAAAKAVCbK7AAAAAABobgQdAAAAAK0OQQcAAABAq0PQAQAAANDqEHQAAAAAtDoEHQAAAACtDkEHAAAAQKtD0AEAAADQ6hB0AAAAALQ6BB0AgCO4XC498cQTXts2btyopKQkdejQQS6XS1u2bLGlNgBA8yPoAECAWLp0qVwul8LCwnTw4MFaPx8+fLiuvvpqGyoLTGfOnNHo0aP19ddfa+7cuVq2bJl69+5td1kAgGbSxu4CAAC+qays1KxZszR//ny7Swkop0+fVps2P3zs7dy5U3v37tWiRYs0adIkGysDALQErugAQICJjY3VokWLdOjQIbtLCShhYWFeQefIkSOSpM6dOzfb7zh58mSzPRcAoGkIOgAQYGbMmKHq6mrNmjXrovt+//33euqpp9SvXz+FhoYqJiZGM2bMUGVlpWefjIwMRURE6MyZM7WOv+WWWzRgwADP90uWLNHPf/5zde/eXaGhoRo0aJCef/75WsfVtR5GkmJiYjRhwoQL1lxUVCSXy6WioiKv7Xv27JHL5dLSpUs92yZMmKCOHTvq4MGDSktLU8eOHdWtWzdNnTpV1dXV9dY0YcIEJScnS5JGjx4tl8ul4cOHe/Zdu3athg0bpg4dOqhz5866/fbbtW3bNq/ne+KJJ+RyufTFF1/o7rvvVpcuXfSzn/3M8zp/+ctfqqioSPHx8WrXrp0GDx7seU2vvPKKBg8erLCwMMXFxWnz5s21zsOXX36p3/72t+ratavCwsIUHx+vN95444LnDgDwA4IOAASYPn36KD09vUFXdSZNmqScnBxdd911mjt3rpKTk5WXl6e77rrLs8/48eN17NgxrVmzxutYt9uttWvX6p577vFse/7559W7d2/NmDFDzz33nKKjo/Xggw8qPz+/eV+kD6qrq5WamqpLL71Us2fPVnJysp577jktXLiw3mPuu+8+zZgxQ5L0+9//XsuWLdNjjz0mSXr33XeVmpqqI0eO6IknnlB2drY++ugj/fSnP9WePXtqPdfo0aN16tQp/eUvf1FWVpZn+44dO3T33XfrtttuU15enr755hvddtttWr58uf7whz/onnvu0cyZM7Vz507deeedqqmp8Ry7detW3XDDDdq2bZumTZum5557Th06dFBaWppeffXVZjpzANDKWQCAgLBkyRJLkrVx40Zr586dVps2bazf//73np8nJydbV111lef7LVu2WJKsSZMmeT3P1KlTLUnW2rVrLcuyrOrqauuyyy6zxowZ47XfnDlzLJfLZe3atcuz7dSpU7XqSk1Ntfr27eu1TZKVm5tba9/evXtbGRkZF3yd69atsyRZ69at89q+e/duS5K1ZMkSz7aMjAxLkvXkk0967XvttddacXFxF6zp3O9ZtWqV136xsbFW9+7drWPHjnm2ffLJJ1ZQUJCVnp7u2Zabm2tJssaOHVvn65RkffTRR55ta9assSRZ7dq1s/bu3evZvmDBglqvd8SIEdbgwYOt7777zrOtpqbGSkpKsq644opavw8AUBtXdAAgAPXt21fjx4/XwoULdfjw4Tr3efvttyVJ2dnZXtsfeeQRSdJbb70lSQoKCtK4ceP0xhtv6MSJE579li9frqSkJPXp08ezrV27dp6vy8vLVVZWpuTkZO3atUvl5eXN8+Ia4f777/f6ftiwYdq1a5fPz3P48GFt2bJFEyZMUNeuXT3br7nmGt18882ec3qh333OoEGDlJiY6Pk+ISFBkvTzn/9cl19+ea3t5+r9+uuvtXbtWt155506ceKEysrKVFZWpmPHjik1NVVfffVVnXfdAwB4I+gAQIB6/PHH9f3339e7Vmfv3r0KCgpS//79vbZHRUWpc+fO2rt3r2dbenq6Tp8+7ZkWtX37dpWUlGj8+PFex3744YdKSUnxrF3p1q2bZwqYXUEnLCxM3bp189rWpUsXffPNNz4/17lzcv66pHOuvPJKlZWV1brhwPlB8HznhxlJCg8PlyRFR0fXuf1cvTt27JBlWfrTn/6kbt26eT1yc3Ml/XAjBQBA/bi9NAAEqL59++qee+7RwoULNW3atHr3c7lcF32uQYMGKS4uTi+99JLS09P10ksvKSQkRHfeeadnn507d2rEiBEaOHCg5syZo+joaIWEhOjtt9/W3LlzvdaY1OfHNwjwpd76jg0ODr7oc7ak869yna++uurbblmWJHnO49SpU5Wamlrnvj8OrwCA2gg6ABDAHn/8cb300kt6+umna/2sd+/eqqmp0VdffaUrr7zSs720tFTHjx+v9ccx09PTlZ2drcOHD+vll1/WqFGj1KVLF8/P//nPf6qyslJvvPGG19WKdevW1frdXbp00fHjx722VVVV1TvN7sfHSqp1/PlXoFrKuXOyffv2Wj/78ssvFRERoQ4dOrRoDX379pUktW3bVikpKS36uwCgNWPqGgAEsH79+umee+7RggUL5Ha7vX526623SpLmzZvntX3OnDmSpFGjRnltHzt2rFwul6ZMmaJdu3Z53W1N+uFKxLkrD9LZ6WpLliyps67333/fa9vChQsbdEWnd+/eCg4OrnX8X//614se21Q9evRQbGysXnzxRa+g9fnnn+v//u//POe0JXXv3l3Dhw/XggUL6gyGR48ebfEaAKA14IoOAAS4xx57TMuWLdP27dt11VVXebYPGTJEGRkZWrhwoY4fP67k5GRt2LBBL774otLS0nTTTTd5PU+3bt00cuRIrVq1Sp07d64VhG655RaFhITotttu03333advv/1WixYtUvfu3Wv9g3zSpEm6//77dccdd+jmm2/WJ598ojVr1igiIuKiryc8PFyjR4/W/Pnz5XK51K9fP7355pvG1qU8++yz+sUvfqHExERNnDhRp0+f1vz58xUeHl7n3wZqCfn5+frZz36mwYMHKysrS3379lVpaamKi4t14MABffLJJ0bqAIBAxhUdAAhw/fv3r3X15ZwXXnhBM2fO1MaNG/Xwww9r7dq1mj59ulasWFHn/unp6ZKkO++8U6GhoV4/GzBggP7xj3/I5XJp6tSpKigo0L333qspU6bUep6srCw9+uijev/99/XII49o9+7deueddxo87Wv+/Pm6/fbbVVBQoMcff1yXX365XnzxxQYd21QpKSlavXq1Lr30UuXk5Gj27Nm64YYb9OGHH9Z744HmNmjQIH388ccaNWqUli5dqoceekgFBQUKCgpSTk6OkRoAINC5rPPnIAAAHO31119XWlqa3n//fQ0bNszucgAAaDSCDgDA45e//KW2bdumHTt2NOhubQAA+CvW6AAAtGLFCn366ad666239J//+Z+EHABAwOOKDgBALpdLHTt21JgxY1RQUKA2bRgHAwAENj7JAABizAsA0Npw1zUAAAAArQ5BBwAAAECrExBT12pqanTo0CFdcsklLJAFAAAAHMyyLJ04cUI9e/ZUUFD9120CIugcOnRI0dHRdpcBAAAAwE/s379fl112Wb0/D4igc8kll0g6+2I6depkczUAAAAA7FJRUaHo6GhPRqhPQASdc9PVOnXqRNABAAAAcNElLdyMAAAAAECrQ9ABAAAA0OoQdAAAAAC0OgQdAAAAAK0OQQcAAABAq0PQAQAAANDqEHQAAAAAtDqNCjr5+fmKiYlRWFiYEhIStGHDhnr3Xbp0qVwul9cjLCys0QUDAAAAwMX4HHRWrlyp7Oxs5ebmatOmTRoyZIhSU1N15MiReo/p1Km
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1000x400 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"kernel = lambda u: 0.5 * (np.abs(u) <= 1) \n",
|
||
|
|
"\n",
|
||
|
|
"# plot kernel\n",
|
||
|
|
"u_plot = np.linspace(-2, 2, 1000)\n",
|
||
|
|
"plt.figure(figsize=(10, 4))\n",
|
||
|
|
"plt.plot(u_plot, kernel(u_plot), 'b-', lw=2, label='Noyau uniforme')\n",
|
||
|
|
"plt.title('Noyau uniforme') "
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"id": "52f92c9f",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"$$\n",
|
||
|
|
"\\hat{f}(x) = \\frac{1}{N h} \\sum_{i=1}^N K\\left( \\frac{x - x_i}{h} \\right)\n",
|
||
|
|
"$$"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 6,
|
||
|
|
"id": "db70a5dc",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"def estimator(kernel, samples, bandwidth = 0.5):\n",
|
||
|
|
" N = len(samples)\n",
|
||
|
|
" def estimate(x):\n",
|
||
|
|
" S = 0\n",
|
||
|
|
" for x_i in samples:\n",
|
||
|
|
" S += kernel((x - x_i) / bandwidth)\n",
|
||
|
|
" return S / (N * bandwidth)\n",
|
||
|
|
" return estimate"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": null,
|
||
|
|
"id": "3081f332",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"(1000,) (1000,)\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"text/plain": [
|
||
|
|
"<matplotlib.legend.Legend at 0x7b8f2c6d3470>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"execution_count": 7,
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "execute_result"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 640x480 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"estimate = estimator(unknown_density, samples, 0.2)\n",
|
||
|
|
"\n",
|
||
|
|
"x_plot = np.linspace(-5, 5, 1000)\n",
|
||
|
|
"y_density = unknown_density(x_plot)\n",
|
||
|
|
"y_testimate = np.array([estimate(x) for x in x_plot])\n",
|
||
|
|
"\n",
|
||
|
|
"print(x_plot.shape, y_testimate.shape)\n",
|
||
|
|
"\n",
|
||
|
|
"plt.plot(x_plot, y_density, 'r-', lw=2, label='Densité théorique (unknown_density)')\n",
|
||
|
|
"plt.plot(x_plot, y_testimate, 'g-', lw=2, label='Estimation par noyau (estimator)')\n",
|
||
|
|
"plt.title('Comparaison entre l\\'estimation par noyau et la densité théorique')\n",
|
||
|
|
"plt.xlabel('$x$')\n",
|
||
|
|
"plt.ylabel('Densité')\n",
|
||
|
|
"plt.legend()"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"metadata": {
|
||
|
|
"kernelspec": {
|
||
|
|
"display_name": ".venv",
|
||
|
|
"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.12.3"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"nbformat": 4,
|
||
|
|
"nbformat_minor": 5
|
||
|
|
}
|