tigramite教程(五)使用TIGRAMITE 进行自助聚合和链接置信度量化

使用TIGRAMITE 进行自助聚合和链接置信度量化

  • 自助聚合(Bagging)和置信度估计
  • 例子
    • 数据生成模型
    • 基本的PCMCI+
    • Bagged-PCMCI+
      • 使用优化后的`pc_alpha`进行自举聚合
      • 使用优化的pc_alpha进行CMIknn的自举聚合

TIGRAMITE是一个用于时间序列分析的Python模块。它基于PCMCI框架,允许从离散或连续值时间序列中重建因果图模型,并创建结果的高质量图表。

这篇《自然-地球与环境》评论论文总结了一般时间序列因果推断的概况

本教程解释了时间序列因果发现的自助聚合(Bagging),该方法在PCMCIbase.run_bootstrap_of函数中实现。自助聚合是一种通用的元算法,可与TIGRAMITE的大多数因果发现方法结合使用,例如run_pcmcirun_pcalg_non_timeseries_datarun_pcmciplusrun_lpcmci等,包括整个条件独立性检验范围。您可以参考以下预印本获取更多信息。

import numpy as npfrom matplotlib import pyplot as plt
%matplotlib inline     import tigramite
from tigramite import data_processing as pp
from tigramite.toymodels import structural_causal_processes as toys
from tigramite import plotting as tp
from tigramite.lpcmci import LPCMCI
from tigramite.pcmci import PCMCI
from tigramite.independence_tests.parcorr import ParCorr
from tigramite.independence_tests.cmiknn import CMIknn
from tigramite.pcmci_base import PCMCIbase

自助聚合(Bagging)和置信度估计

在基于自助法的自助聚合(bagging)中,训练集中的随机样本是有放回地选择的,这意味着在每个自助样本中,每个数据点可以被多次抽取。以这种方式生成多个数据样本以产生一组复制品(也称为重新采样)。机器学习模型然后分别在每个复制品上进行训练,最终为预测任务对输出进行平均或为分类任务进行聚合(例如通过多数投票)。在我们的情况下,训练集是输入时间序列,机器学习模型是因果发现方法,输出是因果图。

自助聚合在时间序列因果发现中的主要兴趣在于改善输出图的稳健性,并为图中的连接提供置信度估计。由于时间序列因果发现对时间依赖性敏感,保持重采样过程中的时间依赖性是至关重要的。然而,标准重采样不可避免地会破坏(至少部分地)时间滞后依赖。为解决这个问题,我们采用以下所示的重采样策略:

(图片展示了重采样过程)

最终,我们的自助聚合方法结合时间序列因果发现方法(这里是PCMCI+)可以总结如下:原始时间序列被重采样 B B B (自助法复制次数)次。在每个重采样中,PCMCI+被独立运行,产生一个输出图。然后通过相对多数投票对每对边的类型进行聚合,得到 B B B 个输出图。对于每个边缘的类型,通过大多数投票对所有这些图进行聚合,得到最终输出图,解决连接冲突的优先级顺序(无连接,×−×和◦−◦);如果→和←之间存在冲突的连接,则返回冲突连接×−×。

Bagged-PCMCI+的返回结果包括:

  1. 通过将PCMCI+应用于通过保留时间依赖性进行重采样获得的 B B B 个数据集得到的 B B B 个因果图集成,

  2. 将所有这些图通过多数投票(在每个单独边缘的级别)聚合到最终输出图中,

  3. 为最终聚合图提供连接频率,以提供连接的置信度量。

通过输出图中连接的宽度来表示此置信度量:时间滞后2时刻的 X 2 → X 3 X_2 \rightarrow X_3 X2X3 的置信度量(与箭头宽度成比例)大于时间滞后1时刻的 X 4 → X 1 X_4 \rightarrow X_1 X4X1 的置信度量。

在这里插入图片描述
与所选因果发现算法相比,被聚合的版本有一个进一步的参数:自助法复制次数 B B B 。在实践中,我们建议尽可能使用较大的 B B B 。该实施使用joblib进行并行化。在我们的数值实验中, B = 25 B=25 B=25已经获得了良好的结果,但我们建议使用 B ≥ 100 B\geq 100 B100

例子

这一部分演示和解释了Bagged-PCMCI+在合成数据上的应用。

数据生成模型

