现实世界中有一类问题具有明显的时序性,比如路口红绿灯、连续几天的天气变化,我们说话的上下文。马尔可夫,俄国数学家,见图12-1,提出著名的马尔可夫链。隐式马尔可夫模型(Hidden Markov Model,HMM)的基础假设是,一个连续的时间序列事件,它的状态由且仅由它前面的N个事件决定,对应的时间序列可以成为N阶马尔可夫链。
图12-1 马尔可夫
假设今天是否有雾霾只由前天和昨天决定,于是就构成了一个二阶马尔可夫链,见图12-2。若昨天和前天都是晴天,那么今天是晴天的概率就是90%。
稍微再复杂点,假设你想知道2000千米外一个城市的雾霾情况,但是你没法直接去当地看到空气情况,手头只有当地风力情况,也就是说空气状态是隐藏的,风力情况是可观察的,需要通过可观察序列推测隐藏序列,如图12-3所示。由于风力确实对雾霾情况有较大影响,甚至可以假设风力大的情况下90%概率是晴天,所以通过样本学习,确实可以达到从前观察序列推测隐藏序列的效果,这就是隐式马尔可夫模型。
图12-2 天气转化
图12-3 结合风力判断雾霾情况
HMMLearn是Python下的一个HMM实现,是从Scikit-Learn独立出来的一个项目,依赖环境如下:
·Python>=2.6;
·NumPy(tested to work with>=1.9.3);
·SciPy(tested to work with>=0.16.0);
·Scikit-Learn>=0.16。
安装命令如下:
pip install -U --user hmmlearn