建模杂谈系列253 序列突变点的判定

news2024/12/27 4:25:35

说明

使用pycm3进行推断。

内容

1 环境搭建

使用conda创建对应的包环境,然后再通过jupyter运行

conda create -c conda-forge -n pymc_env "pymc>=5"
conda activate pymc_env

pip3 install  ipython -i https://mirrors.cloud.tencent.com/pypi/simple
pip3 install  jupyter -i https://mirrors.cloud.tencent.com/pypi/simple

nohup jupyter lab --allow-root --ip='*' --port=8888 > /dev/null 2>&1 &

嗯,我发现启动jupyter后竟然没有pymc,又重装了一下。最近阿里的镜像慢的不行了,腾讯快。
!pip3 install pymc -i https://mirrors.cloud.tencent.com/pypi/simple

2 实验

判定一个时间序列,产生突变点的位置

主要算是重启一下之前的记忆,确保新的环境搭建成功

%matplotlib inline
from IPython.core.pylabtools import figsize
import numpy as np
from matplotlib import pyplot as plt
import matplotlib as mpl
mpl.style.use("ggplot")
# figsize(11, 9)

figsize(12.5, 3.5)
count_data = np.loadtxt("txtdata.csv")
n_count_data = len(count_data)
plt.bar(np.arange(n_count_data), count_data, color="#348ABD")
plt.xlabel("Time (days)")
plt.ylabel("count of text-msgs received")
plt.title("Did the user's texting habits change over time?")
plt.xlim(0, n_count_data);

说的是作者自己发短信的数据,有一天发生了变化,但是从图上看不出来。
在这里插入图片描述

然后构建了一个模型框架,假设有两种不同的模式

import pymc as pm

with pm.Model() as model:
    alpha = 1.0/count_data.mean()  # Recall count_data is the
                                   # variable that holds our txt counts
    lambda_1 = pm.Exponential("lambda_1", alpha)
    lambda_2 = pm.Exponential("lambda_2", alpha)
    
    tau = pm.DiscreteUniform("tau", lower=0, upper=n_count_data - 1)

with model:
    idx = np.arange(n_count_data) # Index
    lambda_ = pm.math.switch(tau > idx, lambda_1, lambda_2)

with model:
    observation = pm.Poisson("obs", lambda_, observed=count_data)

然后将观察数据给到模型,执行mcmc,然后画图

### Mysterious code to be explained in Chapter 3.
with model:
    step = pm.Metropolis()
    trace = pm.sample(10000, tune=5000, step=step, return_inferencedata=False)

lambda_1_samples = trace['lambda_1']
lambda_2_samples = trace['lambda_2']
tau_samples = trace['tau']

figsize(12.5, 10)
#histogram of the samples:

ax = plt.subplot(311)
ax.set_autoscaley_on(False)

plt.hist(lambda_1_samples, histtype='stepfilled', bins=30, alpha=0.85,
         label="posterior of $\lambda_1$", color="#A60628", density=True)
plt.legend(loc="upper left")
plt.title(r"""Posterior distributions of the variables
    $\lambda_1,\;\lambda_2,\;\tau$""")
plt.xlim([15, 30])
plt.xlabel("$\lambda_1$ value")

ax = plt.subplot(312)
ax.set_autoscaley_on(False)
plt.hist(lambda_2_samples, histtype='stepfilled', bins=30, alpha=0.85,
         label="posterior of $\lambda_2$", color="#7A68A6", density=True)
plt.legend(loc="upper left")
plt.xlim([15, 30])
plt.xlabel("$\lambda_2$ value")

plt.subplot(313)
w = 1.0 / tau_samples.shape[0] * np.ones_like(tau_samples)
plt.hist(tau_samples, bins=n_count_data, alpha=1,
         label=r"posterior of $\tau$",
         color="#467821", weights=w, rwidth=2.)
plt.xticks(np.arange(n_count_data))