# Set seed for reproducibility
seed = 1111
# Choose the time series length
T = 100# Specify the model (note that here, unlike in the typed equations, variables
# are indexed starting from 0)
def lin(x): return xlinks = {0: [((0, -1), 0.3, lin), ((2, 0), 0.5, lin), ((3, -1), -0.5, lin)],   # X11: [((1, -1), 0.3, lin)],                                             # X22: [((2, -1), 0.3, lin), ((1, -2), 0.4, lin)],                        # X33: [((3, -1), 0.3, lin)]                                              # X4                            }var_names = [r'$X^{%d}$' % j for j in range(1, len(links)+1)]# Show ground truth causal graph
tp.plot_graph(graph = PCMCI.get_graph_from_dict(links),var_names=var_names,)

在这里插入图片描述
现在往里面灌数据

# Generate data according to the full structural causal process
data, nonstationarity_indicator = toys.structural_causal_process(links=links, T=T, seed=seed)
assert not nonstationarity_indicator# Number of variables
N = data.shape[1]# Initialize dataframe object, specify variable names
dataframe = pp.DataFrame(data, var_names=var_names)

基本的PCMCI+

先展示以下基本的PCMCI+算法

tau_max = 2
pc_alpha = 0.01pcmci = PCMCI(dataframe=dataframe,cond_ind_test=ParCorr(),verbosity=0,)
results_pcmciplus = pcmci.run_pcmciplus(tau_max=tau_max, pc_alpha=pc_alpha)
tp.plot_graph(graph = results_pcmciplus['graph'],val_matrix= results_pcmciplus['val_matrix'],var_names=dataframe.var_names,); plt.show()

在这里插入图片描述
在这里,PCMCI+漏了连接 X 2 → X 3 X^2\to X^3 X2X3 ,并且无法确定连接 X 3 → X 1 X^3\to X^1 X3X1 的方向。

Bagged-PCMCI+

从我们的数值实验中,我们发现Bagged-PCMCI+改善了邻接精度和方向识别率。然而,不能直接将Bagged-PCMCI+与相同的pc_alpha下的PCMCI+结果进行比较(请参见论文中的精度-召回曲线)。在这里,我们选择了一个更高的pc_alpha用于Bagged-PCMCI+。在下文中,我们将说明如何使用模型选择来选择pc_alpha。

Bagged-PCMCI+的另一个参数是自助法的块长度(默认为1)。可以选择性地用它来更好地处理自相关性,但其效果尚未评估。

pc_alpha_bootstrap = 0.1
boot_samples = 200# The block-length of the bootstrap can optionally be used to better deal with autocorrelation, 
# but its effect was not yet evaluated.
boot_blocklength = 1## Create PCMCI object to call run_bootstrap_of
pcmci = PCMCI(dataframe=dataframe,cond_ind_test=ParCorr(),verbosity=0,)# Call bootstrap for the chosen method (here 'run_pcmciplus') and pass method arguments  
results = pcmci.run_bootstrap_of(method='run_pcmciplus', method_args={'tau_max':tau_max, 'pc_alpha':pc_alpha_bootstrap}, boot_samples=boot_samples,boot_blocklength=boot_blocklength,seed=123)# Output graph, link frequencies (confidence measure), and mean test statistic values (val_mat)
boot_linkfreq = results['summary_results']['link_frequency']
boot_graph = results['summary_results']['most_frequent_links']
val_mat = results['summary_results']['val_matrix_mean']# Plot
tp.plot_graph(graph = boot_graph,val_matrix= val_mat,link_width = boot_linkfreq,var_names=dataframe.var_names,); plt.show()

在这里插入图片描述
在这个例子中,我们可以看到Bagged-PCMCI+获得了正确的图(在 B B B个重新采样中进行链接多数投票),并且还通过箭头的宽度提供了对链接的置信度的有用估计。

使用优化后的pc_alpha进行自举聚合

对于一系列算法和条件独立性测试,还可以将pc_alpha设置为指定的列表或为None(然后将使用列表[0.001, 0.005, 0.01, 0.025, 0.05])。pc_alpha将根据在cond_ind_test.get_model_selection_criterion()中计算的得分在指定列表中的值上进行优化。这对于所有条件独立性测试都是不可能的。

这种方法也可以与自举聚合相结合。pc_alpha会在每次 B B B个自举重新采样中进行内部和个别优化。

pc_alpha_bootstrap = [0.001, 0.01, 0.05, 0.1, 0.2] # This can be adapted 
boot_samples = 200# The block-length of the bootstrap can optionally be used to better deal with autocorrelation, 
# but its effect was not yet evaluated.
boot_blocklength = 1## Create PCMCI object to call run_bootstrap_of
pcmci = PCMCI(dataframe=dataframe,cond_ind_test=ParCorr(),verbosity=0,)# Call bootstrap for the chosen method (here 'run_pcmciplus') and pass method arguments  
results = pcmci.run_bootstrap_of(method='run_pcmciplus', method_args={'tau_max':tau_max, 'pc_alpha':pc_alpha_bootstrap}, boot_samples=boot_samples,boot_blocklength=boot_blocklength,seed=123)# Output graph, link frequencies (confidence measure), and mean test statistic values (val_mat)
boot_linkfreq = results['summary_results']['link_frequency']
boot_graph = results['summary_results']['most_frequent_links']
val_mat = results['summary_results']['val_matrix_mean']# Plot
tp.plot_graph(graph = boot_graph,val_matrix= val_mat,link_width = boot_linkfreq,var_names=dataframe.var_names,); plt.show()

在这里插入图片描述

使用优化的pc_alpha进行CMIknn的自举聚合

最后,我们展示了通过优化pc_alpha和非线性条件独立性测试CMIknn来实现Bagged-PCMCI+方法。请参阅相应的教程。使用标准初始化CMIknn(significance='shuffle_test')将导致每个测试执行计算密集型的置换检验方案以获得零分布。另一种具有较少统计严谨性的替代方法是仅基于条件互信息上的固定阈值做出测试决策,使用CMIknn(significance='fixed_thres'),请参阅教程中的解释。这在这里进行了说明。

我们按以下方式创建非线性数据:

# Choose the time series length
T = 500# Specify the model (note that here, unlike in the typed equations, variables
# are indexed starting from 0)
def lin(x): return x
def nonlin(x): return .2 * (x + 5. * x**2 * np.exp(-x**2 / 20.))links = {0: [((0, -1), 0.3, lin), ((2, 0), 0.5, lin), ((3, -1), -0.7, nonlin)],   # X11: [((1, -1), 0.3, lin)],                                             # X22: [((2, -1), 0.3, lin), ((1, -2), 0.4, nonlin)],                        # X33: [((3, -1), 0.3, lin)]                                              # X4                            }# Generate data according to the full structural causal process
data, nonstationarity_indicator = toys.structural_causal_process(links=links, T=500, seed=seed)
# Initialize dataframe object, specify variable names
dataframe = pp.DataFrame(data, var_names=var_names)
# Use a range of fixed thresholds, these are used as pc_alpha (with a slight abuse of the parameter name)
# This can be adapted, higher thresholds lead to stricter link decisions and, hence, sparser graphs
fixed_thresholds = [0.01, 0.025, 0.05, 0.1]
boot_samples = 100# The block-length of the bootstrap can optionally be used to better deal with autocorrelation, 
# but its effect was not yet evaluated.
boot_blocklength = 1## Create PCMCI object to call run_bootstrap_of
pcmci = PCMCI(dataframe=dataframe,cond_ind_test=CMIknn(significance='fixed_thres', model_selection_folds=5),verbosity=0,)# Call bootstrap for the chosen method (here 'run_pcmciplus') and pass method arguments  
results = pcmci.run_bootstrap_of(method='run_pcmciplus', method_args={'tau_max':tau_max, 'pc_alpha':fixed_thresholds}, boot_samples=boot_samples,boot_blocklength=boot_blocklength,seed=123)# Output graph, link frequencies (confidence measure), and mean test statistic values (val_mat)
boot_linkfreq = results['summary_results']['link_frequency']
boot_graph = results['summary_results']['most_frequent_links']
val_mat = results['summary_results']['val_matrix_mean']
# Plot
tp.plot_graph(graph = boot_graph,val_matrix= val_mat,link_width = boot_linkfreq,var_names=dataframe.var_names,vmin_edges=0.,vmax_edges = 0.2,edge_ticks=0.05,cmap_edges='OrRd',vmin_nodes=0,vmax_nodes=.2,node_ticks=.1,cmap_nodes='OrRd',); plt.show()

在这里插入图片描述

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

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

相关文章

如何批量获取公众号所有文章的阅读数点赞数和留言数导出excel?

如何批量获取公众号所有文章的阅读数点赞数和留言数导出excel?我写了个脚本批量抓取,导出的excel文章数据包含文章日期,文章标题,文章链接,文章简介,文章作者,文章封面图,是否原创&a…

《圣斗士星矢:纵横宇宙》(上)AI制作真人版大电影

《圣斗士星矢:纵横宇宙》(上)AI制作真人版大电影 平行宇宙,黑暗来袭,十二件黄金圣衣合体成为究极秘密武器! 《圣斗士星矢:纵横宇宙》(上)电影开场,星矢等一众…

网络通信与网络协议

网络编程是指利用计算机网络实现程序之间通信的一种编程方式。在网络编程中,程序需要通过网络协议(如 TCP/IP)来进行通信,以实现不同计算机之间的数据传输和共享。在网络编程中,通常有三个基本要素 IP 地址:定位网络中某台计算机端口号port:定…

Nginx高级技术: 代理缓存配置

一、缓存说明 Nginx缓存,Nginx 提供了一个强大的反向代理和 HTTP 服务器功能,同时也是一个高效的缓存服务器。一般情况下系统用到的缓存有以下三种: 1、服务端缓存:缓存存在后端服务器,如 redis。 2、代理缓存&#…

6.【Linux】进程间通信(管道命名管道||简易进程池||简易客户端服务端通信)

介绍 进程间通信的方式 1.Linux原生支持的管道----匿名和命名管道 2.System V-----共享内存、消息队列、信号量 3.Posix------多线程、网路通信 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。…

UE4_调试工具_绘制调试球体

学习笔记,仅供参考! 效果: 步骤: 睁开眼睛就是该变量在此蓝图的实例上可公开编辑。 勾选效果:

VUE3生命周期钩子

概念 每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在…

文件包含例子

一、常见的文件包含函数 php中常见的文件包含函数有以下四种: include() require() include_once() require()_once() include与require基本是相同的,除了错误处理方面: include(),只生成警告(E_WARNING)&#x…

基于java+springboot+vue实现的自习室管理和预约系统(文末源码+Lw)23-177

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装自习室管理和预约系统软件来发挥其高效地信息处理的作用&a…

Python爬取淘宝商品评价信息实战

文章目录 一、分析需要爬取的页面二、实现爬取商品评价信息的代码1、通过解析显示评价信息的元素获取商品评价信息2、通过mitmproxy代理进行流量抓包获取商品评价信息 三、附-完整代码 前期出了一个《爬取京东商品评价信息实战》的教程,最近又有网友提到要出一个爬淘…

案例分析篇13:系统分析与设计考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

幸福金龄会第二届《锦绣中华》广东省中老年协会携团队共襄盛举

近日,一场盛大的文化艺术盛宴——第二届《锦绣中华》中老年文旅文化艺术节在广东隆重举行。此次活动由幸福金龄会主办,吸引了广东省内各中老年协会的领导及文艺团队纷纷参与,共同为中华文化的传承与发展贡献力量。 广东省各中老年协会的会长、…

Java项目:56 ssm681基于Java的超市管理系统+jsp

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 功能包括:商品分类,供货商管理,库存管理,销售统计,用户及角色管理,等等功能。项目采…

WpsOfficeExcel表格固定首行,点视图下的冻结窗格下的冻结首行

wps 和 微软 excel 表格固定首行的方法基本一样 WpsExcel表格固定首行,点视图下的冻结窗格下的冻结首行 WpsExcel表格固定首行,点视图下的冻结窗格下的冻结首行 Excel表格固定首行,点视图下的冻结窗格下的冻结首行 在Excel中固定首行,通常是通过“冻结窗格”功能…

复现文件上传漏洞

一、搭建upload-labs环境 将下载好的upload-labs的压缩包,将此压缩包解压到WWW中,并将名称修改为upload,同时也要在upload文件中建立一个upload的文件。 然后在浏览器网址栏输入:127.0.0.1/upload进入靶场。 第一关 选择上传文件…

综合实验---Web---进阶版

实验配置: 7-1为内网Nginx服务器;7-2和7-3为Web服务器;7-4为网关服务器;7-5为外网客户机; yum安装Nginx;yum安装Mysql; 编译安装PHP;编译安装 由于我们Nginx和Mysql都是yum安装&…

webserver烂大街?还有必要做么?

目录 什么是 Web Server? 如何提供 HTTP 服务? HTTP协议 简介 工作原理 工作步骤 HTTP请求报文格式 HTTP响应报文格式 HTTP请求方法 HTTP状态码 ​总结 都说webserver是C选手人手必备的烂大街项目,那么webserver 还有必要做么&…

CAP 理论:分布式场景下我们真的只能三选二吗?

什么是 CAP 理论 CAP 理论是加州理工大学伯克利分校的 Eric Brewer 教授在 2000 年 7 月的 ACM PODC 会议上首次提出的,它是 Eric Brewer 在 Inktomi 期间研发搜索引擎、分布式 Web 缓存时得出的关于数据一致性( C:Consistency )…

【C++庖丁解牛】List容器的介绍及使用 | 深度剖析 | list与vector的对比

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. list的介绍1.1 list的…

selenium + robotframework的运行原理

1、点击ride界面启动用例执行时,首先会调用脚本 2、打开pybot脚本查看内容、 3、打开robot包下面的run文件,我们可以看到信息 run文件内容 程序启动的入口, sys.agv所表达的含义是:sys.argv[]说白了就是一个从程序外部获取参数的桥…