.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/plot_EP.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_plot_EP.py: Clutter example for expectation propagation =========================================== The code below uses the Expectation Propagation algorithm to solve the Clutter problem, Bishop et al., 2006, section 10.7.1 .. GENERATED FROM PYTHON SOURCE LINES 13-19 Implementation Details ---------------------- Below is the code for the EP functions used in this example: .. literalinclude:: /../../../src/ep/examples/clutter/core.py :language: python .. GENERATED FROM PYTHON SOURCE LINES 21-23 Import requirments ------------------ .. GENERATED FROM PYTHON SOURCE LINES 23-33 .. code-block:: Python import numpy as np from scipy.stats import norm from IPython.display import display import plotly.graph_objects as go import ep.examples.clutter.utils import ep.examples.clutter.core import ep.examples.clutter.plot .. GENERATED FROM PYTHON SOURCE LINES 34-36 Sample from the clutter model ----------------------------- .. GENERATED FROM PYTHON SOURCE LINES 36-46 .. code-block:: Python theta = 3.0 a = 10.0 b = 100.0 w = 0.5 N = 30 num_iter = 20 samples = ep.examples.clutter.utils.sample(theta=theta, a=a, w=w, n_samples=N) .. GENERATED FROM PYTHON SOURCE LINES 47-49 Plot sampled data ----------------- .. GENERATED FROM PYTHON SOURCE LINES 49-72 .. code-block:: Python x_min = -10 x_max = 10 x_dt = 0.1 x_dense = np.arange(x_min, x_max, x_dt) signal_pdf_values = norm.pdf(x_dense, loc=theta, scale=1.0) noise_pdf_values = norm.pdf(x_dense, loc=0, scale=np.sqrt(a)) fig = go.Figure() trace = go.Scatter(x=samples, y=np.zeros(shape=samples.shape), mode="markers", marker=dict(symbol="x", color="black")) fig.add_trace(trace) trace = go.Scatter(x=x_dense, y=signal_pdf_values, mode="lines", line=dict(color="green")) fig.add_trace(trace) trace = go.Scatter(x=x_dense, y=noise_pdf_values, mode="lines", line=dict(color="red")) fig.add_trace(trace) fig.update_xaxes(title=r"$\theta$") fig.update_layout(showlegend=False) fig .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 73-75 Expectation Propagation script ------------------------------ .. GENERATED FROM PYTHON SOURCE LINES 75-116 .. code-block:: Python samples = [np.array([sample]) for sample in samples] D = len(samples[0]) m, v, m_f, v_f, s_f = ep.examples.clutter.core.init(b=b, D=D, N=N) log_evidences = [] snapshots = [] for iter_num in range(num_iter): for n in range(N): v_cn = ep.examples.clutter.core.get_cavity_var(v=v, v_fn=v_f[n]) m_cn = ep.examples.clutter.core.get_cavity_mean(m=m, m_fn=m_f[n], v_fn=v_f[n], v_cn=v_cn) Z_n = ep.examples.clutter.core.get_zeroth_moment(w=w, a=a, m_cn=m_cn, v_cn=v_cn, x_n=samples[n]) rho_n = ep.examples.clutter.core.get_site_strength(w=w, a=a, D=D, Z_n=Z_n, x_n=samples[n]) m = ep.examples.clutter.core.get_q_mean(m_cn=m_cn, v_cn=v_cn, rho_n=rho_n, x_n=samples[n]) v = ep.examples.clutter.core.get_q_var(m_cn=m_cn, v_cn=v_cn, rho_n=rho_n, x_n=samples[n]) v_f[n] = ep.examples.clutter.core.get_factor_var(v_cn=v_cn, v=v) m_f[n] = ep.examples.clutter.core.get_factor_mean(m_cn=m_cn, v_cn=v_cn, v_fn=v_f[n], m=m) s_f[n] = ep.examples.clutter.core.get_factor_scale(Z_n=Z_n, m_fn=m_f[n], v_fn=v_f[n], m_cn=m_cn, v_cn=v_cn) snapshots.append({ "iter": iter_num, "v_cn": v_cn, "m_cn": m_cn.copy(), "v": v, "m": m.copy(), "v_fn": v_f[n], "m_fn": m_f[n].copy(), }) log_evidence = ep.examples.clutter.core.get_log_evidence(m=m, v=v, m_f=m_f, v_f=v_f, s_f=s_f, b=b) log_evidences.append(log_evidence) .. GENERATED FROM PYTHON SOURCE LINES 117-119 Plot EP probability density functions after iteration 0 ------------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 119-128 .. code-block:: Python iter_num = 0 s = snapshots[iter_num] ep.examples.clutter.plot.plot_pdfs(theta=theta, m_cn=s["m_cn"], v_cn=s["v_cn"], m=s["m"], v=s["v"], m_fn=s["m_fn"], v_fn=s["v_fn"], samples=samples[:N], x_min=x_min, x_max=x_max, x_dt=x_dt, title=f"Iteration {iter_num}, Factor {N-1}") .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 129-131 Plot EP probability density functions after iteration 3 ------------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 131-140 .. code-block:: Python iter_num = 3 s = snapshots[iter_num] ep.examples.clutter.plot.plot_pdfs(theta=theta, m_cn=s["m_cn"], v_cn=s["v_cn"], m=s["m"], v=s["v"], m_fn=s["m_fn"], v_fn=s["v_fn"], samples=samples[:N], x_min=x_min, x_max=x_max, x_dt=x_dt, title=f"Iteration {iter_num}, Factor {N-1}") .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 141-143 Plot EP probability density functions after iteration 6 ------------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 143-152 .. code-block:: Python iter_num = 6 s = snapshots[iter_num] ep.examples.clutter.plot.plot_pdfs(theta=theta, m_cn=s["m_cn"], v_cn=s["v_cn"], m=s["m"], v=s["v"], m_fn=s["m_fn"], v_fn=s["v_fn"], samples=samples[:N], x_min=x_min, x_max=x_max, x_dt=x_dt, title=f"Iteration {iter_num}, Factor {N-1}") .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 153-155 Plot EP probability density functions after iteration 9 ------------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 155-164 .. code-block:: Python iter_num = 9 s = snapshots[iter_num] ep.examples.clutter.plot.plot_pdfs(theta=theta, m_cn=s["m_cn"], v_cn=s["v_cn"], m=s["m"], v=s["v"], m_fn=s["m_fn"], v_fn=s["v_fn"], samples=samples[:N], x_min=x_min, x_max=x_max, x_dt=x_dt, title=f"Iteration {iter_num}, Factor {N-1}") .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 165-167 Plot EP probability density functions after iteration 19 -------------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 167-176 .. code-block:: Python iter_num = 19 s = snapshots[iter_num] ep.examples.clutter.plot.plot_pdfs(theta=theta, m_cn=s["m_cn"], v_cn=s["v_cn"], m=s["m"], v=s["v"], m_fn=s["m_fn"], v_fn=s["v_fn"], samples=samples[:N], x_min=x_min, x_max=x_max, x_dt=x_dt, title=f"Iteration {iter_num}, Factor {N-1}") .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 177-179 Plot log evidences ------------------ .. GENERATED FROM PYTHON SOURCE LINES 179-181 .. code-block:: Python ep.examples.clutter.plot.plot_log_evidences(log_evidences) .. raw:: html


.. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 1.249 seconds) .. _sphx_glr_download_auto_examples_plot_EP.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_EP.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_EP.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_EP.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_