马尔可夫链模型及简单Python实现

马尔科夫链在城市规划领域有广泛的运用,马尔科夫链是一个随机过程,其中每个状态的出现只依赖于前一个状态。我们可以使用一系列数学公式来描述它。

定义

考虑一个离散时间、离散状态空间的随机过程{Xn},其中n是非负整数,表示时间,而Xn是在时间n的状态。如果对于所有的 n、所有的状态i,j,k,... 和所有的时间序列s1,s2,s3...sn-1,以下条件满足:

那这个随机过程是一个马尔科夫链。

转移概率

上面的条件可以用转移概率矩阵 P 来描述。矩阵的每一个元素 Pij表示从状态 i 转移到状态 j 的概率

注意,转移概率矩阵的每一行的和为 1 ,这是因为它描述了从一个特定状态转移到其他所有可能状态的概率。

n-step 转移概率

考虑从状态 i 转移到状态 j 经过 n 步的概率。这可以通过计算转移概率矩阵的 n 次方来得到:

其中 P(n) 是 P 的第 n 次幂。

稳态分布

对于一些马尔科夫链,当 n 趋近于无穷大时,n-step 转移概率会收敛到一个稳定的分布。如果存在这样的分布 π ,那么对于所有的状态 i 和 j ,有:

且满足 πP = π ,其中 π 是一个行向量。这是马尔科夫链的基本概念。在实际应用中,还需要考虑诸如可达性、周期性、遍历性等。

简单Python实现

基于马尔科夫链模型预测天气,假设我们只考虑两种天气:晴天(S)和雨天(R)。我们根据过去的数据得到以下转移概率: ①当前是晴天时,明天仍然是晴天的概率是 0.9;明 天 变 成 雨 天 的 概 率 是 0.1 。②当前是雨天时,明天仍然是雨天的概率是 0.5 ;明天变成晴天的概率是 0.5 。基于这些数据,我们可以建立转移概率矩阵 P :

下面是简单的代码实现:

import numpy as np
def markov_predict(start_state, days): #定义初始状态和预测日期
  # 建立概率转移方程
  P = np.array([[0.9, 0.1],
  [0.5, 0.5]])
  # 状态映射
  states = ["Sunny", "Rainy"]
  current_state_id = states.index(start_state)
  #状态列表
  forecast = [start_state]
  for _ in range(days-1): # 从当前开始的5天天气
    next_state_id = np.random.choice([0,1],p=P[current_state_id]) #"p=P[current_state_idx]"是整个算法的核心
    forecast.append(states[next_state_id])
    current_state_id = next_state_id
    return forecast

到这里模型已经构建好了,接下来预测:

# 预测
for _ in range(5):
  print(markov_predict("Rainy",5)) # 初始状态为雨天,预测未来五天的状态

可以看到我重复进行了五次预测,返回的结果如下:

['Rainy', 'Sunny', 'Sunny', 'Sunny', 'Sunny']
['Rainy', 'Rainy', 'Rainy', 'Sunny', 'Sunny']
['Rainy', 'Sunny', 'Sunny', 'Sunny', 'Sunny']
['Rainy', 'Rainy', 'Sunny', 'Sunny', 'Sunny']
['Rainy', 'Rainy', 'Rainy', 'Rainy', 'Sunny']

除了第一次和第三次的结果,其他几次都是不一样的,这是因为马尔可夫链模型具有随机性。

到这里就是马尔科夫链模型的基本概念全部内容。马尔科夫链在城市规划领域中人口土地预测、区域趋同性等方面有广泛应用,还衍生出空间马尔科夫链模型(主要是引入了空间权重矩阵)。


城市规划拓展阅读:

[1] 陈培阳,朱喜钢.中国区域经济趋同:基于县级尺度的空间马尔可夫链分析[J].地理科学,2013,33(11):13021308.

[2] 蒲英霞,马荣华,葛莹等.基于空间马尔可夫链的江苏区域趋同时空演变[J].地理学报,2005(05):817-826.

 

 

 

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