github:https://github.com/SUwonglab/CausalEGM/tree/main/src
pip:Tutorial for Python Users — CausalEGM documentation
安装:Installation — CausalEGM documentation
版本:
根据观察数据,推断治疗的因果效应对于许多科学和工程问题至关重要,并引起了各个领域的巨大兴趣。了解因果关系的最有效方法是进行随机对照试验(RCT)。然而,RCT 耗时、昂贵且普遍性存在问题。相比之下,观察性研究可以提供有价值的证据并检查“现实世界”环境中的效果。在现实世界的应用中,由于混杂因素引入的选择偏差,治疗通常不是随机分配的。准确估计因果效应涉及处理混杂因素,这可能会影响治疗和结果。未能针对混杂效应进行调整可能会导致估计偏差和错误结论。
Density estimation using deep generative neural networks
在创建 CausalEGM 模型之前,dict
应创建一个 python 对象来部署 CausalEGM 模型的超参数,其中包括潜在特征的维度、神经网络架构等。
详细的超参数描述如下。
配置参数 |
描述 |
---|---|
输出目录 |
输出目录用于保存模型训练过程中的结果。默认: ”。” |
数据集 |
用于指示输入数据的数据集名称。默认值:“我的数据” |
z_尺寸 |
编码器输出的潜在维度 (e(V)_0~3)。默认值:[3,3,6,6] |
v_dim |
协变量的维度。 |
LR |
学习率。默认值:0.0002 |
g_单位 |
解码器/生成器网络 G 的单元数量。默认值: [64,64,64,64,64]。 |
e_单位 |
编码器网络 E 的单元数量。默认值: [64,64,64,64,64]。 |
f_单位 |
F 网络的单元数量。默认值:[64,32,8]。 |
h_单位 |
H 网络的单元数量。默认值:[64,32,8]。 |
dz_单位 |
潜在空间中鉴别器网络的单元数量。默认值:[64,32,8]。 |
dz_单位 |
协变量空间中鉴别器网络的单元数。默认值:[64,32,8]。 |
α |
重建损失系数。 默认值:1。 |
贝塔 |
往返损耗系数。默认值:1。 |
伽玛 |
梯度惩罚损失系数。默认值:10。 |
g_d_频率 |
更新鉴别器和生成器的频率。默认值:5。 |
保存资源 |
模型训练过程中是否保存结果。 默认值: True。 |
保存模型 |
是否保存模型权重。默认值: False。 |
二进制处理 |
是否使用二元处理设置。 默认值: True。 |
使用_z_rec |
使用潜在特征的重建。默认值: True。 |
使用_v_gan |
使用协变量的 GAN 分布匹配。 默认值: True。 |
x_最小值 |
连续治疗环境中剂量反应间隔的左界。默认值:0。 |
最大x |
连续治疗环境中剂量反应间隔的右界。默认值:3。 |
配置参数对于创建 CausalEGM 模型是必需的。以下是配置参数的一些技巧。
z_dims对性能有显着影响,请参阅src/configs获取指导。
如果save_res为True,训练期间的结果将保存在output_dir中
建议use_v_gan在二元治疗设置下为True ,在连续治疗设置下为False。
import CausalEGM as cegm
print("Currently use version v%s of CausalEGM."%cegm.__version__)
import yaml
params = yaml.safe_load(open('../../src/configs/Semi_acic.yaml', 'r'))
print(params)
#{'dataset': 'Semi_acic', 'output_dir': '.', 'v_dim': 100, 'z_dims': [3, 3, 6, 6], 'lr': 0.0002, 'alpha': 1, 'beta': 1, 'gamma': 10, 'g_d_freq': 5, 'g_units': [64, 64, 64, 64, 64], 'e_units': [64, 64, 64, 64, 64], 'f_units': [64, 32, 8], 'h_units': [64, 32, 8], 'dz_units': [64, 32, 8], 'dv_units': [64, 32, 8], 'save_res': True, 'save_model': False, 'binary_treatment': False, 'use_z_rec': True, 'use_v_gan': True, 'x_min': 0, 'x_max': 3}
model = cegm.CausalEGM(params=params,random_seed=123)
#get the data from the ACIC 2018 competition dataset with a specified ufid.
#ds = Semi_acic_sampler(path='../data/ACIC_2018',ufid='d5bd8e4814904c58a79d7cdcd7c2a1bb')
# >>> ds = Base_sampler(x=x,y=y,v=v)
# >>> batch = ds.next_batch() # get a batch of data
# >>> data = ds.load_all() # get all data as a triplet
# x,y,v = cegm.Semi_acic_sampler(path='../../../../data/ACIC_2018',ufid='d5bd8e4814904c58a79d7cdcd7c2a1bb').load_all()
#x,y,v = cegm.Semi_acic_sampler(path='../../../../data/ACIC_2018',ufid='d5bd8e4814904c58a79d7cdcd7c2a1bb').load_all()
import numpy as np
x = np.random.normal(size=(2000,))
y = np.random.normal(size=(2000,))
v = np.random.normal(size=(2000,100))
print(x.shape,y.shape,v.shape)
model.train(data=[x,y,v],n_iter=100,save_format='npy',verbose=False)
错误
这个错误信息表明在你的代码中存在一个占位符张量(placeholder tensor) 'Placeholder/_10'
,它的 dtype 是 float,形状是 [2000, 10],但是在执行过程中没有为它提供必要的数据值。
在 TensorFlow 中,占位符张量是一种特殊的张量,它在图构建阶段没有具体的值,而是在运行阶段通过 feed_dict
或者 tf.data
来提供数据。根据错误信息,你需要在执行代码时,确保为占位符 'Placeholder/_10'
提供一个正确形状和 dtype 的数据值。
要解决这个问题,你可以使用 feed_dict
来为占位符提供数据,例如:
import tensorflow as tf
# 创建占位符
placeholder = tf.placeholder(dtype=tf.float32, shape=[2000, 10], name='Placeholder')
# 创建一个 TensorFlow 会话
with tf.Session() as sess:
# 使用 feed_dict 为占位符提供数据
data = ... # 替换成你的数据
result = sess.run(placeholder, feed_dict={placeholder: data})
Estimating Treatment Effects over Time with Causal Forests:An application to the ACIC 2022 Data Challenge
Estimating Treatment Effects over Time with Causal Forests:An application to the ACIC 2022 Data Challenge
https://github.com/SUwonglab/CausalEGM/blob/main/src/CausalEGM/causalEGM.py