Skip to content

Instantly share code, notes, and snippets.

@tanemaki
Last active April 19, 2024 11:55
Show Gist options
  • Select an option

  • Save tanemaki/ef556268f737e0df5c6b78462d2f09bd to your computer and use it in GitHub Desktop.

Select an option

Save tanemaki/ef556268f737e0df5c6b78462d2f09bd to your computer and use it in GitHub Desktop.
playing_with_2nd_order_markov_chain.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"authorship_tag": "ABX9TyNx2fegprGGVxTTuvNVX10D",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/tanemaki/ef556268f737e0df5c6b78462d2f09bd/playing_with_2nd_order_markov_chain.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"# 目的\n",
"\n",
"2次マルコフ連鎖のkステップ分布を求める方法を探る。\n",
"\n",
"## 参考資料\n",
"\n",
"QC4U2 Lecture 5で大関先生が使用したJupyter Notebook: https://gist.github.com/mohzeki222/01e9708eebfba6c4ce6e0846d3bed4ac"
],
"metadata": {
"id": "hPI92wSJTqi9"
}
},
{
"cell_type": "code",
"source": [
"import numpy as np # マルコフ連鎖の性質をみたいだけなので普通のnumpyを用いる\n",
"import matplotlib.pyplot as plt"
],
"metadata": {
"id": "r8BX-u2tToLf"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "GMgIM6vVTb_y"
},
"outputs": [],
"source": [
"n = 2 # マルコフ連鎖の次数(オーダー)\n",
"par = 2 # 各時刻で取り得る状態は0と1の二状態とする"
]
},
{
"cell_type": "code",
"source": [
"transition_tensor = np.zeros([par] * (n + 1)) # n=2であればt-2, t-1, t"
],
"metadata": {
"id": "762mPQ5AV4_X"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# 0 -> 0 -> 1 -> 1 -> 0 -> 0 -> 1 -> 1 -> 0 -> 0 -> 1 -> 1 -> ...\n",
"transition_tensor[0][0] = np.array([0.0, 1.0])\n",
"transition_tensor[0][1] = np.array([0.0, 1.0])\n",
"transition_tensor[1][0] = np.array([1.0, 0.0])\n",
"transition_tensor[1][1] = np.array([1.0, 0.0])"
],
"metadata": {
"id": "Tya6hMQVWv-U"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"transition_tensor"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "5JMlbnATV4kC",
"outputId": "95c5cb41-d02a-412a-a889-0bb72d791340"
},
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[[0., 1.],\n",
" [0., 1.]],\n",
"\n",
" [[1., 0.],\n",
" [1., 0.]]])"
]
},
"metadata": {},
"execution_count": 5
}
]
},
{
"cell_type": "markdown",
"source": [
"遷移テンソルとして有効かどうか確認する。テンソルの要素はあくまで確率なので最後の次元で足し合わせると必ず1.0になることを確認。\n",
"\n",
"---\n",
"\n"
],
"metadata": {
"id": "sUOqXAWMXxee"
}
},
{
"cell_type": "code",
"source": [
"assert np.allclose(transition_tensor.sum(axis=-1), 1.0)"
],
"metadata": {
"id": "qYFcP2j2XUeU"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"二次マルコフであれば状態 $(x_{t-2}, x_{t-1})$ から状態 $(x_{t-1}, x_{t}) $への遷移行列を考える。\n",
"正方行列とするために1時刻分(=次数-1)の重なりがある点に注意。\n",
"\n",
"三次マルコフであれば状態 $(x_{t-3}, x_{t-2}, x_{t-1})$ から状態 $(x_{t-2}, x_{t-1}, x_{t})$ への遷移行列を考える。\n",
"正方行列とするために2時刻分(=次数-1)の重なりがある点に注意。\n",
"\n",
"コードとの整合性を保つため、状態を表すtupleは左側が過去、右側が未来になるように取った。\n"
],
"metadata": {
"id": "9pnxJA38YyYb"
}
},
{
"cell_type": "code",
"source": [
"square_transition_matrix = np.zeros([par ** n, par ** n])"
],
"metadata": {
"id": "ZaHzyqJJTnDF"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"import itertools"
],
"metadata": {
"id": "hzUiL1snVjYp"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# インデックスを計算するときに必要となるので用意。\n",
"# 可視化したときにみやすくなるように、base_vectorは昇順になるように作っておく。例えばn=3の時は、base_vector=[2**0, 2**1, 2**2]とする\n",
"base_vector = par ** np.arange(n)\n",
"\n",
"for index_vector in itertools.product([0, 1], repeat=n + 1):\n",
"\n",
" # 速く切り替わるインデックスを左側に持ってくる\n",
" index_vector = index_vector[::-1]\n",
"\n",
" # 重なりを考慮した上でインデックスベクトルを作成\n",
" from_index_vector = index_vector[:n]\n",
" to_index_vector = index_vector[-n:]\n",
"\n",
" # square_transition_matrixのインデックスに変換\n",
" from_index = base_vector @ from_index_vector\n",
" to_index = base_vector @ to_index_vector\n",
"\n",
" square_transition_matrix[from_index, to_index] = transition_tensor[index_vector] # tupleをインデックスとして渡すとちゃんとテンソルの要素を取り出してくれる ^^\n",
"\n",
"square_transition_matrix = np.matrix(square_transition_matrix)"
],
"metadata": {
"id": "dq7Mh0NJVp2h"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"index_vectors = [index_vector[::-1] for index_vector in itertools.product([0, 1], repeat=n)] # 速く切り替わるインデックスを左側に持ってくる\n",
"index_vectors"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "gap4EunEqCJE",
"outputId": "60208a7e-45b1-4ab8-ec51-e83936112923"
},
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[(0, 0), (1, 0), (0, 1), (1, 1)]"
]
},
"metadata": {},
"execution_count": 33
}
]
},
{
"cell_type": "code",
"source": [
"square_transition_matrix"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ETSClLW8bWVR",
"outputId": "9ac981ff-3b4e-4141-e565-af66d20bc7b6"
},
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"matrix([[0., 0., 1., 0.],\n",
" [1., 0., 0., 0.],\n",
" [0., 0., 0., 1.],\n",
" [0., 1., 0., 0.]])"
]
},
"metadata": {},
"execution_count": 34
}
]
},
{
"cell_type": "code",
"source": [
"figure, ax = plt.subplots(figsize=(6, 6))\n",
"ax.imshow(square_transition_matrix, cmap='gray')\n",
"ax.set_xticks(np.arange(len(index_vectors)), index_vectors)\n",
"ax.set_xlabel(r'To state: $(x_{t-1}, x_{t})$')\n",
"ax.set_yticks(np.arange(len(index_vectors)), index_vectors)\n",
"ax.set_ylabel(r'From state: $(x_{t-2}, x_{t-1})$')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 562
},
"id": "dH_jjnB5nCMa",
"outputId": "ae3ba110-0547-488b-c9b4-1355e9bc38bf"
},
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0, 0.5, 'From state: $(x_{t-2}, x_{t-1})$')"
]
},
"metadata": {},
"execution_count": 35
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 600x600 with 1 Axes>"
],
"image/png": "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UUBJS0vThg0btGLFCm3dulWrVq3S1KlT9dvf/tbt+gAAQARy9BXPc889p5tvvtn/+Morr1RBQYGuvvpqlZeXa9GiRa4VCAAAIo+jy4xbU15ernHjxmnnzp1uDWk1LjPuXLjMGAA6hquXGe/bt+9710lNTdWmTZskfXPDNgAAACeCDigXX3yx7r77br333nutruPz+bRy5UplZGRo1apVrhQIAAAiT9DnoJSWlmru3Lm64oorFBsbq+zsbKWkpCg2NlZHjhxRaWmpduzYoYsuukjz58/nhm0AAMCxNp+DUldXpzVr1mjjxo2qqKhQXV2dEhMTlZWVpdzcXGVkZLRXrdbhHJTOhXNQAKBjtNtv8eAbBJTOhYACAB2j3X6LBwAAoD05vtU9/i4hISHcJQBAp8VEf+dx6puHYDCDAgAArENAAQAA1iGgAAAA6xBQAACAdRwHlKioKF144YUBfYMGDdJpp50WclEAACCyOb6K57nnnlPPnj0D+ubNmyefzxdqTQAAIMJxo7YQtOVyKQCAM3xMdR5tucEp56AAAADrOA4ohYWFuuWWWzR8+HDt379fkvTSSy9p48aNrhUHAAAik6OAsmrVKuXm5iouLk7btm1TfX29pG/urf+b3/zG1QIBAEDkcRRQnnjiCS1ZskTPPvusoqOj/f2XXnqpPvjgA9eKAwAAkclRQPnkk080cuTIZv0JCQn66quvQq0JAABEOEcBpV+/ftqzZ0+z/o0bN+rss88OuSgAABDZHAWUu+66SzNmzNDmzZvl8Xj0+eef649//KNmzpype+65x+0aAQBAhHF0o7aHH35YTU1NGj16tGprazVy5Eh5vV7NnDlT9957r9s1AgCACOPoRm379u1T//79dfLkSe3Zs0fHjh1Tenq6unXrpsrKSp155pntUat1uFEbALQ/btTWebTlRm2OZlDS0tJ04MABJScnKz093d9/+PBhpaWlqbGx0cmwAAAAkhyeg9Jamj127JhiY2NDKggAAKBNMyj333+/JMnj8ejRRx9V165d/csaGxu1efNmDR061NUCAQBA5GlTQNm2bZukb2ZQtm/frpiYGP+ymJgYDRkyRDNnznS3QgAAEHHaFFAKCgokSbfffrt+97vffe8JLgAAAE44uooH3+AqHgBof3xMdR7tfhXPKaWlpdq3b58aGhoC+n/yk5+EMiwAAIhw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/rojygTaHQEFiBAtBZRjx46Z6Oho88c//tHf19DQYFJSUsz8+fNbHGfr1q1GkikvL29x+ahRo8yMGTO+t54vvvjCSDLbt29vcbuvv/7adO3a1WzatClguylTppiJEyf6H//5z382559//nfua/z48eaOO+5ocdlrr71mvF6veeKJJ0yvXr1MSUmJf9mnn35q/vd///d7n0tLrr32WtOzZ09zww03tHlbJzV9+OGH33lcgB8avuIBItinn36qEydO6NJLL/X3RUdHKycnRzt37mxxmyFDhmj06NHKzMzUjTfeqGeffVZHjhz53n3t3r1bEydO1Nlnn634+Hj/yar79u1rcf09e/aotrZWV1xxhbp37+5vL774ov+rIUm67rrr9PHHH3/nvuvq6hQbG9visquvvlrp6en61a9+pdWrV+vCCy/0L3vjjTdUWlr6vc+tJTNmzNCLL77oaFsnNcXFxUn65nwboDPgJFkAbXLaaadp/fr12rRpk9atW6eFCxfq5z//uTZv3qy0tLRWt7vmmmt01lln6dlnn1VKSoqampqUkZGhhoaGFtc/duyYJGnNmjU644wzApZ5vd421ZyYmNhqiFq7dq0+/vhjNTY2qm/fvv7+d955R7/4xS/Up08fLV++XBs3blS3bt2C3ufll1+ut99+u011hlJTdXW1JCkpKcnRPgHbMIMCRLCBAwcqJiZG7777rr/vxIkTeu+995Sent7qdh6PR5deeqkef/xxbdu2TTExMVq9erUkKSYmRo2NjQHrHz58WJ988onmzJmj0aNHa9CgQc0Cw7e3S09Pl9fr1b59+3TOOecEtAEDBrTpeWZlZbU46/DBBx/opptu0tKlSzV69Gj94he/8C8bNWqUBg8erPXr12vbtm1tCiehcFpTSUmJ+vfvr8TExA6pE2hvzKAAEaxbt2665557NGvWLPXu3Vtnnnmm5s+fr9raWk2ZMqXFbTZv3qy33npLY8eOVXJysjZv3qwvvvhCgwYNkiSlpqZq8+bNKi8vV/fu3dW7d2/16tVLffr00TPPPKPTTz9d+/bt08MPPxwwbkvbzZw5U/fdd5+ampo0YsQI+Xw+vfvuu4qPj9ekSZMkSatXr9bs2bO/82ue3NxczZ49W0eOHFGvXr0kSeXl5crLy9Mjjzzi/+pp+PDh+uCDD3TRRRdJ+ubrp2/fN2Xo0KE6efJks32sW7dOKSkpwf3Dt8JpTZJUWFiosWPHhrR/wCrhPgkGQMdo7Sqeuro6c++995rExETj9XrNpZdearZs2dLqOKWlpSY3N9ckJSUZr9drzjvvPLNw4UL/8k8++cQMGzbMxMXFGUmmrKzMGGPM+vXrzaBBg4zX6zWDBw82b7/9tpFkVq9e3ep2TU1N5umnnzbnn3++iY6ONklJSSY3N9e88847Ac8rmD9lOTk5ZsmSJcYYYw4fPmzOP/98c/fddwesc9VVV5nc3FxjjDGVlZXm0ksv/d5xv0tBQUGLJ8m2VHMoNdXV1ZmEhARTVFQUUr2ATTzGGBPWhAQAHWDNmjWaNWuWSkpKFBX1/d9uv/vuu3r66ae1YsUKx/t8++239Z//+Z/N7t3y2GOP6Z133mnzOSqt1bR48WKtXr1a69atc1wrYBvOQQEQEfLy8jR16lTt378/qPUzMjK0d+9eZWZmOrqSZ8yYMbrxxhuVn5+v/v37q6ioyL/sjTfe0Pz589s8Zms1RUdHa+HChW0eD7AZMygAAMA6zKAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDr/B00Hq6gxsN5IAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"n_figures = 5\n",
"figure, axs = plt.subplots(1, n_figures, figsize=(12, 6), sharey=True)\n",
"\n",
"for figure_index in range(n_figures):\n",
"\n",
" k = figure_index + 1 # 遷移回数\n",
"\n",
" square_k_step_transition_matrix = square_transition_matrix ** k\n",
"\n",
" ax = axs[figure_index]\n",
"\n",
" ax.imshow(square_k_step_transition_matrix, cmap='gray')\n",
" ax.set_xticks(np.arange(len(index_vectors)), index_vectors)\n",
" ax.set_xlabel(r'To state: $(x_{' + str(k) + ' }, x_{' +str(k + 1) + '})$')\n",
" ax.set_yticks(np.arange(len(index_vectors)), index_vectors)\n",
" ax.set_ylabel(r'From state: $(x_{0}, x_{1})$')\n",
" ax.set_title(f'k = {k}')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 266
},
"id": "YkdWL6G9eLiX",
"outputId": "325c6cc9-cce1-4f5d-8b12-30a47c9efd49"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1200x600 with 5 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"base_vector"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "tRdrol5Wes3I",
"outputId": "4dd75e35-ca6e-4770-a553-8ac639ef250c"
},
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([1, 2])"
]
},
"metadata": {},
"execution_count": 14
}
]
},
{
"cell_type": "code",
"source": [
"# 正方遷移行列から、通常の非正方遷移行列に変換する。\n",
"\n",
"# 最終状態としてまとめるインデックスを保持する辞書を初期化\n",
"marginal_map = {final_state_index: [] for final_state_index in range(par)}\n",
"\n",
"for to_index_vector in itertools.product([0, 1], repeat=n):\n",
" final_state_index = to_index_vector[-1] # 最終状態のインデックス\n",
" marginal_map[final_state_index].append(to_index_vector @ base_vector) # to_index_vector @ base_vectorは正方行列の列インデックスに対応\n",
"\n",
"k_step_transition_matrix = np.zeros([par ** n, par])\n",
"for column_index in range(par):\n",
" marging_indices = marginal_map[column_index]\n",
" k_step_transition_matrix[:, column_index] = square_transition_matrix[:, marging_indices].sum(axis=1)"
],
"metadata": {
"id": "xGCoCvvEgNcj"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"k_step_transition_matrix"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "4WCq5VU3spoQ",
"outputId": "aa6534a9-4fc3-41e5-eced-d14d38230fc4"
},
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[0., 1.],\n",
" [1., 0.],\n",
" [0., 1.],\n",
" [1., 0.]])"
]
},
"metadata": {},
"execution_count": 16
}
]
},
{
"cell_type": "code",
"source": [
"figure, ax = plt.subplots()\n",
"ax.imshow(k_step_transition_matrix, cmap='gray')\n",
"ax.set_xticks(np.arange(par))\n",
"ax.set_xlabel(r'To state: $x_{t}$')\n",
"ax.set_yticks(np.arange(len(index_vectors)), index_vectors)\n",
"ax.set_ylabel(r'From state: $(x_{t-2}, x_{t-1})$')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 469
},
"id": "BX5qPlM2sSPP",
"outputId": "139da0ef-f87d-4d8c-a3b7-918763d1dee6"
},
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0, 0.5, 'From state: $(x_{t-2}, x_{t-1})$')"
]
},
"metadata": {},
"execution_count": 17
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "48UqSvFom0Sw"
},
"execution_count": null,
"outputs": []
}
]
}
@tanemaki
Copy link
Author

n次マルコフの非正方遷移行列を正方遷移行列に変換した上で、行列積を使うアプローチを実施した。

スクリーンショット 2024-04-19 18 50 36

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment