当前位置:   article > 正文

马尔可夫链的演示Python_python马尔可夫链进行老人失能率的预测

python马尔可夫链进行老人失能率的预测
  1. # -*- coding: utf-8 -*-
  2. import numpy as np
  3. from random import random
  4. #转移矩阵
  5. trans_matrix = np.array(
  6. [[0.5 , 0.1 , 0.25 , 0.05],
  7. [0.15 , 0.5 , 0.2 , 0.05],
  8. [0.1 , 0.2 , 0.5 , 0.4],
  9. [0.25 , 0.2 , 0.05 , 0.5 ]])
  10. #数据
  11. dt = np.array([[0] , [1] , [0] , [0]])
  12. #进行转换
  13. res = np.dot(trans_matrix,dt)
  14. res = np.dot(trans_matrix , res) #50次
  15. '''
  16. #执行50次后,基本稳定
  17. array([[ 0.22720144],
  18. [ 0.21947408],
  19. [ 0.31993815],
  20. [ 0.23338634]])
  21. '''
  22. #真实模拟
  23. #状态计数器, 四个数分别代表停留在此状态的次数
  24. cnt_list = [0 , 0 , 0 , 0] # 0 1 2 3
  25. #初始状态 0 1 2 3 随意
  26. origin = 2
  27. #当前状态设为初始状态
  28. now = origin
  29. cnt = 0
  30. while True :
  31. #进行1000000次状态转移
  32. cnt += 1
  33. if cnt > 1000000 :
  34. break
  35. #抽取一个随机数(0到1 之间),我们根据其所在区间来确定下一个状态
  36. rand_num = random()
  37. #计算下一个状态
  38. next_status = 0
  39. #用来累加概率
  40. num_accu = 0.0
  41. for status_to_be in range(0 , 4) :
  42. num_accu += trans_matrix[status_to_be][now]
  43. #如果累加概率大于上面的随机数
  44. if rand_num <= num_accu :
  45. #选定为下一个状态
  46. next_status = status_to_be
  47. break
  48. #状态转移
  49. now = next_status
  50. #此状态计算加一
  51. cnt_list[now] += 1


#状态转移的计数结果应该与上面的概率是接近的,这就是马尔可夫链的含义

#状态分布概率只与转移矩阵有关,与初始状态无关

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/819095
推荐阅读
相关标签
  

闽ICP备14008679号