2026-05-12 12:18:14 +02:00
|
|
|
|
{
|
|
|
|
|
|
"cells": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"id": "e60ddaef",
|
2026-05-12 12:18:14 +02:00
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"# 17 — Generative calibration hooks (MMD)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Doc page: [generative_calibration_hooks.rst](../../docs/source/algorithms/generative_calibration_hooks.rst).\n"
|
2026-05-12 12:18:14 +02:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
"execution_count": 1,
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"id": "d98275e1",
|
2026-05-12 12:18:14 +02:00
|
|
|
|
"metadata": {
|
|
|
|
|
|
"execution": {
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"iopub.execute_input": "2026-05-12T14:06:13.541866Z",
|
|
|
|
|
|
"iopub.status.busy": "2026-05-12T14:06:13.541279Z",
|
|
|
|
|
|
"iopub.status.idle": "2026-05-12T14:06:14.135078Z",
|
|
|
|
|
|
"shell.execute_reply": "2026-05-12T14:06:14.133758Z"
|
2026-05-12 12:18:14 +02:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
|
"from optimizr import _core as opt\n",
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"plt.rcParams['figure.figsize'] = (8.5, 4.5)\n",
|
|
|
|
|
|
"plt.rcParams['figure.dpi'] = 110\n",
|
|
|
|
|
|
"plt.rcParams['axes.grid'] = True\n",
|
|
|
|
|
|
"plt.rcParams['grid.alpha'] = 0.3\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"id": "759b0068",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"## Cellule 1 — MMD nulle entre échantillons identiques\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Théorème (Gretton et al. 2012).** Pour le noyau gaussien\n",
|
|
|
|
|
|
"$k(x, y) = \\exp(-(x-y)^2 / 2\\sigma^2)$, la MMD au carré empirique\n",
|
|
|
|
|
|
"entre $X = (x_i)$ et $Y = (y_j)$ est\n",
|
|
|
|
|
|
"$$\\widehat{\\text{MMD}}^2(X, Y) = \\frac{1}{m^2}\\sum_{ij} k(x_i, x_j)\n",
|
|
|
|
|
|
" + \\frac{1}{n^2}\\sum_{ij} k(y_i, y_j)\n",
|
|
|
|
|
|
" - \\frac{2}{mn}\\sum_{ij} k(x_i, y_j).$$\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Équation pivot.** $X = Y \\Rightarrow \\widehat{\\text{MMD}}^2 = 0$.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Démonstration.** Les trois sommes coïncident terme à terme. $\\square$\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Ce que la cellule vérifie.** `mmd_gaussian(X, X, sigma)` retourne $0$\n",
|
|
|
|
|
|
"à précision machine.\n"
|
2026-05-12 12:18:14 +02:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
"execution_count": 2,
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"id": "c399ff2b",
|
2026-05-12 12:18:14 +02:00
|
|
|
|
"metadata": {
|
|
|
|
|
|
"execution": {
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"iopub.execute_input": "2026-05-12T14:06:14.138451Z",
|
|
|
|
|
|
"iopub.status.busy": "2026-05-12T14:06:14.138012Z",
|
|
|
|
|
|
"iopub.status.idle": "2026-05-12T14:06:14.557121Z",
|
|
|
|
|
|
"shell.execute_reply": "2026-05-12T14:06:14.555618Z"
|
2026-05-12 12:18:14 +02:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"outputs": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
|
"text": [
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"MMD(X, X) = 0.000e+00 (attendu : 0)\n"
|
2026-05-12 12:18:14 +02:00
|
|
|
|
]
|
2026-05-12 16:07:42 +02:00
|
|
|
|
},
|
2026-05-12 12:18:14 +02:00
|
|
|
|
{
|
|
|
|
|
|
"data": {
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"image/png": "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3E637ew5Dsex8Hzrrbca3zcAwCzCJgAgITgcjpDWe+ihh3T77bdrzJgxWrp0qfr27auUlBQ1NTWppKREgUAg7H1bTXf7bmxs1Pe+9z397W9/07PPPqsePXroe9/7nhYtWqQFCxZ0uv2nn34acq1evXqpV69ena73/vvvKzk5WYMHDw553wCA2CBsAgAs6ayzztLWrVv173//O+Sjm6F48skn1b9/f73yyistTsfdsmVLt/f91dN9TRkwYIC2b9+uI0eOtDgtVpI2b94sm82m/Px8ozWDwaBuuukmbdiwQQ899JCuueYaBYNBffOb39Qjjzyi6dOntzqS+lVd+c7L2bNnd3pa7OHDh/XPf/5TQ4YMaXE6NADAmgibAABL+sEPfqDKykrNnDmz1dd1BAKBsL9y49jRvuP3EQwGdffdd3evYan5yFxbp+J2x5VXXql77rlHixcv1s9+9rPm5W+88YZee+01FRcXdxr8umratGl69tlnVVlZqdtuu03S0TA9Y8YMXXPNNXrggQc6fcxMX7P5t7/9TU1NTRo6dGjI+wUAxA5hEwAQdR988IGefvrpNu+7+OKL1a9fP/30pz/VSy+9pAceeEB//etfVVJSooyMDG3dulXV1dXavHlzWLWvueYa/fznP9d3vvMdXX311fL5fFq3bp0aGxu7MyRJ0tlnn6309HQtXbpUqampyszM1Mknn9z84UPhqqys1AsvvKDKykp98MEHGjlyZPNXn/Tu3VsPP/xwt3s/3v33368HHnhAN9xwg+67774W91111VX6+te/rocffljTpk1T7969292P6Ws233vvPUkibAJAnCBsAgCi7vnnn9fzzz/f5n3r1q1Tv3791KNHD73yyit68MEH9fTTT2v27Nnq0aOH8vPzW31abFccOzL461//WnfccYeys7N1xRVXaN68ecrKygp7v9LRT9N99tlnNWPGDN1+++06cuSIRo0a1e2wmZ6erjfffFN333231q1bp+eee069e/fWFVdcoTlz5uiss87q1v6P98wzz2j69OkqLi7WihUrWp0abLPZNHPmTH3/+9/Xww8/rJkzZxqr3Zn3339fknTuuedGrSYAIHy2YDAYjHUTAAAAAIDEEt4FLwAAAAAAdICwCQAAAAAwjrAJAAAAADCOsAkAAAAAMI6wCQAAAAAwjrAJAAAAADCO79n8j8OHD+vvf/+7cnNzlZTEwwIAAAAAX9XU1KR9+/Zp8ODBOumkkzpcl1T1H3//+981fPjwWLcBAAAAAJb3zjvvaNiwYR2uQ9j8j9zcXElHH7S8vLwYd4PO+P1+1dXVKTs7Ww6HI9btACFj7iJeMXcRj5i3iFdWnrtut1vDhw9vzk8dIWz+x7FTZ/Py8tSvX78Yd4PO+P1+paSkKDc313I/gEBHmLuIV8xdxCPmLeJVPMzdUC495AOCAAAAAADGETYBAAAAAMYRNgEAAAAAxhE2AQAAAADGETYBAAAAAMYRNgEAAAAAxhE2AQAAAADGETYBAAAAAMYRNgEAAAAAxhE2AQAAAADGETYBAAAAAMYRNgEAAAAAxhE2AQAAAADGETYBAAAAAMYRNgEAAAAAxhE2AQAAAADGJcW6AQAAAJO2fXZQu+t9Ea1xWlaqBp2SHtEaABDvCJsAACCh7K73ae5LWyJaY8blhYR
|
2026-05-12 12:18:14 +02:00
|
|
|
|
"text/plain": [
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"<Figure size 935x495 with 1 Axes>"
|
2026-05-12 12:18:14 +02:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"source": [
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"rng = np.random.default_rng(0)\n",
|
|
|
|
|
|
"X = rng.standard_normal(200).tolist()\n",
|
|
|
|
|
|
"m = float(opt.mmd_gaussian(X, X, sigma=1.0))\n",
|
|
|
|
|
|
"print(f\"MMD(X, X) = {m:.3e} (attendu : 0)\")\n",
|
|
|
|
|
|
"\n",
|
2026-05-12 12:18:14 +02:00
|
|
|
|
"fig, ax = plt.subplots()\n",
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"ax.hist(X, bins=30, density=True, color='C0',\n",
|
|
|
|
|
|
" edgecolor='white', alpha=0.85)\n",
|
|
|
|
|
|
"ax.set_title(r'Échantillon $X = Y$')\n",
|
|
|
|
|
|
"ax.set_xlabel('x'); ax.set_ylabel('densité')\n",
|
2026-05-12 12:18:14 +02:00
|
|
|
|
"fig.tight_layout(); plt.show()\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"id": "01f32911",
|
2026-05-12 12:18:14 +02:00
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"**Résultat attendu.** $\\sim 0$.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Lecture du graphique.** Histogramme gaussien standard.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Conclusion.** L'auto-MMD nulle est validée.\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"id": "6bb48f55",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"## Cellule 2 — MMD entre gaussienne et Laplace\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Théorème.** Deux distributions de moyenne et variance identiques\n",
|
|
|
|
|
|
"mais formes différentes ont une MMD strictement positive.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Équation pivot.**\n",
|
|
|
|
|
|
"$$\\text{MMD}^2(\\mathcal{N}(0, 1), \\text{Laplace}(0, 1/\\sqrt{2})) > 0.$$\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Ce que la cellule vérifie.** Sweep en $\\sigma$ : la MMD est\n",
|
|
|
|
|
|
"maximale autour de $\\sigma$ commensurable à l'échelle des\n",
|
|
|
|
|
|
"distributions.\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
"execution_count": 3,
|
|
|
|
|
|
"id": "a73d2bf4",
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"execution": {
|
|
|
|
|
|
"iopub.execute_input": "2026-05-12T14:06:14.560906Z",
|
|
|
|
|
|
"iopub.status.busy": "2026-05-12T14:06:14.560549Z",
|
|
|
|
|
|
"iopub.status.idle": "2026-05-12T14:06:15.607504Z",
|
|
|
|
|
|
"shell.execute_reply": "2026-05-12T14:06:15.606471Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"outputs": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
|
"text": [
|
|
|
|
|
|
"MMD min : 1.182e-02, MMD max : 1.603e-01\n",
|
|
|
|
|
|
"σ optimal : 0.38\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"image/png": "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
|
|
|
|
|
|
"text/plain": [
|
|
|
|
|
|
"<Figure size 1320x440 with 2 Axes>"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"rng = np.random.default_rng(2)\n",
|
|
|
|
|
|
"n = 500\n",
|
|
|
|
|
|
"X = rng.standard_normal(n).tolist() # N(0, 1)\n",
|
|
|
|
|
|
"Y = rng.laplace(0.0, 1.0 / np.sqrt(2.0), n).tolist() # même variance\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"sigmas = np.geomspace(0.1, 10.0, 25)\n",
|
|
|
|
|
|
"mmds = [float(opt.mmd_gaussian(X, Y, sigma=s)) for s in sigmas]\n",
|
|
|
|
|
|
"print(f\"MMD min : {min(mmds):.3e}, MMD max : {max(mmds):.3e}\")\n",
|
|
|
|
|
|
"print(f\"σ optimal : {sigmas[int(np.argmax(mmds))]:.2f}\")\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"fig, axes = plt.subplots(1, 2, figsize=(12, 4))\n",
|
|
|
|
|
|
"xs = np.linspace(-5, 5, 400)\n",
|
|
|
|
|
|
"axes[0].hist(X, bins=40, density=True, alpha=0.5,\n",
|
|
|
|
|
|
" label=r'$\\mathcal{N}(0,1)$', color='C0')\n",
|
|
|
|
|
|
"axes[0].hist(Y, bins=40, density=True, alpha=0.5,\n",
|
|
|
|
|
|
" label='Laplace', color='C3')\n",
|
|
|
|
|
|
"axes[0].plot(xs, np.exp(-xs**2/2)/np.sqrt(2*np.pi),\n",
|
|
|
|
|
|
" 'C0--', lw=1.5)\n",
|
|
|
|
|
|
"axes[0].plot(xs, np.exp(-np.abs(xs)*np.sqrt(2))*np.sqrt(2)/2,\n",
|
|
|
|
|
|
" 'C3--', lw=1.5)\n",
|
|
|
|
|
|
"axes[0].set_xlabel('x'); axes[0].set_ylabel('densité')\n",
|
|
|
|
|
|
"axes[0].set_title(\"Densités comparées\"); axes[0].legend()\n",
|
|
|
|
|
|
"axes[1].semilogx(sigmas, mmds, 'o-', lw=2, color='C2')\n",
|
|
|
|
|
|
"axes[1].set_xlabel(r'bandwidth $\\sigma$')\n",
|
|
|
|
|
|
"axes[1].set_ylabel(r'$\\widehat{\\text{MMD}}^2$')\n",
|
|
|
|
|
|
"axes[1].set_title(\"Sensibilité à la bandwidth\")\n",
|
|
|
|
|
|
"fig.tight_layout(); plt.show()\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"id": "d6403c0a",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"**Résultat attendu.** MMD strictement positive, courbe en cloche.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Lecture du graphique.** Gauche : la Laplace est plus pointue ;\n",
|
|
|
|
|
|
"droite : MMD maximale lorsque $\\sigma \\sim 1$.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Conclusion.** Le choix de bandwidth est crucial ; règle pratique :\n",
|
|
|
|
|
|
"$\\sigma \\approx \\text{médiane des distances}$.\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"id": "cdf034d4",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"## Cellule 3 — Exemple concret : MMD entre mélange et gaussienne\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Modèle.** $P = \\mathcal{N}(0, 1)$ vs\n",
|
|
|
|
|
|
"$Q_\\mu = \\frac{1}{2}\\mathcal{N}(-\\mu, 1) + \\frac{1}{2}\\mathcal{N}(+\\mu, 1)$.\n",
|
|
|
|
|
|
"La MMD doit *croître* avec $\\mu$.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Équation pivot.**\n",
|
|
|
|
|
|
"$$\\text{MMD}^2(P, Q_\\mu) \\xrightarrow[\\mu \\to 0]{} 0,\n",
|
|
|
|
|
|
" \\qquad \\nearrow \\text{ en } \\mu.$$\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Ce que la cellule vérifie.** Pour $\\mu \\in [0, 2.5]$, la courbe\n",
|
|
|
|
|
|
"MMD est croissante.\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
"execution_count": 4,
|
|
|
|
|
|
"id": "45b8aa9b",
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"execution": {
|
|
|
|
|
|
"iopub.execute_input": "2026-05-12T14:06:15.610838Z",
|
|
|
|
|
|
"iopub.status.busy": "2026-05-12T14:06:15.610566Z",
|
|
|
|
|
|
"iopub.status.idle": "2026-05-12T14:06:16.202731Z",
|
|
|
|
|
|
"shell.execute_reply": "2026-05-12T14:06:16.201441Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"outputs": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
|
"text": [
|
|
|
|
|
|
"μ = 0.00 -> MMD² = 8.317e-02\n",
|
|
|
|
|
|
"μ = 0.25 -> MMD² = 3.606e-02\n",
|
|
|
|
|
|
"μ = 0.50 -> MMD² = 9.864e-02\n",
|
|
|
|
|
|
"μ = 0.75 -> MMD² = 1.881e-01\n",
|
|
|
|
|
|
"μ = 1.00 -> MMD² = 2.075e-01\n",
|
|
|
|
|
|
"μ = 1.25 -> MMD² = 3.452e-01\n",
|
|
|
|
|
|
"μ = 1.50 -> MMD² = 3.628e-01\n",
|
|
|
|
|
|
"μ = 1.75 -> MMD² = 4.763e-01\n",
|
|
|
|
|
|
"μ = 2.00 -> MMD² = 5.565e-01\n",
|
|
|
|
|
|
"μ = 2.25 -> MMD² = 6.350e-01\n",
|
|
|
|
|
|
"μ = 2.50 -> MMD² = 6.936e-01\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABR0AAAGtCAYAAACbedOMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAABDrAAAQ6wFQlOh8AAC0NUlEQVR4nOzdeVwU9f8H8NfuciPICouCByAeYHmked/gEeSBZZZmSQhJJmqYR2TeqF1m3mbmlZppHn1VEkXRzExTU1MxD/BAlPu+d+f3Bz8mt+VYcGEXeD0fDx46n/nMZ94zHxaG93zmMxJBEAQQERERERERERER6YhU3wEQERERERERERFR7cKkIxEREREREREREekUk45ERERERERERESkU0w6EhERERERERERkU4x6UhEREREREREREQ6xaQjERERERERERER6RSTjkRERERERERERKRTTDoSERERERERERGRTjHpSERERERERERERDrFpCMRERERERERERHpFJOORERUKx09ehTz58/Ho0eP9B0KEREREQBg9+7dWLRoEdLT0/UdSo2RkJCA+fPn4/Dhw/oOpUwbNmzA559/joKCAn2HQmQwmHQkoioXExMDiUSCefPm6TsUqiKbN2+GRCJBZGSkvkMBAPz5558YPnw4jI2N4ejoqO9wdM7QzjcREVFN5efnh+eeew4qlarK9/W///0PY8aMgZOTE6ytrdXWzZs3DxKJBDExMVUeR02Sn5+PESNG4ODBg+jZs6e+wynV6tWrMXnyZHTs2BHGxsZq68aPH4/nn38eSqVST9ER6Q+TjkRaiIyMhEQigUQiwbhx40qsIwgCXFxcIJFIYGRkpLau+CJCIpFg06ZNJW5/584dSKVSSCQSDBgwQG1dv379xO0lEgnMzMzQsGFD9O7dG7NmzcLNmzd1c6CkITU1FfPmzWNypwaJjY3F8OHDMX36dISEhOg7nErbv38/E/VERFRlnr6+Lf6ytLREu3btsGjRIuTm5uo7RA0FBQX45ptv0LdvX9ja2sLU1BRNmzbFmDFjcO7cuQq3d+HCBWzevBkLFy6EVFq1fxpfvXoVY8eOxfr16/HWW29V6b5qk3fffRdZWVkIDw9H/fr19R1OiY4ePYqZM2di37598PT01Fg/d+5c3Lp1C+vWrdNDdET6xaQjUQWYmZlhz549JT4OcfToUcTE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
|
|
|
|
|
|
"text/plain": [
|
|
|
|
|
|
"<Figure size 1320x440 with 2 Axes>"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"rng = np.random.default_rng(11)\n",
|
|
|
|
|
|
"n = 400\n",
|
|
|
|
|
|
"P = rng.standard_normal(n).tolist()\n",
|
|
|
|
|
|
"mus = np.linspace(0.0, 2.5, 11)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"mmd_vals = []\n",
|
|
|
|
|
|
"for mu in mus:\n",
|
|
|
|
|
|
" half = n // 2\n",
|
|
|
|
|
|
" Q = np.concatenate([\n",
|
|
|
|
|
|
" rng.standard_normal(half) - mu,\n",
|
|
|
|
|
|
" rng.standard_normal(n - half) + mu,\n",
|
|
|
|
|
|
" ]).tolist()\n",
|
|
|
|
|
|
" mmd_vals.append(float(opt.mmd_gaussian(P, Q, sigma=1.0)))\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"for mu, m in zip(mus, mmd_vals):\n",
|
|
|
|
|
|
" print(f\"μ = {mu:.2f} -> MMD² = {m:.3e}\")\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"fig, axes = plt.subplots(1, 2, figsize=(12, 4))\n",
|
|
|
|
|
|
"axes[0].plot(mus, mmd_vals, 'o-', lw=2, color='C2')\n",
|
|
|
|
|
|
"axes[0].set_xlabel(r'séparation $\\mu$')\n",
|
|
|
|
|
|
"axes[0].set_ylabel(r'$\\widehat{\\text{MMD}}^2$')\n",
|
|
|
|
|
|
"axes[0].set_title(\"MMD croissante avec la séparation\")\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"mu_show = mus[-1]\n",
|
|
|
|
|
|
"half = n // 2\n",
|
|
|
|
|
|
"Q_show = np.concatenate([\n",
|
|
|
|
|
|
" rng.standard_normal(half) - mu_show,\n",
|
|
|
|
|
|
" rng.standard_normal(n - half) + mu_show,\n",
|
|
|
|
|
|
"])\n",
|
|
|
|
|
|
"axes[1].hist(P, bins=30, density=True, alpha=0.5,\n",
|
|
|
|
|
|
" label=r'P = $\\mathcal{N}(0,1)$', color='C0')\n",
|
|
|
|
|
|
"axes[1].hist(Q_show, bins=30, density=True, alpha=0.5,\n",
|
|
|
|
|
|
" label=fr'Q (μ = {mu_show:.1f})', color='C3')\n",
|
|
|
|
|
|
"axes[1].set_xlabel('x'); axes[1].set_ylabel('densité')\n",
|
|
|
|
|
|
"axes[1].set_title(\"P vs Q (mélange séparé)\")\n",
|
|
|
|
|
|
"axes[1].legend()\n",
|
|
|
|
|
|
"fig.tight_layout(); plt.show()\n"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"id": "d3d9b723",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"**Résultat attendu.** MMD croît monotone en $\\mu$.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Lecture du graphique.** Gauche : courbe croissante. Droite : la\n",
|
|
|
|
|
|
"gaussienne unique vs le mélange bimodal sont visuellement\n",
|
|
|
|
|
|
"distincts à $\\mu = 2.5$.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"**Conclusion.** MMD avec noyau gaussien est un détecteur efficace de\n",
|
|
|
|
|
|
"différence distributionnelle, applicable à la calibration de modèles\n",
|
|
|
|
|
|
"génératifs (GAN, normalizing flows) en boucle d'apprentissage.\n"
|
2026-05-12 12:18:14 +02:00
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"kernelspec": {
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"display_name": "rhftlab",
|
2026-05-12 12:18:14 +02:00
|
|
|
|
"language": "python",
|
2026-05-12 16:07:42 +02:00
|
|
|
|
"name": "rhftlab"
|
2026-05-12 12:18:14 +02:00
|
|
|
|
},
|
|
|
|
|
|
"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.11.13"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"nbformat": 4,
|
|
|
|
|
|
"nbformat_minor": 5
|
|
|
|
|
|
}
|