markov-models/markov.ipynb

790 lines
1.5 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-01 18:53:11 +00:00
"version": "3.8.4-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-01 18:53:11 +00:00
"execution_count": 38,
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>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\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\">\r\n <metadata>\r\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#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-01-01T16:45:47.085459</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 280.8 \r\nL 424.8 280.8 \r\nL 424.8 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 43.78125 243.24375 \r\nL 417.6 243.24375 \r\nL 417.6 22.318125 \r\nL 43.78125 22.318125 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g id=\"matplotlib.axis_1\">\r\n <g id=\"xtick_1\">\r\n <g id=\"line2d_1\">\r\n <path clip-path=\"url(#p2a077d662c)\" d=\"M 60.773011 243.24375 \r\nL 60.773011 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_2\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"m9958e6ba4d\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"60.773011\" xlink:href=\"#m9958e6ba4d\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- 4 -->\r\n <g transform=\"translate(53.401918 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 10.59375 35.5 \r\nL 73.1875 35.5 \r\nL 73.1875 27.203125 \r\nL 10.59375 27.203125 \r\nz\r\n\" id=\"DejaVuSans-8722\"/>\r\n <path d=\"M 37.796875 64.3125 \r\nL 12.890625 25.390625 \r\nL 37.796875 25.390625 \r\nz\r\nM 35.203125 72.90625 \r\nL 47.609375 72.90625 \r\nL 47.609375 25.390625 \r\nL 58.015625 25.390625 \r\nL 58.015625 17.1875 \r\nL 47.609375 17.1875 \r\nL 47.609375 0 \r\nL 37.796875 0 \r\nL 37.796875 17.1875 \r\nL 4.890625 17.1875 \r\nL 4.890625 26.703125 \r\nz\r\n\" id=\"DejaVuSans-52\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-8722\"/>\r\n <use x=\"83.789062\" xlink:href=\"#DejaVuSans-52\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_2\">\r\n <g id=\"line2d_3\">\r\n <path clip-path=\"url(#p2a077d662c)\" d=\"M 117.412216 243.24375 \r\nL 117.412216 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_4\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"117.412216\" xlink:href=\"#m9958e6ba4d\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_2\">\r\n <!-- 2 -->\r\n <g transform=\"translate(110.041122 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ 13.765625 71.78125 18.9375 73 \r\nQ 24.125 74.2187
"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": [
2021-01-01 18:53:11 +00:00
"3.8 -> State 1: 0.02185157424475792, State 2: {gaussian(obs, state2.mean, state2.std_dev)}\n4.2 -> State 1: 0.009496655019831194, State 2: {gaussian(obs, state2.mean, state2.std_dev)}\n3.4 -> State 1: 0.04499247209432338, State 2: {gaussian(obs, state2.mean, state2.std_dev)}\n-0.4 -> State 1: 0.16833223796171576, State 2: {gaussian(obs, state2.mean, state2.std_dev)}\n1.9 -> State 1: 0.2509478601290037, State 2: {gaussian(obs, state2.mean, state2.std_dev)}\n3.0 -> State 1: 0.08289761566062391, State 2: {gaussian(obs, state2.mean, state2.std_dev)}\n1.6 -> State 1: 0.2933877723035829, State 2: {gaussian(obs, state2.mean, state2.std_dev)}\n1.9 -> State 1: 0.2509478601290037, State 2: {gaussian(obs, state2.mean, state2.std_dev)}\n5.0 -> State 1: 0.0012852324969092556, State 2: {gaussian(obs, state2.mean, state2.std_dev)}\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",
" 'State 2: {gaussian(obs, state2.mean, state2.std_dev)}')"
2020-12-11 21:33:20 +00:00
]
},
{
"cell_type": "code",
2021-01-01 18:53:11 +00:00
"execution_count": 29,
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>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\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\">\r\n <metadata>\r\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#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-01-01T17:47:40.076809</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 280.8 \r\nL 424.8 280.8 \r\nL 424.8 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 43.78125 243.24375 \r\nL 417.6 243.24375 \r\nL 417.6 22.318125 \r\nL 43.78125 22.318125 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g id=\"PathCollection_1\">\r\n <defs>\r\n <path d=\"M -4.031129 4.031129 \r\nL 4.031129 -4.031129 \r\nM -4.031129 -4.031129 \r\nL 4.031129 4.031129 \r\n\" id=\"m0d08841718\" style=\"stroke:#800000;stroke-width:1.5;\"/>\r\n </defs>\r\n <g clip-path=\"url(#p7d7f826bab)\">\r\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"281.665909\" xlink:href=\"#m0d08841718\" y=\"225.499678\"/>\r\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"292.99375\" xlink:href=\"#m0d08841718\" y=\"229.854401\"/>\r\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"270.338068\" xlink:href=\"#m0d08841718\" y=\"217.343233\"/>\r\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"162.72358\" xlink:href=\"#m0d08841718\" y=\"173.869812\"/>\r\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"227.858665\" xlink:href=\"#m0d08841718\" y=\"144.750382\"/>\r\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"259.010227\" xlink:href=\"#m0d08841718\" y=\"203.982852\"/>\r\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"219.362784\" xlink:href=\"#m0d08841718\" y=\"129.791637\"/>\r\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"227.858665\" xlink:href=\"#m0d08841718\" y=\"144.750382\"/>\r\n <use style=\"fill:#800000;stroke:#800000;stroke-width:1.5;\" x=\"315.649432\" xlink:href=\"#m0d08841718\" y=\"232.748672\"/>\r\n </g>\r\n </g>\r\n <g id=\"PathCollection_2\">\r\n <defs>\r\n <path d=\"M -4.031129 4.031129 \r\nL 4.031129 -4.031129 \r\nM -4.031129 -4.031129 \r\nL 4.031129 4.031129 \r\n\" id=\"m9beab2f63e\" style=\"stroke:#000080;stroke-width:1.5;\"/>\r\n </defs>\r\n <g clip-path=\"url(#p7d7f826bab)\">\r\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"281.665909\" xlink:href=\"#m9beab2f63e\" y=\"40.357551\"/>\r\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"292.99375\" xlink:href=\"#m9beab2f63e\" y=\"40.357551\"/>\r\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"270.338068\" xlink:href=\"#m9beab2f63e\" y=\"94.079626\"/>\r\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"162.72358\" xlink:href=\"#m9beab2f63e\" y=\"233.201676\"/>\r\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"227.858665\" xlink:href=\"#m9beab2f63e\" y=\"230.970121\"/>\r\n <use style=\"fill:#000080;stroke:#000080;stroke-width:1.5;\" x=\"259.010227\" xlink:href=\"#m9beab2f63e\" y=\"160.795588\"/>\r\n <use style=\"fill:#000080
"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>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\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\">\r\n <metadata>\r\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#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-01-01T16:45:49.090469</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 280.8 \r\nL 424.8 280.8 \r\nL 424.8 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 48.982813 243.24375 \r\nL 417.6 243.24375 \r\nL 417.6 22.318125 \r\nL 48.982813 22.318125 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g id=\"matplotlib.axis_1\">\r\n <g id=\"xtick_1\">\r\n <g id=\"line2d_1\">\r\n <path clip-path=\"url(#pd38cdb1088)\" d=\"M 65.738139 243.24375 \r\nL 65.738139 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_2\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"m42b454bd08\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"65.738139\" xlink:href=\"#m42b454bd08\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- 1 -->\r\n <g transform=\"translate(62.556889 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 12.40625 8.296875 \r\nL 28.515625 8.296875 \r\nL 28.515625 63.921875 \r\nL 10.984375 60.40625 \r\nL 10.984375 69.390625 \r\nL 28.421875 72.90625 \r\nL 38.28125 72.90625 \r\nL 38.28125 8.296875 \r\nL 54.390625 8.296875 \r\nL 54.390625 0 \r\nL 12.40625 0 \r\nz\r\n\" id=\"DejaVuSans-49\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-49\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_2\">\r\n <g id=\"line2d_3\">\r\n <path clip-path=\"url(#pd38cdb1088)\" d=\"M 107.626456 243.24375 \r\nL 107.626456 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_4\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"107.626456\" xlink:href=\"#m42b454bd08\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_2\">\r\n <!-- 2 -->\r\n <g transform=\"translate(104.445206 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ 13.765625 71.78125 18.9375 73 \r\nQ 24.125 74.21875 28.421875 74.21875 \r\nQ 39.75 74.21875 46.484375 68.546875 \r\nQ 53.21875 62.890625 53.21875 53.421875 \r\nQ 53.21875 48.921875 51.53125 44.890625 \r\nQ 49.859375 40.875 45.40625 35.40625 \r\nQ 44.1875 33.984375 37.640625 27.21875 \r\nQ 31.109375 20.453125 19.1875 8.296875 \r\nz\r\n\" id
"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>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\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\">\r\n <metadata>\r\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#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-01-01T16:45:49.908459</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 280.8 \r\nL 424.8 280.8 \r\nL 424.8 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 48.982813 243.24375 \r\nL 417.6 243.24375 \r\nL 417.6 22.318125 \r\nL 48.982813 22.318125 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g id=\"matplotlib.axis_1\">\r\n <g id=\"xtick_1\">\r\n <g id=\"line2d_1\">\r\n <path clip-path=\"url(#p85b3e573db)\" d=\"M 65.738139 243.24375 \r\nL 65.738139 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_2\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"mfaf597d8b3\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"65.738139\" xlink:href=\"#mfaf597d8b3\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- 1 -->\r\n <g transform=\"translate(62.556889 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 12.40625 8.296875 \r\nL 28.515625 8.296875 \r\nL 28.515625 63.921875 \r\nL 10.984375 60.40625 \r\nL 10.984375 69.390625 \r\nL 28.421875 72.90625 \r\nL 38.28125 72.90625 \r\nL 38.28125 8.296875 \r\nL 54.390625 8.296875 \r\nL 54.390625 0 \r\nL 12.40625 0 \r\nz\r\n\" id=\"DejaVuSans-49\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-49\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_2\">\r\n <g id=\"line2d_3\">\r\n <path clip-path=\"url(#p85b3e573db)\" d=\"M 107.626456 243.24375 \r\nL 107.626456 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_4\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"107.626456\" xlink:href=\"#mfaf597d8b3\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_2\">\r\n <!-- 2 -->\r\n <g transform=\"translate(104.445206 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ 13.765625 71.78125 18.9375 73 \r\nQ 24.125 74.21875 28.421875 74.21875 \r\nQ 39.75 74.21875 46.484375 68.546875 \r\nQ 53.21875 62.890625 53.21875 53.421875 \r\nQ 53.21875 48.921875 51.53125 44.890625 \r\nQ 49.859375 40.875 45.40625 35.40625 \r\nQ 44.1875 33.984375 37.640625 27.21875 \r\nQ 31.109375 20.453125 19.1875 8.296875 \r\nz\r\n\" id
"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>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\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\">\r\n <metadata>\r\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#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-01-01T16:45:50.688461</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 424.8 \r\nL 416.703013 424.8 \r\nL 416.703013 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"patch_2\">\r\n <path d=\"M 7.2 417.6 \r\nL 402.481875 417.6 \r\nL 402.481875 22.318125 \r\nL 7.2 22.318125 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g id=\"pane3d_1\">\r\n <g id=\"patch_3\">\r\n <path d=\"M 49.005253 340.305731 \r\nL 135.065331 201.936667 \r\nL 131.351494 50.443663 \r\nL 40.252902 181.428404 \r\n\" style=\"fill:#f2f2f2;opacity:0.5;stroke:#f2f2f2;stroke-linejoin:miter;\"/>\r\n </g>\r\n </g>\r\n <g id=\"pane3d_2\">\r\n <g id=\"patch_4\">\r\n <path d=\"M 135.065331 201.936667 \r\nL 361.811916 244.232181 \r\nL 369.53318 90.353614 \r\nL 131.351494 50.443663 \r\n\" style=\"fill:#e6e6e6;opacity:0.5;stroke:#e6e6e6;stroke-linejoin:miter;\"/>\r\n </g>\r\n </g>\r\n <g id=\"pane3d_3\">\r\n <g id=\"patch_5\">\r\n <path d=\"M 49.005253 340.305731 \r\nL 294.873299 390.994429 \r\nL 361.811916 244.232181 \r\nL 135.065331 201.936667 \r\n\" style=\"fill:#ececec;opacity:0.5;stroke:#ececec;stroke-linejoin:miter;\"/>\r\n </g>\r\n </g>\r\n <g id=\"axis3d_1\">\r\n <g id=\"line2d_1\">\r\n <path d=\"M 49.005253 340.305731 \r\nL 294.873299 390.994429 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- Observation -->\r\n <g transform=\"translate(129.664429 399.369867)rotate(-348.350985)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 39.40625 66.21875 \r\nQ 28.65625 66.21875 22.328125 58.203125 \r\nQ 16.015625 50.203125 16.015625 36.375 \r\nQ 16.015625 22.609375 22.328125 14.59375 \r\nQ 28.65625 6.59375 39.40625 6.59375 \r\nQ 50.140625 6.59375 56.421875 14.59375 \r\nQ 62.703125 22.609375 62.703125 36.375 \r\nQ 62.703125 50.203125 56.421875 58.203125 \r\nQ 50.140625 66.21875 39.40625 66.21875 \r\nz\r\nM 39.40625 74.21875 \r\nQ 54.734375 74.21875 63.90625 63.9375 \r\nQ 73.09375 53.65625 73.09375 36.375 \r\nQ 73.09375 19.140625 63.90625 8.859375 \r\nQ 54.734375 -1.421875 39.40625 -1.421875 \r\nQ 24.03125 -1.421875 14.8125 8.828125 \r\nQ 5.609375 19.09375 5.609375 36.375 \r\nQ 5.609375 53.65625 14.8125 63.9375 \r\nQ 24.03125 74.21875 39.40625 74.21875 \r\nz\r\n\" id=\"DejaVuSans-79\"/>\r\n <path d=\"M 48.6875 27.296875 \r\nQ 48.6875 37.203125 44.609375 42.84375 \r\nQ 40.53125 48.484375 33.40625 48.484375 \r\nQ 26.265625 48.484375 22.1875 42.84375 \r\nQ 18.109375 37.203125 18.109375 27.296875 \r\nQ 18.109375 17.390625 22.1875 11.75 \r\nQ 26.265625 6.109375 33.40625 6.109375 \r\nQ 40.53125 6.109375 44.609375 11.75 \r\nQ 48.6875 17.390625 48.6875 27.296875 \r\nz\r\nM 18.109375 46.390625 \r\nQ 20.953125 51.265625 25.265625 53.625 \r\nQ 29.59375 56 35.59375 56 \r\nQ 45.5625 56 51.78125 48.09375 \r\nQ 58.015625 40.1875 58.015625 27.296875 \r\nQ 58.015625 14.40625 51.78125 6.484375 \r\nQ 45.5625 -1.421875 35.59375 -1.421875 \r\nQ 2
"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>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\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\">\r\n <metadata>\r\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#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-01-01T16:45:51.534460</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 280.8 \r\nL 424.8 280.8 \r\nL 424.8 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 43.78125 243.24375 \r\nL 417.6 243.24375 \r\nL 417.6 22.318125 \r\nL 43.78125 22.318125 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g id=\"matplotlib.axis_1\">\r\n <g id=\"xtick_1\">\r\n <g id=\"line2d_1\">\r\n <path clip-path=\"url(#p14812ea37a)\" d=\"M 60.773011 243.24375 \r\nL 60.773011 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_2\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"m1a78ae6fe4\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"60.773011\" xlink:href=\"#m1a78ae6fe4\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- 1 -->\r\n <g transform=\"translate(57.591761 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 12.40625 8.296875 \r\nL 28.515625 8.296875 \r\nL 28.515625 63.921875 \r\nL 10.984375 60.40625 \r\nL 10.984375 69.390625 \r\nL 28.421875 72.90625 \r\nL 38.28125 72.90625 \r\nL 38.28125 8.296875 \r\nL 54.390625 8.296875 \r\nL 54.390625 0 \r\nL 12.40625 0 \r\nz\r\n\" id=\"DejaVuSans-49\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-49\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_2\">\r\n <g id=\"line2d_3\">\r\n <path clip-path=\"url(#p14812ea37a)\" d=\"M 103.252415 243.24375 \r\nL 103.252415 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_4\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"103.252415\" xlink:href=\"#m1a78ae6fe4\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_2\">\r\n <!-- 2 -->\r\n <g transform=\"translate(100.071165 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ 13.765625 71.78125 18.9375 73 \r\nQ 24.125 74.21875 28.421875 74.21875 \r\nQ 39.75 74.21875 46.484375 68.546875 \r\nQ 53.21875 62.890625 53.21875 53.421875 \r\nQ 53.21875 48.921875 51.53125 44.890625 \r\nQ 49.859375 40.875 45.40625 35.40625 \r\nQ 44.1875 33.984375 37.640625 27.21875 \r\nQ 31.109375 20.453125 19.1875 8.296875 \r\nz\r\n\" id=\
"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>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\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\">\r\n <metadata>\r\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#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-01-01T16:45:52.234460</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 277.314375 \r\nL 385.78125 277.314375 \r\nL 385.78125 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 43.78125 239.758125 \r\nL 378.58125 239.758125 \r\nL 378.58125 22.318125 \r\nL 43.78125 22.318125 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g id=\"matplotlib.axis_1\">\r\n <g id=\"xtick_1\">\r\n <g id=\"line2d_1\">\r\n <path clip-path=\"url(#p011c9bd0b5)\" d=\"M 58.999432 239.758125 \r\nL 58.999432 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_2\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"m9ea21366ef\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"58.999432\" xlink:href=\"#m9ea21366ef\" y=\"239.758125\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- 4 -->\r\n <g transform=\"translate(51.628338 254.356562)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 10.59375 35.5 \r\nL 73.1875 35.5 \r\nL 73.1875 27.203125 \r\nL 10.59375 27.203125 \r\nz\r\n\" id=\"DejaVuSans-8722\"/>\r\n <path d=\"M 37.796875 64.3125 \r\nL 12.890625 25.390625 \r\nL 37.796875 25.390625 \r\nz\r\nM 35.203125 72.90625 \r\nL 47.609375 72.90625 \r\nL 47.609375 25.390625 \r\nL 58.015625 25.390625 \r\nL 58.015625 17.1875 \r\nL 47.609375 17.1875 \r\nL 47.609375 0 \r\nL 37.796875 0 \r\nL 37.796875 17.1875 \r\nL 4.890625 17.1875 \r\nL 4.890625 26.703125 \r\nz\r\n\" id=\"DejaVuSans-52\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-8722\"/>\r\n <use x=\"83.789062\" xlink:href=\"#DejaVuSans-52\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_2\">\r\n <g id=\"line2d_3\">\r\n <path clip-path=\"url(#p011c9bd0b5)\" d=\"M 109.726705 239.758125 \r\nL 109.726705 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_4\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"109.726705\" xlink:href=\"#m9ea21366ef\" y=\"239.758125\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_2\">\r\n <!-- 2 -->\r\n <g transform=\"translate(102.355611 254.356562)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ
"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>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\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\">\r\n <metadata>\r\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#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-01-01T16:45:52.980471</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 280.8 \r\nL 424.8 280.8 \r\nL 424.8 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 43.78125 243.24375 \r\nL 417.6 243.24375 \r\nL 417.6 22.318125 \r\nL 43.78125 22.318125 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g id=\"matplotlib.axis_1\">\r\n <g id=\"xtick_1\">\r\n <g id=\"line2d_1\">\r\n <path clip-path=\"url(#pd63bc6216c)\" d=\"M 60.773011 243.24375 \r\nL 60.773011 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_2\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"mfa4cd9f033\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"60.773011\" xlink:href=\"#mfa4cd9f033\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- 4 -->\r\n <g transform=\"translate(53.401918 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 10.59375 35.5 \r\nL 73.1875 35.5 \r\nL 73.1875 27.203125 \r\nL 10.59375 27.203125 \r\nz\r\n\" id=\"DejaVuSans-8722\"/>\r\n <path d=\"M 37.796875 64.3125 \r\nL 12.890625 25.390625 \r\nL 37.796875 25.390625 \r\nz\r\nM 35.203125 72.90625 \r\nL 47.609375 72.90625 \r\nL 47.609375 25.390625 \r\nL 58.015625 25.390625 \r\nL 58.015625 17.1875 \r\nL 47.609375 17.1875 \r\nL 47.609375 0 \r\nL 37.796875 0 \r\nL 37.796875 17.1875 \r\nL 4.890625 17.1875 \r\nL 4.890625 26.703125 \r\nz\r\n\" id=\"DejaVuSans-52\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-8722\"/>\r\n <use x=\"83.789062\" xlink:href=\"#DejaVuSans-52\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_2\">\r\n <g id=\"line2d_3\">\r\n <path clip-path=\"url(#pd63bc6216c)\" d=\"M 117.412216 243.24375 \r\nL 117.412216 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_4\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"117.412216\" xlink:href=\"#mfa4cd9f033\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_2\">\r\n <!-- 2 -->\r\n <g transform=\"translate(110.041122 257.842188)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ 13.765625 71.78125 18.9375 73 \r\nQ 24.125 74.2187
"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-01 18:53:11 +00:00
"execution_count": 39,
2020-12-31 19:30:39 +00:00
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"mean (0): [1.6747846620246418, 4.089148442531048]\nvar (0): [1.8465047320872243, 0.37804421554121403]\n\nmean (1): [1.9929120009112011, 4.056666511439969]\nvar (1): [2.1156649116379684, 0.2918412170796056]\n\nmean (2): [2.1821733376587726, 3.9904324818569052]\nvar (2): [2.3495798563848562, 0.23463095910597057]\n\nmean (3): [2.2693898497202887, 3.9240609125392]\nvar (3): [2.461617864622651, 0.17784017241318095]\n\nmean (4): [2.301476335144215, 3.8740199830675355]\nvar (4): [2.53136226603993, 0.13079227312275157]\n\n"
]
},
{
"output_type": "display_data",
"data": {
2021-01-01 18:53:11 +00:00
"text/plain": "<Figure size 1200x800 with 1 Axes>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\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\">\r\n <metadata>\r\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#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-01-01T18:37:16.824703</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.3.3, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 280.8 \r\nL 424.8 280.8 \r\nL 424.8 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 43.78125 243.24375 \r\nL 417.6 243.24375 \r\nL 417.6 22.318125 \r\nL 43.78125 22.318125 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g id=\"matplotlib.axis_1\">\r\n <g id=\"xtick_1\">\r\n <g id=\"line2d_1\">\r\n <path clip-path=\"url(#pb586d0342f)\" d=\"M 60.773011 243.24375 \r\nL 60.773011 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_2\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"m97cbe78986\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"60.773011\" xlink:href=\"#m97cbe78986\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- 4 -->\r\n <g transform=\"translate(53.401918 257.842187)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 10.59375 35.5 \r\nL 73.1875 35.5 \r\nL 73.1875 27.203125 \r\nL 10.59375 27.203125 \r\nz\r\n\" id=\"DejaVuSans-8722\"/>\r\n <path d=\"M 37.796875 64.3125 \r\nL 12.890625 25.390625 \r\nL 37.796875 25.390625 \r\nz\r\nM 35.203125 72.90625 \r\nL 47.609375 72.90625 \r\nL 47.609375 25.390625 \r\nL 58.015625 25.390625 \r\nL 58.015625 17.1875 \r\nL 47.609375 17.1875 \r\nL 47.609375 0 \r\nL 37.796875 0 \r\nL 37.796875 17.1875 \r\nL 4.890625 17.1875 \r\nL 4.890625 26.703125 \r\nz\r\n\" id=\"DejaVuSans-52\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-8722\"/>\r\n <use x=\"83.789062\" xlink:href=\"#DejaVuSans-52\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_2\">\r\n <g id=\"line2d_3\">\r\n <path clip-path=\"url(#pb586d0342f)\" d=\"M 117.412216 243.24375 \r\nL 117.412216 22.318125 \r\n\" style=\"fill:none;stroke:#b0b0b0;stroke-dasharray:2.96,1.28;stroke-dashoffset:0;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"line2d_4\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"117.412216\" xlink:href=\"#m97cbe78986\" y=\"243.24375\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_2\">\r\n <!-- 2 -->\r\n <g transform=\"translate(110.041122 257.842187)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ 13.765625 71.78125 18.9375 73 \r\nQ 24.125 74.2187
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJsAAAMMCAYAAAD0M6ZoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAB7CAAAewgFu0HU+AAEAAElEQVR4nOzdd5gb1dn38e/Zvq7YuIA72KYZTDMdY1MNAQxJCC0QTElIJwHyPEl4QyAJCSkQIIHQgg2B8FASWiCJabapxqYYbINxr7jhXraf948jrUbaGZVdaaRd/T7XpWtHozMzRzu3RtKtU4y1FhERERERERERkWwoyXcFRERERERERESk41CySUREREREREREskbJJhERERERERERyRolm0REREREREREJGuUbBIRERERERERkaxRsklERERERERERLJGySYREREREREREckaJZtERERERERERCRrlGwSEREREREREZGsUbJJRERERERERESyRskmERERERERERHJGiWbREREREREREQka5RsEhERERERERGRrFGySUREREREREREskbJJhERERERERERyRolm0REREREREREJGuUbBIRERERERERkaxRsklERERERERERLJGySYREREREREREckaJZtERIqEMcZGb/muSxBjzARPPSdlcb8pn7sxZoqn3NiAMjd4ytyQrfpJx2GMGeKJkSX5ro+0L7rGSC4ZYyZ54mtCvusjIh2bkk0iIj4SEg9+t63GmCXGmGeMMd8zxnTPd51FWiNFrNcYY9YYY+YbY143xvwpkhAclO96S3gSksCZ3Cblu+7SPkTeT5UEERHpQJRsEhFpnS7AYGA8cAewzBjztfxWSQqBMWas50vTlHzXp40qgT7AMOAY4LvARGCxMeZ5Y8y4fFauPUv4cj0k3/WR7FMrpezqYNfWNlMrJREpdGX5roCISDswA3jHc98AuwCHAcMj67oBDxpjqqy194ZbPZGsSYz1EqA7Lt5H4BKs0fVfAL4Qab3yfWvt1vCqKXm0FXgozbJv57IiIiIiUriUbBIRSe0Fa+0Nfg8YY76Ia+kR7UZ3hzHmBWvtirAqJ6lZa02W9nMDcEM29lWgAmMdwBizG3Ax8H1gQGT1BGCEMWaMtXZnzmtY4Ky1S3AJ6Y5qg7X2u/muREdVBNcYySNr7QTcNVtEJOfUjU5EpA2s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
2020-12-31 19:30:39 +00:00
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"iterations = 5\n",
"\n",
"mean = [state1.mean, state2.mean]\n",
"var = [state1.variance, state2.variance]\n",
"\n",
"plt.plot(x, [gaussian(i, mean[0], sqrt(var[0])) for i in x], '--', c='r', linewidth=1.0)\n",
"plt.plot(x, [gaussian(i, mean[1], sqrt(var[1])) for i in x], '--', c='b', linewidth=1.0)\n",
"\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-01 18:53:11 +00:00
" model = MarkovModel(states=[State(mean[0], var[0], state1.entry, state1.exit), \n",
" State(mean[1], var[1], state2.entry, state2.exit)], \n",
2020-12-31 19:30:39 +00:00
" observations=observations, \n",
" state_transitions=state_transition)\n",
" model.populate()\n",
"\n",
" mean = model.reestimated_mean()\n",
" var = model.reestimated_variance()\n",
"\n",
" print(f\"mean ({i}): \", mean)\n",
" print(f\"var ({i}): \", var)\n",
" print()\n",
"\n",
" state_1_y = [gaussian(i, mean[0], sqrt(var[0])) for i in x]\n",
" state_2_y = [gaussian(i, mean[1], sqrt(var[1])) for i in x]\n",
"\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-01 18:53:11 +00:00
" plt.plot(x, state_1_y, style, c='r', label=label1, linewidth=linewidth)\n",
" plt.plot(x, state_2_y, style, c='b', label=label2, linewidth=linewidth)\n",
2020-12-31 19:30:39 +00:00
"\n",
"plt.title(\"Probability Density Function Iterations\")\n",
"\n",
"plt.xlabel(x_label)\n",
"plt.ylabel(y_label)\n",
"plt.grid(linestyle=\"--\")\n",
2021-01-01 18:53:11 +00:00
"plt.legend()\n",
2020-12-31 19:30:39 +00:00
"\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 or True:\n",
" savefig(\"report/res/iterated-pdfs.png\")\n",
2020-12-31 19:30:39 +00:00
"plt.show()\n"
]
},
{
"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": [
"[[0.92 0.06]\n [0.04 0.93]]\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[0.8035064 , 0.18507025],\n",
" [0.26043109, 0.49589971]])"
]
},
"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",
"model.reestimated_state_transitions()"
]
2020-12-11 21:33:20 +00:00
}
]
}