└── Hidden_Markov_Models_.ipynb /Hidden_Markov_Models_.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "view-in-github", 7 | "colab_type": "text" 8 | }, 9 | "source": [ 10 | "\"Open" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": null, 16 | "id": "7c609774", 17 | "metadata": { 18 | "id": "7c609774", 19 | "outputId": "567070fc-1362-4201-f4f2-51e3a2833cc9" 20 | }, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "Collecting hmmlearn\n", 27 | " Using cached hmmlearn-0.3.2-cp39-cp39-win_amd64.whl (124 kB)\n", 28 | "Requirement already satisfied: scipy>=0.19 in c:\\users\\lenovo\\anaconda3\\lib\\site-packages (from hmmlearn) (1.7.3)\n", 29 | "Requirement already satisfied: numpy>=1.10 in c:\\users\\lenovo\\anaconda3\\lib\\site-packages (from hmmlearn) (1.22.4)\n", 30 | "Requirement already satisfied: scikit-learn!=0.22.0,>=0.16 in c:\\users\\lenovo\\anaconda3\\lib\\site-packages (from hmmlearn) (1.0.2)\n", 31 | "Requirement already satisfied: joblib>=0.11 in c:\\users\\lenovo\\anaconda3\\lib\\site-packages (from scikit-learn!=0.22.0,>=0.16->hmmlearn) (1.1.0)\n", 32 | "Requirement already satisfied: threadpoolctl>=2.0.0 in c:\\users\\lenovo\\anaconda3\\lib\\site-packages (from scikit-learn!=0.22.0,>=0.16->hmmlearn) (2.2.0)\n", 33 | "Installing collected packages: hmmlearn\n", 34 | "Successfully installed hmmlearn-0.3.2\n", 35 | "Note: you may need to restart the kernel to use updated packages.\n" 36 | ] 37 | } 38 | ], 39 | "source": [ 40 | "pip install hmmlearn" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": null, 46 | "id": "cce5a3a3", 47 | "metadata": { 48 | "id": "cce5a3a3" 49 | }, 50 | "outputs": [], 51 | "source": [ 52 | "import numpy as np\n", 53 | "from hmmlearn import hmm" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": null, 59 | "id": "b7c8986a", 60 | "metadata": { 61 | "id": "b7c8986a", 62 | "outputId": "5d961e7d-ce57-4927-c2b8-c306f5e66a95" 63 | }, 64 | "outputs": [ 65 | { 66 | "name": "stderr", 67 | "output_type": "stream", 68 | "text": [ 69 | "Fitting a model with 7 free scalar parameters with only 4 data points will result in a degenerate solution.\n" 70 | ] 71 | }, 72 | { 73 | "data": { 74 | "text/plain": [ 75 | "GaussianHMM(n_components=2)" 76 | ] 77 | }, 78 | "execution_count": 5, 79 | "metadata": {}, 80 | "output_type": "execute_result" 81 | } 82 | ], 83 | "source": [ 84 | "# Define the number of hidden states\n", 85 | "n_components = 2\n", 86 | "\n", 87 | "# Create an instance of GaussianHMM\n", 88 | "model = hmm.GaussianHMM(n_components=n_components)\n", 89 | "\n", 90 | "# Fit the model to your data\n", 91 | "X = np.array([[1.0], [2.0], [-1.0], [0.5]])\n", 92 | "model.fit(X)\n" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": null, 98 | "id": "77aec14a", 99 | "metadata": { 100 | "id": "77aec14a" 101 | }, 102 | "outputs": [], 103 | "source": [ 104 | "# Predict the hidden states\n", 105 | "hidden_states = model.predict(X)\n", 106 | "\n", 107 | "# Generate samples from the model\n", 108 | "generated_samples, _ = model.sample(5)\n" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": null, 114 | "id": "2ac6f7dd", 115 | "metadata": { 116 | "id": "2ac6f7dd", 117 | "outputId": "8038e628-d289-4a3a-f46f-73a668ec5368" 118 | }, 119 | "outputs": [ 120 | { 121 | "data": { 122 | "image/png": "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\n", 123 | "text/plain": [ 124 | "
" 125 | ] 126 | }, 127 | "metadata": { 128 | "needs_background": "light" 129 | }, 130 | "output_type": "display_data" 131 | } 132 | ], 133 | "source": [ 134 | "import matplotlib.pyplot as plt\n", 135 | "plt.figure(figsize=(10, 6))\n", 136 | "plt.plot(X, '-o', label='Data')\n", 137 | "plt.scatter(np.arange(len(X)), X, c=hidden_states, cmap='rainbow', label='Hidden States')\n", 138 | "plt.xlabel('Time Step')\n", 139 | "plt.ylabel('Observation')\n", 140 | "plt.title('Hidden Markov Model')\n", 141 | "plt.legend()\n", 142 | "plt.show()" 143 | ] 144 | } 145 | ], 146 | "metadata": { 147 | "kernelspec": { 148 | "display_name": "Python 3 (ipykernel)", 149 | "language": "python", 150 | "name": "python3" 151 | }, 152 | "language_info": { 153 | "codemirror_mode": { 154 | "name": "ipython", 155 | "version": 3 156 | }, 157 | "file_extension": ".py", 158 | "mimetype": "text/x-python", 159 | "name": "python", 160 | "nbconvert_exporter": "python", 161 | "pygments_lexer": "ipython3", 162 | "version": "3.9.12" 163 | }, 164 | "colab": { 165 | "provenance": [], 166 | "include_colab_link": true 167 | } 168 | }, 169 | "nbformat": 4, 170 | "nbformat_minor": 5 171 | } --------------------------------------------------------------------------------