plt.legend(loc="upper left")
plt.ylim([0, .75])
plt.xlim([35, len(count_data)-20])
plt.xlabel(r"$\tau$ (in days)")
plt.ylabel("probability");

最后可以推断在45天的时候发生跳变(作者自己承认了这一点)
在这里插入图片描述

3 总结

  • 1 这种模型可以推断看不见的事实
  • 2 matplotlib用好了也可以画出很好看的图

注意:理论上,pymc是可以借用显卡计算的。只不过之前它的后端比较奇葩,现在可能失传了。然后我不太清楚的是现在怎么和显卡挂上,单靠cpu只能做一些小规模的计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript高级进阶(一)

什么是BOM BOM: Browser Object Model(浏览器对象模型) 提供了独立于内容与浏览器窗口进行交互的对象,你可以前进后退……历史记录等,是浏览器自动生成的功能。 浏览器对象模型 对象以及说明: window: 窗口对象,可以用来控制当前窗口&…

FreeRTOS中任务通知的使用

目录 0x01 任务通知介绍0x02 示例代码 0x01 任务通知介绍 简单举个例子: 例如任务一用于获取数据,任务二用于处理数据。 但这其中存在一个先后关系:必须等到任务一获取完了数据,任务二才能开始工作,你会如何选择何种…

两个月冲刺软考——概念+求已知内存按字节编址从(A)…到(B)…的存储容量+求采用单/双缓冲区需要花费的时间计算 类型题目讲解

1.四个周期的区别与联系 时钟周期:也称为CPU周期或机器周期,是CPU操作的基本时间单位。 指令周期:是指CPU执行一条指令所需的全部时间。一个指令周期通常由多个时钟周期组成,因为执行一条指令可能需要多个步骤,如取指…

基于 OpenCV 的数字图像处理实验平台设计

基于 OpenCV 的数字图像处理实验平台设计 前言简介正文资源链接(含源码) 前言 哈哈上学那会儿做的一个软件,当时把OpenCV各个基础算法都集成在了一起,还有一定程度的顺序执行部分相关算法的功能,那时候网上相关内容比较…

【开源大模型生态1】逐步成熟

人工智能和大模型的发展,我们之前讨论过,我在人工智能考试笔记中,也有分享。 结合上图,一起再来回顾一下。 机器学习出现之后,大模型逻辑推理为主,聚焦决策、认知能力。 深度学习出现之后,大…

利用注解将数据转为树结构

利用注解生成树结构 ListToTree注解 背景介绍: 通常,我们都有需要将一个列表List,转为树的结构 或许我们或多或少都写过工具类如: 或者: 以上写法,或多或少,都需要我们对集合进行一些处理,写多了自然就变得繁琐,甚至有业务相关的时候,修改会变动麻烦 并且功能比较单一,局限…

IO进程day07(信号灯集、消息队列)

【1】信号灯集 semaphore 1》概念 信号灯(semaphore),也叫信号量,信号灯集是一个信号灯的集合。它是不同进程间或一个给定进程内部不同线程间同步的机制; 而Posix信号灯指的是单个计数信号灯:无名信号灯、有名信号灯。&#xff0…

Spring Security 用户认证和授权管理

文章目录 一、介绍1、简介2、核心概念3、主要功能4、处理流程 二、Spring Security实现权限1、添加依赖2、执行顺序和代码执行流程(1)用户登录(2)访问受保护资源 总结1、用户登录2、访问受保护资源 完整源码 一、介绍 1、简介 S…

SpringBoot+Vue的竞赛报名系统【源码】【最详细运行文档】

SpringBootVue的竞赛报名系统 一、项目简介二、技术选型三、运行步骤1. 后端启动2. 前端启动 四、项目演示登录页管理员登录学生登录源码获取方式 总结 大家好,这里是程序猿代码之路。在现代教育和技术竞赛中,一个高效、稳定的报名系统对于赛事的组织和管…

