HMM(隐马尔可夫)简介

通过一个简单的例子来介绍马尔可夫链:
假设天气有三种状态(晴天、多云、雨天),三种状态之间的转换关系如图:
在这里插入图片描述

我们想要通过今天的天气来推测明天的天气和后天的天气,可以直接根据状态转换关系来推测,这种可以直接观测到的状态转换(晴天—>雨天—>多云)就称作马尔可夫链。

如果我们不知道今天的天气只知道水藻的干湿状态,只通过水藻的状态来推测天气:
在这里插入图片描述

这种想推测的东西不能直接观测到,而是根据另一种我们可见的这种观测的东西去推算我们想知道的信息就需要用到隐马尔可夫模型。

隐马尔可夫模型(HMM):是结构最简单的动态贝叶斯网络,是一种尤其著名的有向图结构,主要用于时序数据的建模,在语音识别、自然语言处理等领域有广泛应用,在分词算法中,隐马尔可夫经常用作能够发现新词的算法,通过海量的数据学习,能够将人名、地名、互联网上的新词等一一识别出来,具有广泛的应用场景。

HMM五元组:
观测序列——O(上图中水藻的状态)
状态序列——I(上图中的天气序列)
初始状态概率——π
状态转移矩阵——A
观测概率矩阵——B(也叫发射概率)

HMM三要素:
初始状态概率——π
状态转移矩阵——A
观测概率矩阵——B

两个基本假设: 1,齐次马尔科夫性假设:在t时刻的状态只依赖于t-1时刻的状态 2,观测独立性假设:在任一时刻的观测只依赖于该时刻的状态

下面通过一个简单的例子来介绍隐马尔可夫模型的五元组和概率计算:
在这里插入图片描述
这里有三个骰子,第一个骰子6个面,每个面(1,2,3,4,5,6)出现的概率是1/6。
第二个骰子是个四面体(称这个骰子为D4),每个面(1,2,3,4)出现的概率是1/4。
第三个骰子有八个面(称这个骰子为D8),每个面(1,2,3,4,5,6,7,8)出现的概率是1/8。

把这三个骰子放入一个黑盒子中,有放回的抽取一个骰子,然后用投掷该骰子(假设并不知道该骰子是哪一个),记录投掷的数字,然后通过投掷的数字来推测我们抽取的骰子的顺序。
例如我们得到一个序列值:1 6 3 5 2 7 3 5 2 4。
在这里插入图片描述

这里就包含了两种状态:
1、隐含的状态,抽取的是哪一个骰子;
2、可观测的状态,使用该骰子投出的数值。

我们假设每个状态间转移的概率(抽取骰子的概率,这里为1/3)是固定的(即为不因观测值的数值而改变)。可以得到状态转移矩阵。
在这里插入图片描述
那么我们得到观测值序列1 6 3 5 2(这里只取1前五个)出现概率的计算公式:
在这里插入图片描述
在这里插入图片描述
在该例子中:
状态集合Q={D4,D6,D8} N=3
观测集合V={1,2,3,4,5,6,7,8} M=8
观测序列O={1,6,3,5,2,7,3,5,2,4}(我们所记录的数字)
初始概率分布π={1/3,1/3,1/3} (第一次抽取到的骰子属于{D4,D6,D8}这三种状态的概率)
状态转移概率分布A:(一个元素全为1/3的3x3矩阵)
观测概率分布B:在这里插入图片描述

计算概率的方法就是,初始状态概率分布、观测概率分布、转移概率矩阵的乘积。
当某个状态序列的概率值最大,则该状态序列即为,出现该观测值的情况下,最可能出现的状态序列。

  • 33
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
嗯,马尔可夫模型(Hidden Markov Model)是一种常用的序列建模方法,可以用于股票价格的预测。下面我将提供一个基于Python的完整源码和数据的例子,来解释如何使用马尔可夫模型进行股票价格预测。 首先,我们需要准备一些数据。假设我们手头有股票A的每日收盘价数据,这些数据可以保存在一个以日期为索引的Pandas DataFrame中。 以下是数据的示例,其中Date表示日期,Close表示当天的收盘价: ```py import pandas as pd data = {'Date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05'], 'Close': [100, 110, 115, 105, 95]} df = pd.DataFrame(data) df['Date'] = pd.to_datetime(df['Date']) df.set_index('Date', inplace=True) ``` 接下来,我们需要使用Python的hmmlearn库来构建马尔可夫模型并进行预测。如果尚未安装该库,可以使用以下命令进行安装: ```py pip install hmmlearn ``` 以下是使用马尔可夫模型进行股票价格预测的代码示例: ```py from hmmlearn import hmm # 创建马尔可夫模型对象 model = hmm.GaussianHMM(n_components=2, covariance_type="diag") # 拟合模型 model.fit(df[['Close']]) # 预测概率和状态序列 prob, states = model.decode(df[['Close']]) # 输出预测结果 df['State'] = states print(df) ``` 上述代码中,我们首先创建一个GaussianHMM对象,该对象的`n_components`参数指定了两个藏状态(我们假设股票价格会呈现上涨和下跌两种状态),`covariance_type`参数指定了协方差矩阵的类型。 然后,我们使用拟合方法(fit)来训练模型,输入的是收盘价数据。 接着,我们使用decode方法来计算每个观测值对应的藏状态,并将其保存在DataFrame中的State列中。 最后,打印输出整个DataFrame,即可查看预测结果。 使用马尔可夫模型进行股票价格预测是一个相对简化的方法,实际情况可能更加复杂。然而,这个例子可以帮助你了解如何使用马尔可夫模型进行股票价格预测,并且提供一个基于Python的完整源码和数据的参考。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值