本文不讲HMM模型理论知识,仅仅结合HMM实践,和HMM论文(作者自己写的),简述HMM实践过程。并分享Matlab代码。 (1个月的劳作,有偿分享源代码,并且提供安装运行服务)
1. 摘要
本文介绍基于隐马尔科夫模型(Hidden Markov Model, HMM)、Viterbi算法来解决地图匹配(Map-Matching)的算法过程,并提供Matlab源代码和相关的测试数据。
本文所用数据和模型,均来自于文章《Enhanced Map-Matching Algorithm with a Hidden
Markov Model for Mobile Phone Positioning》2017年。
2. Map-Matching(MM)问题
地图匹配是绝大部分地图应用的基础性操作,是提高定位与地图交互质量的重要措施。它是将计算、测量出来的位置点,隐射到地图上(确切地说,是地图的道路上)。因为移动目标,如人行、车行、动物移动,往往在特定的行驶环境中。
通常情况下,地图的精度比定位结果的精度要高很多。因此,测量结果,映射至地图的过程,往往也是提高定位结果的一种方法。即便地图的精度与定位结果的精度,没有明显的优势。映射过程,也往往能够把地图信息传递给定位结果,从而带来其他方面的信息挖掘。
关于地图匹配的多种阶段性进步和相应的缺陷,在此简单总结:
1 基于垂直距离
是Map Matching 最早期方法,也是最简单直接的方法。
2 基于相交角度
结合垂直投影距离,MM结果,略有提高。
3. 基于拓扑关联,即前后路段是否向链接
这个思路,大大提升了MM的质量
4 基于轨迹整体形状特性的MM
这个方法好高端。记得Stuttgart大学出产了这个思路的文献,而且是这个思路的鼻祖(2009),讲到这个方法。动态图形,后面补充。
本篇论文提供的HMM for MM, 就是结合了HMM模型所体现的概率统计的思路,利用了拓扑属性、投影距离,和全局匹配的思路。总体上克服了MM过程中的多种约束:稀疏GPS点,大范围的地图匹配。
3. Hidden Markov Model (HMM)隐马尔可夫链模型
3.1 HMM简述
HMM隐马尔可夫链模型已经在应用在许多领域中,比较常见的应用有语音识别,文本分词、随机场模型等。更多的关于HMM隐马尔可夫链模型的内容,可以参考作者知乎专栏上的其他文章。
这里简单介绍下HMM, 讲到隐马尔可夫模型,肯定首先要知道马尔科夫链, 在给定当前知识或信息的情况下,只有当前的状态用来预测将来,过去(即当前以前的历史状态)对于预测将来(即当前以后的未来状态)是无关的。用公式表示即:
即Xn 的值则是在时间 n 的状态,也就是说在知道状态 Xn 的前提下,Xn+1 的状态只跟 Xn 有关,跟之前的 (n−1) 个状态是无关的.
举个例子就是,今天口袋里的钱的数量,主要跟昨天的口袋里的钱的数量有关,跟昨天之前的钱的数量无关,当然这是一个很强的假设前提。
注:这里所说的马尔科夫链是一阶马尔科夫链,当然可以扩展出去二阶马尔科夫,三阶马尔科夫等等,这里不做过多描述。
而所谓的隐马尔科夫模型就是上述马尔科夫的状态是不可见的(即: 真值永远不可知)