【Java|Stream流】获取各个数据类型的Stream流

文章目录 1.Stream流介绍2.获取Stream流2.1单列集合2.2双列集合2.3数组2.4零散的数据 3.Stream.of()方法的注意事项 1.Stream流介绍 在 Java 中,Stream 流是一种处理集合数据的高级方式,可以方便地对集合进行各种操作,如过滤、映射、排序、聚…

python:序列1~n的立方之和==序列1~n的和之平方

pip install sympy 或者 Anaconda 3 自带 sympy 点击 【Jupyter Notebook】 这是我最喜欢的代数恒等式之一 from IPython.display import Latex Latex(r"$1^32^33^3\cdotsn^3 (123\cdotsn)^2 $") Latex(r"$\sum_{i1}^n i^3 (\sum_{i1}^n i)^2 $")# 求…

小试牛刀-SOL链创建Token代币

目录 1.编写目的 2.账户结构 3.环境及使用依赖 4.步骤分解 4.1.导入相关依赖 4.2. 初始化变量 4.3. 创建并初始化Mint Account 4.4. 创建并初始化Metadata Account 4.5. 发送创建和初始化mint Account 4.6 铸造代币 5.源码分享 Welcome to Code Blocks blog 本篇文…

视频孪生智慧监所平台,实现监管数据的统一管理和立体直观呈现

针对监所传统方式难以有效管控;监所视频监控相似度极高,难以辨识,工作人员劳动强度大;监所行业涉及的系统众多,缺少统一高效的管理;监所行业对系统应急响应能力、智慧化程度要求高等痛点问题。在智慧监所建…

24数学建模国赛及提供助力(12——存贮论)!!!!

需要资料和助攻的小伙伴们可以文章末尾获取链接!!!! 点击链接加入群聊获取资料以及助攻https://qm.qq.com/q/NGl6WD0Bky

免费作图软件推荐,六款工具助你提升设计效率

在现代设计工作中,合适的作图工具能极大地提高工作效率。对于设计师、学生或是爱好者来说,免费的作图软件无疑是一个经济实惠的选择。本文将为大家介绍 6 款免费且功能强大的作图软件,其中包括国内备受欢迎的免费作图软件以及 5 款优秀的国外…

多态,匿名内部类(lambda表达式),集合

多态(polymorphism) 一个演员扮演多个不同角色。可以减少if语句的使用。 概念 具有接口或者继承关系 A extends B A implement C 类型一致(IEat) 民间说法:父类的引用指向不同的子类对象(不同时刻) 产生不同结果 调用相同方法&#x…

学历不会改变命运但知识一定可以改变命运

一、知识与学历的区别 首先,我们需要区分“知识”与“学历”。学历通常是指一个人通过正规教育体系获得的证书或学位,而知识则是更为宽泛的概念,它包括了一个人通过各种途径获得的信息、技能和理解。学历可能只是知识的一部分,而…

自然语言处理系列五十二》文本分类算法》BERT模型算法原理及文本分类

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列五十二文本分类算法》BERT模型算法原理及文本分…

day7 测试知识积累

1.有一个班级表,里面有学号,姓名,学科,分数。找到语文学科分数最高的前10位的姓名(SQL) select 姓名 from 班级表 where 学科=语文 order by 分数 DESC limit 10; 2.有一张年级表,有班级,年级,学生姓名,找到这10名同学所在的班级(SQL) select class from 年级表 wher…

《python语言程序设计》第8章第12题生物信息:找出基因,生物学家使用字母A C T和G构成字符2串建模一个基因组(上)

草稿一、用单一方法遍历文本 9.1代码 genome_text TTATGTTTTAAGGATGGGGCGTTAGTTdef div_word(word_to_judge):len_num len(word_to_judge)save_word ""if len_num % 3 0:print("This word is valid")if save_word.find("ATG") "ATG&qu…