python做马尔科夫模型预测法_用Python实现马尔可夫链蒙特卡罗

摘要: 本文通过用Python中的马尔可夫链蒙特卡罗实现了睡眠模型项目,并教会如何使用MCMC。

在过去的几个月里,我在数据科学领域里遇到一个术语:马尔可夫链蒙特卡罗(MCMC)。在博客或文章里,每次看到这个语,我都会摇摇头,有几次我试着学习MCMC和贝叶斯推理,但每次一开始,就很快放弃了。我学习新技术的方式都是把它应用到一个实际问题上。

通过使用一些数据和一本应用实战的书(Bayesian Methods for Hackers),我终于通过一个实际项目弄懂了MCMC。像往常一样,当把这些技术概念应用到实际问题中时,理解它们要比阅读书上的抽象概念更容易。本文通过介绍Python中的MCMC实现过程,最终教会了我使用这个强大的建模和分析工具。

本项目的完整代码和相关数据在GitHub上可以找到。本文重点讨论了应用程序和结果,涵盖了很多有深度的内容。

介绍

实际生活中的数据永远不是完美的,但我们仍然可以通过正确的模型从噪音数据中提取有价值的信息。

本项目的目的是使用睡眠数据创建一个模型,该模型指定了睡眠的后验概率作为一个时间函数。由于时间是一个连续变量,因为指定整个后验分布是比较困难的,所以我们转向接近于分布的方法-MCMC。

概率分布的选择

在使用MCMC之前,我们需要确定适当的函数来给睡眠的后验概率分布建模。最简单方法是通过可视化的方式进行数据检查,入睡的时间函数的观察结果如下图所示:

在图上,每个数据节点被标记为一个点,点的强度表明了在指定时间的观测次数。我的表只记录入睡的时间,所以为了扩大数据量,我在时间点两边的每一分钟都加上了节点。如果手表记录我在晚上10:05分睡着了,那么之前的每分钟都被表示为0(清醒),之后的每分钟都表示为1(入睡)。这将会把大约60个晚上的观测扩展到11340个数据节点。

可以看到,我总是于晚上10:00之后入睡,我们想要创建一个获取从醒到睡的概率转换的模型。当模型在一个精确的时间从清醒(0)到入睡(1)转换的时候,我们可以给模型用一个简单的阶梯函数,因为我不会每晚都在同一时间入睡,所以我们需要一个函数来把转换过程建模为渐变过程。给定数据的最佳选择是一个在0和1之间平稳转换的逻辑函数。以下是入睡概率作为时间函数的逻辑方程。

β(beta)和α(alpha)是我们在MCMC过程中必须学习的模型参数。如下所示具有不同参数的逻辑函数:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值