markov-models/markov.ipynb

1050 lines
1.7 MiB
Plaintext
Raw Normal View History

2020-12-11 21:33:20 +00:00
{
"metadata": {
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
2021-01-05 11:10:29 +00:00
"version": "3.8.6-final"
2020-12-11 21:33:20 +00:00
},
"orig_nbformat": 2,
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
}
},
"nbformat": 4,
"nbformat_minor": 2,
"cells": [
{
"cell_type": "code",
2021-01-05 11:10:29 +00:00
"execution_count": 1,
2020-12-11 21:33:20 +00:00
"metadata": {},
"outputs": [],
"source": [
2020-12-31 19:30:39 +00:00
"#IMPORTS AND COMMON VARIABLES\n",
2021-01-01 18:53:11 +00:00
"import matplotlib\n",
"import matplotlib.cm as cm\n",
2020-12-11 21:33:20 +00:00
"import matplotlib.pyplot as plt\n",
2021-01-01 18:53:11 +00:00
"from matplotlib.pyplot import savefig\n",
2020-12-11 21:33:20 +00:00
"import numpy as np\n",
2020-12-31 19:30:39 +00:00
"from math import sqrt\n",
2020-12-11 21:33:20 +00:00
"\n",
"from constants import *\n",
"from maths import gaussian\n",
2020-12-31 19:30:39 +00:00
"from markov import MarkovModel\n",
"from markovlog import LogMarkovModel\n",
"\n",
2021-01-01 18:53:11 +00:00
"fig_dpi = 200\n",
"fig_export = False\n",
"\n",
"x = np.linspace(-4, 8, 300) # x values for figures\n",
2020-12-31 19:30:39 +00:00
"x_label = \"Observation Space\"\n",
"y_label = \"Probability Density\""
2020-12-11 21:33:20 +00:00
]
},
{
"source": [
"State Probability Functions (1)\n",
"==================="
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
2020-12-23 20:12:08 +00:00
"execution_count": 2,
2020-12-11 21:33:20 +00:00
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
2021-01-01 18:53:11 +00:00
"text/plain": "<Figure size 1200x800 with 1 Axes>",
2021-01-05 11:10:29 +00:00
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"280.8pt\" version=\"1.1\" viewBox=\"0 0 424.8 280.8\" width=\"424.8pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-01-05T10:50:57.931783</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 280.8 \nL 424.8 280.8 \nL 424.8 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 43.78125 243.24375 \nL 417.6 243.24375 \nL 417.6 22.318125 \nL 43.78125 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p69d96452c6)\" d=\"M 60.773011 243.24375 \nL 60.773011 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"mf0f9a69005\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"60.773011\" xlink:href=\"#mf0f9a69005\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 4 -->\n <g transform=\"translate(53.401918 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 10.59375 35.5 \nL 73.1875 35.5 \nL 73.1875 27.203125 \nL 10.59375 27.203125 \nz\n\" id=\"DejaVuSans-8722\"/>\n <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-8722\"/>\n <use x=\"83.789062\" xlink:href=\"#DejaVuSans-52\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path clip-path=\"url(#p69d96452c6)\" d=\"M 117.412216 243.24375 \nL 117.412216 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"117.412216\" xlink:href=\"#mf0f9a69005\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 2 -->\n <g transform=\"translate(110.041122 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20
2021-01-01 18:53:11 +00:00
"image/png": "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
2020-12-11 21:33:20 +00:00
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"state_1_y = [gaussian(i, state1.mean, state1.std_dev) for i in x]\n",
"state_2_y = [gaussian(i, state2.mean, state2.std_dev) for i in x]\n",
"\n",
"plt.plot(x, state_1_y, c='r', label=\"State 1\")\n",
"plt.plot(x, state_2_y, c='b', label=\"State 2\")\n",
"\n",
"plt.legend()\n",
"plt.title(\"State Probability Density Functions\")\n",
"\n",
2020-12-31 19:30:39 +00:00
"plt.xlabel(x_label)\n",
"plt.ylabel(y_label)\n",
2020-12-11 21:33:20 +00:00
"plt.grid(linestyle=\"--\")\n",
"\n",
2021-01-01 18:53:11 +00:00
"fig = matplotlib.pyplot.gcf()\n",
"fig.set_dpi(fig_dpi)\n",
"fig.set_tight_layout(True)\n",
"if fig_export:\n",
" savefig(\"report/res/pdfs.png\")\n",
2020-12-11 21:33:20 +00:00
"plt.show()"
]
},
{
"source": [
"Output Probability Densities (2)\n",
"=========="
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
2020-12-23 20:12:08 +00:00
"execution_count": 3,
2020-12-11 21:33:20 +00:00
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"3.8 -> State 1: 0.02185157424475792, State 2: 0.5471239427774459\n4.2 -> State 1: 0.009496655019831194, State 2: 0.5471239427774459\n3.4 -> State 1: 0.04499247209432338, State 2: 0.3947074079064296\n-0.4 -> State 1: 0.16833223796171576, State 2: 1.500652790137751e-09\n1.9 -> State 1: 0.2509478601290037, State 2: 0.006331212017054291\n3.0 -> State 1: 0.08289761566062391, State 2: 0.2054255182126689\n1.6 -> State 1: 0.2933877723035829, State 2: 0.001596702666402633\n1.9 -> State 1: 0.2509478601290037, State 2: 0.006331212017054291\n5.0 -> State 1: 0.0012852324969092556, State 2: 0.2054255182126689\n"
2020-12-11 21:33:20 +00:00
]
}
],
"source": [
"for obs in observations:\n",
2021-01-01 18:53:11 +00:00
" print(f'{obs} -> State 1: {gaussian(obs, state1.mean, state1.std_dev)},', \n",
" f'State 2: {gaussian(obs, state2.mean, state2.std_dev)}')"
2020-12-11 21:33:20 +00:00
]
},
{
"cell_type": "code",
2021-01-05 11:10:29 +00:00
"execution_count": 4,
2020-12-11 21:33:20 +00:00
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
2021-01-01 18:53:11 +00:00
"text/plain": "<Figure size 1200x800 with 1 Axes>",
2021-01-05 11:10:29 +00:00
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"280.8pt\" version=\"1.1\" viewBox=\"0 0 424.8 280.8\" width=\"424.8pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-01-05T10:50:58.447265</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 280.8 \nL 424.8 280.8 \nL 424.8 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 43.78125 243.24375 \nL 417.6 243.24375 \nL 417.6 22.318125 \nL 43.78125 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"PathCollection_1\">\n <defs>\n <path d=\"M -4.031129 4.031129 \nL 4.031129 -4.031129 \nM -4.031129 -4.031129 \nL 4.031129 4.031129 \n\" id=\"m2749552464\" style=\"stroke:#800000;stroke-width:1.5;\"/>\n </defs>\n <g clip-path=\"url(#pbf48cc8067)\">\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"281.665909\" xlink:href=\"#m2749552464\" y=\"225.499678\"/>\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"292.99375\" xlink:href=\"#m2749552464\" y=\"229.854401\"/>\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"270.338068\" xlink:href=\"#m2749552464\" y=\"217.343233\"/>\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"162.72358\" xlink:href=\"#m2749552464\" y=\"173.869812\"/>\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"227.858665\" xlink:href=\"#m2749552464\" y=\"144.750382\"/>\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"259.010227\" xlink:href=\"#m2749552464\" y=\"203.982852\"/>\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"219.362784\" xlink:href=\"#m2749552464\" y=\"129.791637\"/>\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"227.858665\" xlink:href=\"#m2749552464\" y=\"144.750382\"/>\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"315.649432\" xlink:href=\"#m2749552464\" y=\"232.748672\"/>\n </g>\n </g>\n <g id=\"PathCollection_2\">\n <defs>\n <path d=\"M -4.031129 4.031129 \nL 4.031129 -4.031129 \nM -4.031129 -4.031129 \nL 4.031129 4.031129 \n\" id=\"m829208be9c\" style=\"stroke:#000080;stroke-width:1.5;\"/>\n </defs>\n <g clip-path=\"url(#pbf48cc8067)\">\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"281.665909\" xlink:href=\"#m829208be9c\" y=\"40.357551\"/>\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"292.99375\" xlink:href=\"#m829208be9c\" y=\"40.357551\"/>\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"270.338068\" xlink:href=\"#m829208be9c\" y=\"94.079626\"/>\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"162.72358\" xlink:href=\"#m829208be9c\" y=\"233.201676\"/>\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"227.858665\" xlink:href=\"#m829208be9c\" y=\"230.970121\"/>\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"259.010227\" xlink:href=\"#m829208be9c\" y=\"160.795588\"/>\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"219.362784\" xlink:href=\"#m829208be9c\" y=\"232.638888\"/>\n <use style=\"fill:#000080;stroke:#000080;str
2021-01-01 18:53:11 +00:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJsAAAMMCAYAAAD0M6ZoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAB7CAAAewgFu0HU+AAEAAElEQVR4nOzdeXxU1f3/8dcnCwkEArKICAiiuCDuqJWKa93qWmutrdpi9au12vpVsZvfWv1Vba1oXerWqri27tq6tK7ghqK4IAJuIBg2FdlDSAg5vz/OTObOZLYkM3OTzPv5eMwjc++ce+65uXfuvfO5ZzHnHCIiIiIiIiIiIrlQEnYBRERERERERESk61CwSUREREREREREckbBJhERERERERERyRkFm0REREREREREJGcUbBIRERERERERkZxRsElERERERERERHJGwSYREREREREREckZBZtERERERERERCRnFGwSEREREREREZGcUbBJRERERERERERyRsEmERERERERERHJGQWbREREREREREQkZxRsEhERERERERGRnFGwSUREREREREREckbBJhERERERERERyRkFm0REREREREREJGcUbBIRERERERERkZxRsElERERERERERHJGwSYREREREREREckZBZtERPLMzPY3Mxd5TQm7PKmY2Z2Bco7PUZ5ZbXsgjUuTZkog3f65KJ90LWY2PnCM3Bl2eaRz0Tmm88rH9SuS7yWBfC/JVb4dTbFsp8TTNVPyTcEmkSQiP5BvMrPpZvaVmTWYWZ2ZfRmZ9w8zO8/MxpiZhV3eriYYeEjy2mhmK8xsjpndY2bHm1lZ2GUWaYsMx/paM1scOdafMbMrzOy7ZlYddrmlcBJ+RLfmNT7sskvXZ2avBY65a7Jc5lcJx+qvslzuL4Fl3mhfyTsvM+ttZidF7kVnRe5T6yPXi3fN7EYz+7bujUQkbAo2iQSY2fZm9jowGTgL2B3oD5QDlcCAyLwfANcAbwEz0+SXlydtrZFtzZJOpAToA2wHnAw8BMw2sz3CLJR0DF3s6WwVMAh/rB8C/AZ4GFhsZreZ2agwC9dZmdnwwDEyP+zySH6ollLBvBx4v2+WyySma8tyL2W5TLPOXovDzMrN7H+BecC9+HvRUfj71G7468UuwM+Ap4APzOyoUAorBdfZj2/pmhTxFokws12BF/GBjKgv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
2020-12-11 21:33:20 +00:00
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"state_1_y = [gaussian(i, state1.mean, state1.std_dev) for i in x]\n",
"state_2_y = [gaussian(i, state2.mean, state2.std_dev) for i in x]\n",
"\n",
"plt.plot(x, state_1_y, c='r', label=\"State 1\")\n",
"plt.plot(x, state_2_y, c='b', label=\"State 2\")\n",
"\n",
"plt.legend()\n",
2020-12-31 19:30:39 +00:00
"plt.title(\"State Probability Density Functions With Observations\")\n",
2020-12-11 21:33:20 +00:00
"\n",
2020-12-31 19:30:39 +00:00
"plt.xlabel(x_label)\n",
"plt.ylabel(y_label)\n",
2021-01-01 18:53:11 +00:00
"plt.grid(linestyle=\"--\", axis='y')\n",
2020-12-11 21:33:20 +00:00
"\n",
"state1_pd = [gaussian(i, state1.mean, state1.std_dev) for i in observations]\n",
"state2_pd = [gaussian(i, state2.mean, state2.std_dev) for i in observations]\n",
"\n",
"#############################################\n",
"# Observation Marks \n",
"#############################################\n",
"\n",
"config = {\n",
" \"s\": 65,\n",
" \"marker\": 'x'\n",
"}\n",
"\n",
2021-01-01 18:53:11 +00:00
"[plt.axvline(x=i, ls='--', lw=1.0, c=(0,0,0), alpha=0.4) for i in observations]\n",
2020-12-11 21:33:20 +00:00
"plt.scatter(observations, state1_pd, color=(0.5, 0, 0), **config)\n",
"plt.scatter(observations, state2_pd, color=(0, 0, 0.5), **config)\n",
"\n",
2021-01-01 18:53:11 +00:00
"fig = matplotlib.pyplot.gcf()\n",
"fig.set_dpi(fig_dpi)\n",
"fig.set_tight_layout(True)\n",
"if fig_export:\n",
" savefig(\"report/res/pdfs-w-obs.png\")\n",
2020-12-11 21:33:20 +00:00
"plt.show()"
]
},
2020-12-23 20:12:08 +00:00
{
"source": [
"# Forward Procedure (3)"
],
"cell_type": "markdown",
"metadata": {}
},
2020-12-11 21:33:20 +00:00
{
"cell_type": "code",
2020-12-23 20:12:08 +00:00
"execution_count": 5,
2020-12-11 21:33:20 +00:00
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
2020-12-31 19:30:39 +00:00
"[[9.61469267e-03 2.00389806e-04 2.89433448e-04 4.30961030e-04\n 9.94968491e-05 7.58875028e-06 2.06308972e-06 4.76335758e-07\n 5.63267096e-10]\n [3.06389408e-01 1.56214298e-01 5.73475605e-02 8.00607227e-11\n 1.63710810e-07 1.25762776e-06 2.59451223e-09 7.98988065e-10\n 6.02373446e-09]]\n"
2020-12-11 21:33:20 +00:00
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
2020-12-31 19:30:39 +00:00
"1.9197737567283167e-10"
2020-12-11 21:33:20 +00:00
]
},
"metadata": {},
2020-12-23 20:12:08 +00:00
"execution_count": 5
2020-12-11 21:33:20 +00:00
}
],
"source": [
2021-01-01 18:53:11 +00:00
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition)\n",
2020-12-11 21:33:20 +00:00
"model.populate_forward()\n",
"\n",
2020-12-31 19:30:39 +00:00
"print(model.forward)\n",
2020-12-11 21:33:20 +00:00
"\n",
2020-12-31 19:30:39 +00:00
"forward = model.forward\n",
"model.calculate_p_obs_forward()\n"
2020-12-11 21:33:20 +00:00
]
},
2021-01-01 18:53:11 +00:00
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 1200x800 with 1 Axes>",
2021-01-05 11:10:29 +00:00
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"280.8pt\" version=\"1.1\" viewBox=\"0 0 424.8 280.8\" width=\"424.8pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-01-05T10:50:59.025235</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 280.8 \nL 424.8 280.8 \nL 424.8 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 48.982813 243.24375 \nL 417.6 243.24375 \nL 417.6 22.318125 \nL 48.982813 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p76e0dc542c)\" d=\"M 65.738139 243.24375 \nL 65.738139 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"m20283ca400\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"65.738139\" xlink:href=\"#m20283ca400\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 1 -->\n <g transform=\"translate(62.556889 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path clip-path=\"url(#p76e0dc542c)\" d=\"M 107.626456 243.24375 \nL 107.626456 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"107.626456\" xlink:href=\"#m20283ca400\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 2 -->\n <g transform=\"translate(104.445206 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path clip-path=\"url(#p76e0dc542c)\" d=\"M 149.514773 243.243
2021-01-01 18:53:11 +00:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJsAAAMMCAYAAAD0M6ZoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAB7CAAAewgFu0HU+AAEAAElEQVR4nOzdd5xU1fnH8c/ZvtJZisKuoICoqFgAARWwIlGxxBpLNBqNiSWJmp+JidHEnsRYElus0cSa2KKJLTTpqBBBqQrugiBlKQvb9/z+ODM7ZWdmZ3dnp9z9vl+v+9q59565c2aeubM7z57zXGOtRUREREREREREJBGyUt0BERERERERERHxDiWbREREREREREQkYZRsEhERERERERGRhFGySUREREREREREEkbJJhERERERERERSRglm0REREREREREJGGUbBIRERERERERkYRRsklERERERERERBJGySYREREREREREUkYJZtERERERERERCRhlGwSEREREREREZGEUbJJREREREREREQSRskmERERERERERFJGCWbREREREREREQkYZRsEhERERERERGRhFGySUREREREREREEkbJJhERERERERERSRglm0REREREREREJGGUbBIRERERERERkYRRsklERCQNGGOmGmOsb5mQ6v5IfIwxq4PiNjBKm7SMrTFmYFC/Vsdol7HPMd0YYy4Oep2eTnV/JLMFvZdsqvsiIhJOySYRkTQU9sWtJcuEVPdd0kNYguDiVPcnnRhjJuhLmkhsxpjxxph7jDFzjTGlxpgqY0y5MWapMeY1Y8zlxpi+qe5nujPGPN3K3+dRl1Q/JxGReOSkugMiIiIiIpIejDFHAH8ADo+wOx/oDgwFTgXuM8b8AbjbWluRtE6KiEjaU7JJRCT9zQfmxdl2bXt2REREvMsYcw3wR0JnP2wC5gLrgU7A3sBIwACFwC+BycaYSdbadcntcUZ4H2guEfejoNuvod/lIuIBSjaJiKS/t621t6S6EyLSlLV2YKr70N46wnMUMMb8HLgjaNMa4CfAG9ba+rC2/YCbgctxSaeDgNnGmFHW2g1J6nJGsNY+BzwXq40xJjjZdL+1dmqcxzZt6JqISLtSzSYRERERkQ7MGDMeuC1o02zgQGvtq+GJJgBr7Tpr7Q+AcwH//j2BvxpjlAARERElm0REREREOipj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
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition).populate()\n",
"\n",
"state_x = np.arange(1, 10)\n",
"\n",
"from numpy import log as ln\n",
"\n",
"plt.plot(state_x, [ln(i) for i in model.forward[0, :]], c='r', label=\"State 1\")\n",
"plt.plot(state_x, [ln(i) for i in model.forward[1, :]], c='b', label=\"State 2\")\n",
"\n",
"plt.ylim(top=0)\n",
"\n",
"plt.legend()\n",
"plt.title(\"Forward Log-Likelihoods Over Time\")\n",
"\n",
"plt.xlabel(\"Observation (t)\")\n",
"plt.ylabel(\"Log Likelihood\")\n",
"plt.grid(linestyle=\"--\")\n",
"\n",
"fig = matplotlib.pyplot.gcf()\n",
"fig.set_dpi(fig_dpi)\n",
"fig.set_tight_layout(True)\n",
"if fig_export:\n",
" savefig(\"report/res/forward-logline.png\")\n",
"plt.show()"
]
},
2020-12-23 20:12:08 +00:00
{
"source": [
"# Backward Procedure (4)"
],
"cell_type": "markdown",
"metadata": {}
},
2020-12-11 21:33:20 +00:00
{
"cell_type": "code",
2021-01-01 18:53:11 +00:00
"execution_count": 7,
2020-12-11 21:33:20 +00:00
"metadata": {},
2020-12-23 20:12:08 +00:00
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
2020-12-31 19:30:39 +00:00
"[[6.57892066e-11 2.92661737e-09 6.89869860e-08 4.45463420e-07\n 1.92898428e-06 2.51074677e-05 9.30059204e-05 3.93414211e-04\n 2.00000000e-02]\n [6.24515168e-10 1.22518178e-09 2.99943420e-09 2.11439342e-08\n 3.02470605e-07 1.14745634e-06 3.77015860e-05 5.73240014e-03\n 3.00000000e-02]]\n"
2020-12-23 20:12:08 +00:00
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
2020-12-31 19:30:39 +00:00
"1.9197737567283167e-10"
2020-12-23 20:12:08 +00:00
]
},
"metadata": {},
2021-01-01 18:53:11 +00:00
"execution_count": 7
2020-12-23 20:12:08 +00:00
}
],
"source": [
2021-01-01 18:53:11 +00:00
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition)\n",
2020-12-23 20:12:08 +00:00
"model.populate_backward()\n",
"\n",
"print(model.backward)\n",
2020-12-31 19:30:39 +00:00
"\n",
"backward = model.backward\n",
"model.calculate_p_obs_backward()\n"
2020-12-23 20:12:08 +00:00
]
},
2021-01-01 18:53:11 +00:00
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 1200x800 with 1 Axes>",
2021-01-05 11:10:29 +00:00
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"280.8pt\" version=\"1.1\" viewBox=\"0 0 424.8 280.8\" width=\"424.8pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-01-05T10:50:59.518369</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 280.8 \nL 424.8 280.8 \nL 424.8 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 48.982813 243.24375 \nL 417.6 243.24375 \nL 417.6 22.318125 \nL 48.982813 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#pdf544a5844)\" d=\"M 65.738139 243.24375 \nL 65.738139 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"m756d8e9c83\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"65.738139\" xlink:href=\"#m756d8e9c83\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 1 -->\n <g transform=\"translate(62.556889 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path clip-path=\"url(#pdf544a5844)\" d=\"M 107.626456 243.24375 \nL 107.626456 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"107.626456\" xlink:href=\"#m756d8e9c83\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 2 -->\n <g transform=\"translate(104.445206 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path clip-path=\"url(#pdf544a5844)\" d=\"M 149.514773 243.243
2021-01-01 18:53:11 +00:00
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition).populate()\n",
"\n",
"state_x = np.arange(1, 10)\n",
"\n",
"from numpy import log as ln\n",
"\n",
"plt.plot(state_x, [ln(i) for i in model.backward[0, :]], c='r', label=\"State 1\")\n",
"plt.plot(state_x, [ln(i) for i in model.backward[1, :]], c='b', label=\"State 2\")\n",
"\n",
"plt.ylim(top=0)\n",
"\n",
"plt.legend()\n",
"plt.title(\"Backward Log-Likelihoods Over Time\")\n",
"\n",
"plt.xlabel(\"Observation (t)\")\n",
"plt.ylabel(\"Log Likelihood\")\n",
"plt.grid(linestyle=\"--\")\n",
"\n",
"fig = matplotlib.pyplot.gcf()\n",
"fig.set_dpi(fig_dpi)\n",
"fig.set_tight_layout(True)\n",
"if fig_export:\n",
" savefig(\"report/res/backward-logline.png\")\n",
"plt.show()"
]
},
2020-12-23 20:12:08 +00:00
{
"source": [
"# Compare Forward/Backward Final"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
2021-01-01 18:53:11 +00:00
"execution_count": 9,
2020-12-23 20:12:08 +00:00
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
2020-12-31 19:30:39 +00:00
"forward: 1.9197737567283167e-10\nbackward: 1.9197737567283167e-10\ndiff: 0.0\n"
2020-12-23 20:12:08 +00:00
]
}
],
"source": [
2021-01-01 18:53:11 +00:00
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition)\n",
2020-12-23 20:12:08 +00:00
"model.populate_forward()\n",
"model.populate_backward()\n",
"\n",
"print(\"forward:\", model.calculate_p_obs_forward())\n",
2020-12-31 19:30:39 +00:00
"print(\"backward:\", model.calculate_p_obs_backward())\n",
"\n",
"print(\"diff: \", model.p_obs_forward - model.p_obs_backward)\n"
2020-12-23 20:12:08 +00:00
]
},
{
"source": [
"# Occupation Likelihoods (5)"
],
"cell_type": "markdown",
"metadata": {}
},
2020-12-31 19:30:39 +00:00
{
"cell_type": "code",
2021-01-01 18:53:11 +00:00
"execution_count": 10,
2020-12-31 19:30:39 +00:00
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[[3.29488306e-03 3.05486147e-03 1.04007783e-01 9.99999991e-01\n 9.99742065e-01 9.92483109e-01 9.99490475e-01 9.76142401e-01\n 5.86805704e-02]\n [9.96705117e-01 9.96945139e-01 8.95992217e-01 8.81769869e-09\n 2.57935122e-04 7.51689067e-03 5.09524759e-04 2.38575993e-02\n 9.41319430e-01]]\n"
]
}
],
"source": [
2021-01-01 18:53:11 +00:00
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition).populate()\n",
2020-12-31 19:30:39 +00:00
"\n",
"occupation = model.occupation\n",
"print(model.occupation)"
]
},
2021-01-01 18:53:11 +00:00
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 1200x1200 with 1 Axes>",
2021-01-05 11:10:29 +00:00
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"424.8pt\" version=\"1.1\" viewBox=\"0 0 416.703013 424.8\" width=\"416.703013pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-01-05T10:51:00.058329</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 424.8 \nL 416.703013 424.8 \nL 416.703013 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"patch_2\">\n <path d=\"M 7.2 417.6 \nL 402.481875 417.6 \nL 402.481875 22.318125 \nL 7.2 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"pane3d_1\">\n <g id=\"patch_3\">\n <path d=\"M 49.005253 340.305731 \nL 135.065331 201.936667 \nL 131.351494 50.443663 \nL 40.252902 181.428404 \n\" style=\"fill:#f2f2f2;opacity:0.5;stroke:#f2f2f2;stroke-linejoin:miter;\"/>\n </g>\n </g>\n <g id=\"pane3d_2\">\n <g id=\"patch_4\">\n <path d=\"M 135.065331 201.936667 \nL 361.811916 244.232181 \nL 369.53318 90.353614 \nL 131.351494 50.443663 \n\" style=\"fill:#e6e6e6;opacity:0.5;stroke:#e6e6e6;stroke-linejoin:miter;\"/>\n </g>\n </g>\n <g id=\"pane3d_3\">\n <g id=\"patch_5\">\n <path d=\"M 49.005253 340.305731 \nL 294.873299 390.994429 \nL 361.811916 244.232181 \nL 135.065331 201.936667 \n\" style=\"fill:#ececec;opacity:0.5;stroke:#ececec;stroke-linejoin:miter;\"/>\n </g>\n </g>\n <g id=\"axis3d_1\">\n <g id=\"line2d_1\">\n <path d=\"M 49.005253 340.305731 \nL 294.873299 390.994429 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"text_1\">\n <!-- Observation -->\n <g transform=\"translate(129.664429 399.369867)rotate(-348.350985)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 39.40625 66.21875 \nQ 28.65625 66.21875 22.328125 58.203125 \nQ 16.015625 50.203125 16.015625 36.375 \nQ 16.015625 22.609375 22.328125 14.59375 \nQ 28.65625 6.59375 39.40625 6.59375 \nQ 50.140625 6.59375 56.421875 14.59375 \nQ 62.703125 22.609375 62.703125 36.375 \nQ 62.703125 50.203125 56.421875 58.203125 \nQ 50.140625 66.21875 39.40625 66.21875 \nz\nM 39.40625 74.21875 \nQ 54.734375 74.21875 63.90625 63.9375 \nQ 73.09375 53.65625 73.09375 36.375 \nQ 73.09375 19.140625 63.90625 8.859375 \nQ 54.734375 -1.421875 39.40625 -1.421875 \nQ 24.03125 -1.421875 14.8125 8.828125 \nQ 5.609375 19.09375 5.609375 36.375 \nQ 5.609375 53.65625 14.8125 63.9375 \nQ 24.03125 74.21875 39.40625 74.21875 \nz\n\" id=\"DejaVuSans-79\"/>\n <path d=\"M 48.6875 27.296875 \nQ 48.6875 37.203125 44.609375 42.84375 \nQ 40.53125 48.484375 33.40625 48.484375 \nQ 26.265625 48.484375 22.1875 42.84375 \nQ 18.109375 37.203125 18.109375 27.296875 \nQ 18.109375 17.390625 22.1875 11.75 \nQ 26.265625 6.109375 33.40625 6.109375 \nQ 40.53125 6.109375 44.609375 11.75 \nQ 48.6875 17.390625 48.6875 27.296875 \nz\nM 18.109375 46.390625 \nQ 20.953125 51.265625 25.265625 53.625 \nQ 29.59375 56 35.59375 56 \nQ 45.5625 56 51.78125 48.09375 \nQ 58.015625 40.1875 58.015625 27.296875 \nQ 58.015625 14.40625 51.78125 6.484375 \nQ 45.5625 -1.421875 35.59375 -1.421875 \nQ 29.59375 -1.421875 25.265625 0.953125 \nQ 20.953125 3.328125 18.109375 8.203125 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 75.984375 \nL 18.109375 75.984375 \nz\n\" id=\"DejaVuSans-98\"/>\n <path d=\"M 44.28125 53.078125 \n
2021-01-01 18:53:11 +00:00
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition).populate()\n",
"\n",
"fig = plt.figure(figsize=(6,6), dpi=fig_dpi, tight_layout=True)\n",
"ax = fig.add_subplot(1, 1, 1, projection=\"3d\", xmargin=0, ymargin=0)\n",
"\n",
"y_width = 0.3\n",
"\n",
"X = np.arange(1, 10) - 0.5\n",
"Y = np.arange(1, 3) - 0.5*y_width\n",
"X, Y = np.meshgrid(X, Y)\n",
"Z = np.zeros(model.forward.size)\n",
"\n",
"dx = np.ones(model.forward.size)\n",
"dy = y_width * np.ones(model.forward.size)\n",
"\n",
"colours = [*[(1.0, 0.1, 0.1) for i in range(9)], *[(0.2, 0.2, 1.0) for i in range(9)]]\n",
"ax.bar3d(X.flatten(), Y.flatten(), Z, \n",
" dx, dy, model.occupation.flatten(), \n",
" color=colours, shade=True)\n",
"\n",
"ax.set_yticks([1, 2])\n",
"ax.set_zlim(top=1.0)\n",
"\n",
"ax.set_title(\"Occupation Likelihoods Over Time\")\n",
"ax.set_xlabel(\"Observation\")\n",
"ax.set_ylabel(\"State\")\n",
"ax.set_zlabel(\"Occupation Likelihood\")\n",
"ax.view_init(35, -72)\n",
"if fig_export:\n",
" savefig(\"report/res/occupation-bars.png\")\n",
"fig.show()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 1200x800 with 1 Axes>",
2021-01-05 11:10:29 +00:00
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"280.8pt\" version=\"1.1\" viewBox=\"0 0 424.8 280.8\" width=\"424.8pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-01-05T10:51:00.581489</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 280.8 \nL 424.8 280.8 \nL 424.8 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 43.78125 243.24375 \nL 417.6 243.24375 \nL 417.6 22.318125 \nL 43.78125 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p43428d315c)\" d=\"M 60.773011 243.24375 \nL 60.773011 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"m4efd1fbc13\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"60.773011\" xlink:href=\"#m4efd1fbc13\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 1 -->\n <g transform=\"translate(57.591761 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path clip-path=\"url(#p43428d315c)\" d=\"M 103.252415 243.24375 \nL 103.252415 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"103.252415\" xlink:href=\"#m4efd1fbc13\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 2 -->\n <g transform=\"translate(100.071165 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path clip-path=\"url(#p43428d315c)\" d=\"M 145.731818 243.24375
2021-01-01 18:53:11 +00:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJsAAAMMCAYAAAD0M6ZoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAB7CAAAewgFu0HU+AAEAAElEQVR4nOzdd5gb5bn38e+9fd0rNvYuNthU07GNKy0BQkIgIQmQEELLIe3kpJz0vCf1pJ6EkB6SE1oqkARCygmm497ABoyxsbHNro2Njbu9Xc/7x0ir0ayk1e6qzv4+16VrNaNHM49070ije55izjlERERERERERESyoazQFRARERERERERkfBQsklERERERERERLJGySYREREREREREckaJZtERERERERERCRrlGwSEREREREREZGsUbJJRERERERERESyRskmERERERERERHJGiWbREREREREREQka5RsEhERERERERGRrFGySUREREREREREskbJJhERERERERERyRolm0REREREREREJGuUbBIRERERERERkaxRsklERERERERERLJGySYREREREREREckaJZtERERERERERCRrlGwSEREREREREZGsUbJJRERERERERESyRskmERERERERERHJGiWbRERESpiZTTQzF71tLnR9Sk2m75+vjMtj9bplZtf76nZnijIl/RqLjZnd6Xuvri90faR0mdl5vv+lJwpdHxGRbFKySUSkhJjZBDP7DzP7PzNbb2b7zKzJzDab2UIz+5qZTSt0PUVyzcy+oh9pIqmZWa2ZXWFmvzaz1Wa23cxazWyHmT1rZreb2TvMrLbQdS120e9Yl8XbE4V+TSIiuVZR6AqIiEj3zGwU8BXgAyT/7J4Qvc0C/svMHgI+5Zx7Pm+VlD4zs4nApujiFufcxMLVRkRKkZkZ8D7gv4G6JEWOiN5OAW4AtprZF4G7nXNq1SYiIlmhZJOISJEzs5OAfwH1vtXtwBJgC9ACjMNLNA2JPn4xcJ6ZXeOc+3MeqysiIgViZlXAncC7Aw9tAJ4DdgEjgZOB46KPjY8+5yIzu94515aXypaWu/Det1TGA2/zLf+0m+291NcKiYgUOyWbRESKWDTRtAAYHl3VBnwP+L5z7vVA2Wrgqujjo4Fq4F4ze59z7nf5q7Xkk3NuM2CFrkep6g/vX394jQJmVgY8AFzi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
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition).populate()\n",
"\n",
"state_x = np.arange(1, 10)\n",
"\n",
"plt.plot(state_x, model.occupation[0, :], c='r', label=\"State 1\")\n",
"plt.plot(state_x, model.occupation[1, :], c='b', label=\"State 2\")\n",
"\n",
"plt.legend()\n",
"plt.title(\"Occupation Likelihoods Over Time\")\n",
"\n",
"plt.xlabel(\"Observation (t)\")\n",
"plt.ylabel(\"Occupation Likelihood\")\n",
"plt.grid(linestyle=\"--\")\n",
"\n",
"fig = matplotlib.pyplot.gcf()\n",
"fig.set_dpi(fig_dpi)\n",
"fig.set_tight_layout(True)\n",
"if fig_export:\n",
" savefig(\"report/res/occupation-line.png\")\n",
"plt.show()"
]
},
2020-12-31 19:30:39 +00:00
{
"source": [
"# Re-estimate Mean & Variance (6)"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
2021-01-01 18:53:11 +00:00
"execution_count": 13,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
2020-12-31 19:30:39 +00:00
"mean: [1, 4]\nvariance: [1.44, 0.49]\n\nmean: [1.6747846620246418, 4.089148442531048]\nvariance: [1.8465047320872243, 0.37804421554121403]\n"
]
}
],
"source": [
2021-01-01 18:53:11 +00:00
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition).populate()\n",
2020-12-31 19:30:39 +00:00
"\n",
"print(\"mean: \", [state1.mean, state2.mean])\n",
"print(\"variance: \", [state1.variance, state2.variance])\n",
"print()\n",
"\n",
"print(\"mean: \", model.reestimated_mean())\n",
"print(\"variance: \", model.reestimated_variance())\n"
]
},
{
"source": [
"New PDFs (7)\n",
"==================="
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
2021-01-01 18:53:11 +00:00
"execution_count": 14,
2020-12-31 19:30:39 +00:00
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
2021-01-01 18:53:11 +00:00
"text/plain": "<Figure size 1200x800 with 1 Axes>",
2021-01-05 11:10:29 +00:00
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"277.314375pt\" version=\"1.1\" viewBox=\"0 0 385.78125 277.314375\" width=\"385.78125pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-01-05T10:51:01.088056</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 277.314375 \nL 385.78125 277.314375 \nL 385.78125 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 43.78125 239.758125 \nL 378.58125 239.758125 \nL 378.58125 22.318125 \nL 43.78125 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p3c177b1e1b)\" d=\"M 58.999432 239.758125 \nL 58.999432 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"m0090ecdb57\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"58.999432\" xlink:href=\"#m0090ecdb57\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 4 -->\n <g transform=\"translate(51.628338 254.356562)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 10.59375 35.5 \nL 73.1875 35.5 \nL 73.1875 27.203125 \nL 10.59375 27.203125 \nz\n\" id=\"DejaVuSans-8722\"/>\n <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-8722\"/>\n <use x=\"83.789062\" xlink:href=\"#DejaVuSans-52\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path clip-path=\"url(#p3c177b1e1b)\" d=\"M 109.726705 239.758125 \nL 109.726705 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"109.726705\" xlink:href=\"#m0090ecdb57\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 2 -->\n <g transform=\"translate(102.355611 254.356562)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.
2021-01-01 18:53:11 +00:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABDAAAAMFCAYAAACChAaGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAB7CAAAewgFu0HU+AAEAAElEQVR4nOzdeZwcdZ3/8ddn7slJEiCQzOTmkhsCCJIQQC65WURWRUFYXX/qIoKuu3iArniCgicqBFB0OUQEcSUgkCBHSBAiZ8jNTELukHNmMsf390d1z1RX+pzp7qrufj8fj35MV/W3q77d9amerk9/D3POISIiIiIiIiISZVVhV0BEREREREREJBMlMEREREREREQk8pTAEBEREREREZHIUwJDRERERERERCJPCQwRERERERERiTwlMEREREREREQk8pTAEBEREREREZHIUwJDRERERERERCJPCQwRERERERERiTwlMEREREREREQk8pTAEBEREREREZHIUwJDRERERERERCJPCQwRERERERERiTwlMEREREREREQk8pTAEBEREREREZHIUwJDRERERERERCJPCQwRERERERERiTwlMEREREREREQk8pTAEBEREREREZHIUwJDRGSAzOwpM3Ox24yw6yPpmdly3/GaEHZ9osbMZvjen6fCrk8qZnaHr56X5mmbWb12XxmXpow+FyQtM7vUFyN3hF0fKS36jJFKVRN2BUQkvdiX6BPSFNkGbAJeB+YAdzrnVhahaiKCdzGb5uEeYAuwGpgP/Al40DnXVYy6ieRThljfjhfrm4G3gRdjt8ecc1uKUD2JgFgi5uP9eOplzrk78lsbESlHaoEhUvqGAM3AacC3gGVm9nUzs3CrVZr0i0b2zOw633t1Xdj1iagqYDdgf+CjwH3A62Z2VJiVkmgos3NoMLA3XqyfCvwXcD+wysx+bWbvCbNypcrMJvhiZHnY9ZHC0HcPkeypBYZIaZkHvBBYNxw4FDg4tlwLXId30XRVsSomIgA8CPhbQFUDo4HjgT1i6/YBnjSz6c65fxS3eiJ58yCJsV4DjABGAYcDI2PrBwOXAx81s/8GfuicS9eSQ8rHm8Dfsiz7RiErIiLlQwkMkdLyF+fcdckeMLPjgN8D42KrPm9mdzvn5hercpXKOTcj7DpIZNzsnHsquNLM6oAvAd8ADO+i7g4zO1QX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
2020-12-31 19:30:39 +00:00
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
2021-01-01 18:53:11 +00:00
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition).populate()\n",
"\n",
2020-12-31 19:30:39 +00:00
"new_mean = model.reestimated_mean()\n",
"new_var = model.reestimated_variance()\n",
"new_std_dev = [sqrt(x) for x in new_var]\n",
"\n",
2020-12-31 19:30:39 +00:00
"state_1_y = [gaussian(i, new_mean[0], new_std_dev[0]) for i in x]\n",
"state_2_y = [gaussian(i, new_mean[1], new_std_dev[1]) for i in x]\n",
"\n",
2020-12-31 19:30:39 +00:00
"plt.plot(x, state_1_y, c='r', label=\"State 1\")\n",
"plt.plot(x, state_2_y, c='b', label=\"State 2\")\n",
"\n",
"plt.legend()\n",
"plt.title(\"Re-estimated Probability Density Functions\")\n",
"\n",
"plt.xlabel(x_label)\n",
"plt.ylabel(y_label)\n",
"plt.grid(linestyle=\"--\")\n",
"\n",
2021-01-01 18:53:11 +00:00
"fig = matplotlib.pyplot.gcf()\n",
"fig.set_dpi(fig_dpi)\n",
2020-12-31 19:30:39 +00:00
"plt.show()"
]
},
{
"source": [
"# Compare PDFs (7)"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
2021-01-01 18:53:11 +00:00
"execution_count": 15,
2020-12-31 19:30:39 +00:00
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
2021-01-01 18:53:11 +00:00
"text/plain": "<Figure size 1200x800 with 1 Axes>",
2021-01-05 11:10:29 +00:00
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"280.8pt\" version=\"1.1\" viewBox=\"0 0 424.8 280.8\" width=\"424.8pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-01-05T10:51:01.565307</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 280.8 \nL 424.8 280.8 \nL 424.8 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 43.78125 243.24375 \nL 417.6 243.24375 \nL 417.6 22.318125 \nL 43.78125 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p76fff50835)\" d=\"M 60.773011 243.24375 \nL 60.773011 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"mdf53c47469\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"60.773011\" xlink:href=\"#mdf53c47469\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 4 -->\n <g transform=\"translate(53.401918 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 10.59375 35.5 \nL 73.1875 35.5 \nL 73.1875 27.203125 \nL 10.59375 27.203125 \nz\n\" id=\"DejaVuSans-8722\"/>\n <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-8722\"/>\n <use x=\"83.789062\" xlink:href=\"#DejaVuSans-52\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path clip-path=\"url(#p76fff50835)\" d=\"M 117.412216 243.24375 \nL 117.412216 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"117.412216\" xlink:href=\"#mdf53c47469\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 2 -->\n <g transform=\"translate(110.041122 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20
2021-01-01 18:53:11 +00:00
"image/png": "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
2020-12-31 19:30:39 +00:00
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
2021-01-01 18:53:11 +00:00
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition).populate()\n",
2020-12-31 19:30:39 +00:00
"\n",
"new_mean = model.reestimated_mean()\n",
"new_var = model.reestimated_variance()\n",
"new_std_dev = [sqrt(x) for x in new_var]\n",
"\n",
"#######################################\n",
"# Original\n",
"#######################################\n",
"state_1_y = [gaussian(i, state1.mean, state1.std_dev) for i in x]\n",
"state_2_y = [gaussian(i, state2.mean, state2.std_dev) for i in x]\n",
"plt.plot(x, state_1_y, '--', c='r', label=\"State 1\", linewidth=1.0)\n",
"plt.plot(x, state_2_y, '--', c='b', label=\"State 2\", linewidth=1.0)\n",
"\n",
"#######################################\n",
"# Re-Estimated\n",
"#######################################\n",
"state_1_new_y = [gaussian(i, new_mean[0], new_std_dev[0]) for i in x]\n",
"state_2_new_y = [gaussian(i, new_mean[1], new_std_dev[1]) for i in x]\n",
"plt.plot(x, state_1_new_y, c='r', label=\"New State 1\")\n",
"plt.plot(x, state_2_new_y, c='b', label=\"New State 2\")\n",
"\n",
"plt.legend()\n",
"plt.title(\"Re-estimated Probability Density Functions\")\n",
"\n",
"plt.xlabel(x_label)\n",
"plt.ylabel(y_label)\n",
"plt.grid(linestyle=\"--\")\n",
"\n",
2021-01-01 18:53:11 +00:00
"fig = matplotlib.pyplot.gcf()\n",
"fig.set_dpi(fig_dpi)\n",
"fig.set_tight_layout(True)\n",
"if fig_export:\n",
" savefig(\"report/res/re-est-pdfs.png\")\n",
2020-12-31 19:30:39 +00:00
"plt.show()"
]
},
{
"source": [
"# Multiple Iterations"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
2021-01-05 11:10:29 +00:00
"execution_count": 16,
2020-12-31 19:30:39 +00:00
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
2021-01-05 11:10:29 +00:00
"mean (0): [1.6747846620246418, 4.089148442531048]\n",
"var (0): [1.8465047320872243, 0.37804421554121403]\n",
"[[0.70176362 0.57084996]\n",
" [1.6956088 0.26442637]]\n",
"\n",
"mean (1): [1.8732627187085478, 4.1264787288916045]\n",
"var (1): [1.741702511836495, 0.3397362903623662]\n",
"[[0.8060609 0.14928497]\n",
" [0.3747969 0.38642879]]\n",
"\n",
"mean (2): [1.9467921888680977, 4.144829018638114]\n",
"var (2): [1.802927096107906, 0.3244337549372125]\n",
"[[0.82078158 0.13830527]\n",
" [0.34355999 0.40237225]]\n",
"\n",
"mean (3): [1.998417533036004, 4.146391356501866]\n",
"var (3): [1.8794907388957407, 0.31336829013095496]\n",
"[[0.82382934 0.12631664]\n",
" [0.34908171 0.40883355]]\n",
"\n",
"mean (4): [2.0403185801109194, 4.137443801197436]\n",
"var (4): [1.9532263949235384, 0.30316834940556364]\n",
"[[0.82663329 0.11372608]\n",
" [0.35679246 0.4179057 ]]\n",
"\n",
"mean (5): [2.0768416135288152, 4.120742753858993]\n",
"var (5): [2.026102075205389, 0.291798571474891]\n",
"[[0.82952161 0.1002526 ]\n",
" [0.36446428 0.43140289]]\n",
"\n",
"mean (6): [2.11194659437116, 4.096434012657846]\n",
"var (6): [2.1032895125514766, 0.2773354097864741]\n",
"[[0.83266361 0.08482054]\n",
" [0.37298205 0.45042633]]\n",
"\n",
"mean (7): [2.149792870100123, 4.062396551986207]\n",
"var (7): [2.191678450688613, 0.2568529817420179]\n",
"[[0.8363706 0.0660714 ]\n",
" [0.3837438 0.47744431]]\n",
"\n",
"mean (8): [2.194489793285685, 4.014103644960269]\n",
"var (8): [2.2986239066545524, 0.22514847051325343]\n",
"[[0.84098808 0.04298428]\n",
" [0.39835926 0.51702684]]\n",
"\n",
"mean (9): [2.246078108416006, 3.9478836679900287]\n",
"var (9): [2.423237858945465, 0.17533830729899114]\n",
"[[0.84636913 0.01806124]\n",
" [0.41572836 0.57245506]]\n",
"\n",
"mean (10): [2.2856592028959346, 3.882184182166453]\n",
"var (10): [2.527476010893805, 0.11675401844606319]\n",
"[[0.85009354 0.00251453]\n",
" [0.420065 0.6209139 ]]\n",
"\n",
"mean (11): [2.290643073016055, 3.8598915740419946]\n",
"var (11): [2.5588220300129474, 0.09296081385828549]\n",
"[[8.49474403e-01 6.94178508e-05]\n",
" [4.04708642e-01 6.12273377e-01]]\n",
"\n",
"mean (12): [2.2914144510257906, 3.8594038663696892]\n",
"var (12): [2.559782940361538, 0.09129358424097164]\n",
"[[8.48816419e-01 2.56744984e-06]\n",
" [4.07814693e-01 5.92792027e-01]]\n",
"\n",
"mean (13): [2.2920722638916136, 3.8597894517174827]\n",
"var (13): [2.559397203251749, 0.09112610156222908]\n",
"[[8.48468970e-01 1.38599620e-07]\n",
" [4.08641855e-01 5.91369797e-01]]\n",
"\n",
"mean (14): [2.2923368298535873, 3.85996676996849]\n",
"var (14): [2.559213392145394, 0.0910669910055963]\n",
"[[8.48421180e-01 7.64719574e-09]\n",
" [4.08579843e-01 5.91420888e-01]]\n",
"\n",
"mean (15): [2.2924457175066317, 3.860041202681166]\n",
"var (15): [2.559136099327699, 0.09104297025788764]\n",
"[[8.48413724e-01 4.22240186e-10]\n",
" [4.08544019e-01 5.91456046e-01]]\n",
"\n",
"mean (16): [2.2924909067581587, 3.8600721725675933]\n",
"var (16): [2.559103947613575, 0.09103301880870453]\n",
"[[8.48411387e-01 2.33175631e-11]\n",
" [4.08528360e-01 5.91471648e-01]]\n",
"\n",
"mean (17): [2.2925096881606515, 3.8600850494050714]\n",
"var (17): [2.5590905823972907, 0.09102888377407325]\n",
"[[8.48410459e-01 1.28774690e-12]\n",
" [4.08521812e-01 5.91478189e-01]]\n",
"\n",
"mean (18): [2.292517496754187, 3.860090403678976]\n",
"var (18): [2.55908502565561, 0.09102716461059344]\n",
"[[8.48410077e-01 7.11193032e-14]\n",
" [4.08519090e-01 5.91480910e-01]]\n",
"\n",
"mean (19): [2.292520743671027, 3.860092630150436]\n",
"var (19): [2.559082715100272, 0.09102644975438301]\n",
"[[8.48409918e-01 3.92779179e-15]\n",
" [4.08517958e-01 5.91482042e-01]]\n",
"\n",
"mean (20): [2.2925220938511153, 3.860093556010955]\n",
"var (20): [2.5590817542930737, 0.09102615249086479]\n",
"[[8.48409852e-01 2.16925735e-16]\n",
" [4.08517488e-01 5.91482512e-01]]\n",
"\n",
"mean (21): [2.292522655314822, 3.8600939410271335]\n",
"var (21): [2.5590813547477076, 0.09102602887540412]\n",
"[[8.48409824e-01 1.19804846e-17]\n",
" [4.08517292e-01 5.91482708e-01]]\n",
"\n",
"mean (22): [2.2925228887980498, 3.8600941011356555]\n",
"var (22): [2.5590811885978098, 0.09102597747017212]\n",
"[[8.48409813e-01 6.61664720e-19]\n",
" [4.08517211e-01 5.91482789e-01]]\n",
"\n",
"mean (23): [2.2925229858918237, 3.8600941677167215]\n",
"var (23): [2.5590811195045364, 0.09102595609334513]\n",
"[[8.48409808e-01 3.65427891e-20]\n",
" [4.08517177e-01 5.91482823e-01]]\n",
"\n",
"mean (24): [2.2925230262682406, 3.8600941954044554]\n",
"var (24): [2.559081090772119, 0.09102594720379605]\n",
"[[8.48409806e-01 2.01820581e-21]\n",
" [4.08517163e-01 5.91482837e-01]]\n",
"\n",
"mean (25): [2.2925230430587726, 3.860094206918401]\n",
"var (25): [2.559081078823743, 0.09102594350707681]\n",
"[[8.48409805e-01 1.11462617e-22]\n",
" [4.08517157e-01 5.91482843e-01]]\n",
"\n",
"mean (26): [2.292523050041117, 3.8600942117064783]\n",
"var (26): [2.55908107385501, 0.0910259419697957]\n",
"[[8.48409805e-01 6.15592084e-24]\n",
" [4.08517154e-01 5.91482846e-01]]\n",
"\n",
"mean (27): [2.2925230529447265, 3.8600942136976]\n",
"var (27): [2.559081071788762, 0.09102594133051709]\n",
"[[8.48409805e-01 3.39982702e-25]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (28): [2.2925230541521926, 3.860094214525609]\n",
"var (28): [2.559081070929512, 0.09102594106467299]\n",
"[[8.48409805e-01 1.87767584e-26]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (29): [2.292523054654318, 3.860094214869936]\n",
"var (29): [2.5590810705721925, 0.09102594095412166]\n",
"[[8.48409805e-01 1.03701351e-27]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (30): [2.2925230548631266, 3.8600942150131257]\n",
"var (30): [2.5590810704236024, 0.09102594090814888]\n",
"[[8.48409805e-01 5.72727731e-29]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (31): [2.29252305494996, 3.8600942150726705]\n",
"var (31): [2.55908107036181, 0.09102594088903106]\n",
"[[8.48409805e-01 3.16309335e-30]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (32): [2.292523054986069, 3.8600942150974324]\n",
"var (32): [2.559081070336114, 0.09102594088108093]\n",
"[[8.48409805e-01 1.74693122e-31]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (33): [2.292523055001086, 3.8600942151077295]\n",
"var (33): [2.559081070325428, 0.09102594087777484]\n",
"[[8.48409805e-01 9.64805129e-33]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (34): [2.2925230550073303, 3.8600942151120115]\n",
"var (34): [2.559081070320984, 0.09102594087640002]\n",
"[[8.48409805e-01 5.32848074e-34]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (35): [2.2925230550099274, 3.860094215113793]\n",
"var (35): [2.5590810703191362, 0.09102594087582833]\n",
"[[8.48409805e-01 2.94284371e-35]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (36): [2.292523055011007, 3.8600942151145334]\n",
"var (36): [2.5590810703183675, 0.09102594087559052]\n",
"[[8.48409805e-01 1.62529049e-36]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (37): [2.292523055011456, 3.8600942151148416]\n",
"var (37): [2.559081070318048, 0.09102594087549164]\n",
"[[8.48409805e-01 8.97624695e-38]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (38): [2.292523055011643, 3.860094215114969]\n",
"var (38): [2.5590810703179154, 0.09102594087545052]\n",
"[[8.48409805e-01 4.95745282e-39]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (39): [2.2925230550117206, 3.8600942151150224]\n",
"var (39): [2.5590810703178604, 0.09102594087543343]\n",
"[[8.48409805e-01 2.73793029e-40]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (40): [2.2925230550117526, 3.860094215115045]\n",
"var (40): [2.5590810703178373, 0.09102594087542634]\n",
"[[8.48409805e-01 1.51211974e-41]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (41): [2.2925230550117663, 3.860094215115054]\n",
"var (41): [2.559081070317828, 0.09102594087542336]\n",
"[[8.48409805e-01 8.35122109e-43]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (42): [2.2925230550117717, 3.8600942151150575]\n",
"var (42): [2.559081070317824, 0.09102594087542212]\n",
"[[8.48409805e-01 4.61225997e-44]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (43): [2.292523055011774, 3.860094215115059]\n",
"var (43): [2.5590810703178217, 0.09102594087542162]\n",
"[[8.48409805e-01 2.54728522e-45]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (44): [2.292523055011775, 3.8600942151150592]\n",
"var (44): [2.5590810703178217, 0.09102594087542144]\n",
"[[8.48409805e-01 1.40682920e-46]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (45): [2.2925230550117752, 3.8600942151150592]\n",
"var (45): [2.5590810703178213, 0.09102594087542136]\n",
"[[8.48409805e-01 7.76971646e-48]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (46): [2.2925230550117752, 3.86009421511506]\n",
"var (46): [2.5590810703178213, 0.09102594087542135]\n",
"[[8.48409805e-01 4.29110328e-49]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (47): [2.2925230550117752, 3.86009421511506]\n",
"var (47): [2.559081070317821, 0.0910259408754213]\n",
"[[8.48409805e-01 2.36991497e-50]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (48): [2.2925230550117757, 3.86009421511506]\n",
"var (48): [2.5590810703178213, 0.09102594087542129]\n",
"[[8.48409805e-01 1.30887015e-51]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n",
"mean (49): [2.2925230550117752, 3.8600942151150606]\n",
"var (49): [2.5590810703178213, 0.09102594087542129]\n",
"[[8.48409805e-01 7.22870263e-53]\n",
" [4.08517153e-01 5.91482847e-01]]\n",
"\n"
2020-12-31 19:30:39 +00:00
]
},
{
"output_type": "display_data",
"data": {
2021-01-01 18:53:11 +00:00
"text/plain": "<Figure size 1200x800 with 1 Axes>",
2021-01-05 11:10:29 +00:00
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"280.8pt\" version=\"1.1\" viewBox=\"0 0 424.8 280.8\" width=\"424.8pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-01-05T10:51:02.252762</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 280.8 \nL 424.8 280.8 \nL 424.8 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 43.78125 243.24375 \nL 414.41875 243.24375 \nL 414.41875 22.318125 \nL 43.78125 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p2b70c44e18)\" d=\"M 43.78125 243.24375 \nL 43.78125 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"m106450c27e\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"43.78125\" xlink:href=\"#m106450c27e\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 4 -->\n <g transform=\"translate(36.410156 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 10.59375 35.5 \nL 73.1875 35.5 \nL 73.1875 27.203125 \nL 10.59375 27.203125 \nz\n\" id=\"DejaVuSans-8722\"/>\n <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-8722\"/>\n <use x=\"83.789062\" xlink:href=\"#DejaVuSans-52\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path clip-path=\"url(#p2b70c44e18)\" d=\"M 105.554167 243.24375 \nL 105.554167 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"105.554167\" xlink:href=\"#m106450c27e\" y=\"243.24375\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 2 -->\n <g transform=\"translate(98.183073 257.842188)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.10937
"image/png": "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
2020-12-31 19:30:39 +00:00
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
2021-01-05 11:10:29 +00:00
"iterations = 50\n",
"\n",
"fig = plt.figure(dpi=fig_dpi, tight_layout=True)\n",
"ax = fig.add_subplot(1, 1, 1, xmargin=0, ymargin=0)\n",
2020-12-31 19:30:39 +00:00
"\n",
2021-01-05 11:10:29 +00:00
"iter_mean = [state1.mean, state2.mean]\n",
"iter_var = [state1.variance, state2.variance]\n",
"iter_state_transitions = state_transition\n",
2020-12-31 19:30:39 +00:00
"\n",
2021-01-05 11:10:29 +00:00
"ax.plot(x, [gaussian(i, iter_mean[0], sqrt(iter_var[0])) for i in x], '--', c='r', linewidth=1.0)\n",
"ax.plot(x, [gaussian(i, iter_mean[1], sqrt(iter_var[1])) for i in x], '--', c='b', linewidth=1.0)\n",
2020-12-31 19:30:39 +00:00
"\n",
2021-01-01 18:53:11 +00:00
"label1=None\n",
"label2=None\n",
"\n",
2020-12-31 19:30:39 +00:00
"for i in range(iterations):\n",
2021-01-05 11:10:29 +00:00
" iter_model = MarkovModel(states=[State(iter_mean[0], iter_var[0], state1.entry, state1.exit), \n",
" State(iter_mean[1], iter_var[1], state2.entry, state2.exit)],\n",
" observations=observations,\n",
" state_transitions=iter_state_transitions).populate()\n",
"\n",
" # NEW PARAMETERS\n",
" iter_mean = iter_model.reestimated_mean()\n",
" iter_var = iter_model.reestimated_variance()\n",
" iter_state_transitions[1:3, 1:3] = iter_model.reestimated_state_transitions()\n",
"\n",
" print(f\"mean ({i}): \", iter_mean)\n",
" print(f\"var ({i}): \", iter_var)\n",
" print(iter_model.reestimated_state_transitions())\n",
2020-12-31 19:30:39 +00:00
" print()\n",
"\n",
2021-01-05 11:10:29 +00:00
" state_1_y = [gaussian(i, iter_mean[0], sqrt(iter_var[0])) for i in x]\n",
" state_2_y = [gaussian(i, iter_mean[1], sqrt(iter_var[1])) for i in x]\n",
2020-12-31 19:30:39 +00:00
"\n",
" style = '--'\n",
" linewidth = 1.0\n",
" if i == iterations - 1:\n",
" style = '-'\n",
" linewidth = 2.0\n",
2021-01-01 18:53:11 +00:00
" label1='State 1'\n",
" label2='State 2'\n",
2020-12-31 19:30:39 +00:00
"\n",
2021-01-05 11:10:29 +00:00
" ax.plot(x, state_1_y, style, c='r', label=label1, linewidth=linewidth)\n",
" ax.plot(x, state_2_y, style, c='b', label=label2, linewidth=linewidth)\n",
2020-12-31 19:30:39 +00:00
"\n",
2021-01-05 11:10:29 +00:00
"ax.set_title(\"Probability Density Function Iterations\")\n",
2020-12-31 19:30:39 +00:00
"\n",
2021-01-05 11:10:29 +00:00
"ax.set_xlabel(x_label)\n",
"ax.set_ylabel(y_label)\n",
"ax.grid(linestyle=\"--\")\n",
"ax.legend()\n",
2020-12-31 19:30:39 +00:00
"\n",
2021-01-05 11:10:29 +00:00
"if fig_export:\n",
2021-01-01 18:53:11 +00:00
" savefig(\"report/res/iterated-pdfs.png\")\n",
2021-01-05 11:10:29 +00:00
"fig.show()\n"
2020-12-31 19:30:39 +00:00
]
},
{
"source": [
"# Baum-Welch State Transition Re-estimations"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
2021-01-01 18:53:11 +00:00
"execution_count": 17,
2020-12-31 19:30:39 +00:00
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
2021-01-05 11:10:29 +00:00
"[[0.92 0.06]\n [0.04 0.93]]\n[[8.37336439e-01 6.15623114e-50]\n [3.50509494e-01 6.49490506e-01]]\n"
2020-12-31 19:30:39 +00:00
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
2021-01-05 11:10:29 +00:00
"array([[8.37336439e-01, 6.15623114e-50],\n",
" [3.50509494e-01, 6.49490506e-01]])"
2020-12-31 19:30:39 +00:00
]
},
"metadata": {},
2021-01-01 18:53:11 +00:00
"execution_count": 17
2020-12-31 19:30:39 +00:00
}
],
"source": [
2021-01-01 18:53:11 +00:00
"model = MarkovModel(states=[state1, state2], \n",
" observations=observations, \n",
" state_transitions=state_transition).populate()\n",
2020-12-31 19:30:39 +00:00
"\n",
"print(a_matrix)\n",
2021-01-05 11:10:29 +00:00
"print(model.reestimated_state_transitions())\n",
2020-12-31 19:30:39 +00:00
"model.reestimated_state_transitions()"
]
2021-01-05 11:10:29 +00:00
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
2020-12-11 21:33:20 +00:00
}
]
}