CausalML 基于机器学习算法的因果推理方法

CausalML 是一个 Python 包,它使用基于最新研究的机器学习算法提供一套提升建模和因果推理方法。它提供了一个标准界面,允许用户从实验或观察数据中估计条件平均处理效应 (CATE),也称为个体治疗效应 (ITE)。从本质上讲,它估计了干预 W 对具有观察到特征 X 的用户的结果 Y 的因果影响,而无需对模型形式进行强有力的假设。

在本节中,我们将更深入地探究CausalML中所实现的算法。
我们采用内曼 - 鲁宾潜在结果框架,并假定Y代表结果,W代表处理分配, X i X_i Xi​ 代表观测到的协变量。

支持的算法

CausalML目前支持以下方法:

  • 基于树的算法
    • 基于KL散度、欧几里得距离和卡方的提升随机森林
    • 基于上下文处理选择的提升随机森林
    • 基于delta-delta-p(ΔΔP)准则的提升随机森林(仅适用于二叉树和二分类问题)
    • 基于IDDP的提升随机森林(仅适用于二叉树和二分类问题)
    • 交互树(仅适用于二叉树和二分类问题)
    • 因果推断树(仅适用于二叉树和二分类问题)
  • 元学习器算法
    • S - 学习器
    • T - 学习器
    • X - 学习器
    • R - 学习器
    • 双稳健(DR)学习器
  • 工具变量算法
    • 两阶段最小二乘法(2SLS)
    • 双稳健工具变量(DRIV)学习器
  • 基于神经网络的算法
    • CEVAE
    • DragonNet
  • 处理优化算法
    • 反事实单元选择
    • 反事实价值估计器

元学习器算法

元算法(或元学习器)是一种框架,它利用任意机器学习估计器(称为基学习器)来估计条件平均处理效应(CATE)。

元算法要么使用单个基学习器,并将处理指示变量作为一个特征(例如S - 学习器),要么为处理组和对照组分别使用多个基学习器(例如T - 学习器、X - 学习器和R - 学习器)。

S - 学习器

S - 学习器使用单个机器学习模型按如下方式估计处理效应:

  • 阶段1:使用机器学习模型,借助协变量X和处理指示变量W来估计平均结果 μ ( x ) \mu(x) μ(x):
    μ ( x , w ) = E [ Y ∣ X = x , W = w ] \mu(x, w)=E[Y|X = x, W = w] μ(x,w)=E[Y∣X=x,W=w]
  • 阶段2:将CATE估计定义为:
    τ ^ ( x ) = μ ^ ( x , W = 1 ) − μ ^ ( x , W = 0 ) \hat{\tau}(x)=\hat{\mu}(x, W = 1)-\hat{\mu}(x, W = 0) τ^(x)=μ^​(x,W=1)−μ^​(x,W=0)

在模型中纳入倾向得分可减少由正则化引发的混杂偏差。

当对照组和处理组在协变量方面差异很大时,单个线性模型不足以对对照组和处理组特征的不同相关维度及平滑度进行编码。

T - 学习器

T - 学习器由以下两个阶段组成:

  • 阶段1:使用机器学习模型估计平均结果 μ 0 ( x ) \mu_0(x) μ0​(x)和 μ 1 ( x ) \mu_1(x) μ1​(x):
    μ 0 ( x ) = E [ Y ( 0 ) ∣ X = x ] \mu_0(x)=E[Y(0)|X = x] μ0​(x)=E[Y(0)∣X=x]
    μ 1 ( x ) = E [ Y ( 1 ) ∣ X = x ] \mu_1(x)=E[Y(1)|X = x] μ1​(x)=E[Y(1)∣X=x]
  • 阶段2:将CATE估计定义为:
    τ ^ ( x ) = μ ^ 1 ( x ) − μ ^ 0 ( x ) \hat{\tau}(x)=\hat{\mu}_1(x)-\hat{\mu}_0(x) τ^(x)=μ^​1​(x)−μ^​0​(x)

X - 学习器

X - 学习器是T - 学习器的扩展,由以下三个阶段组成:

  • 阶段1:使用机器学习模型估计平均结果 μ 0 ( x ) \mu_0(x) μ0​(x)和 μ 1 ( x ) \mu_1(x) μ1​(x):
    μ 0 ( x ) = E [ Y ( 0 ) ∣ X = x ] \mu_0(x)=E[Y(0)|X = x] μ0​(x)=E[Y(0)∣X=x]
    μ 1 ( x ) = E [ Y ( 1 ) ∣ X = x ] \mu_1(x)=E[Y(1)|X = x] μ1​(x)=E[Y(1)∣X=x]
  • 阶段2:基于 μ 0 ( x ) \mu_0(x) μ0​(x)为处理组中的用户i估算用户级处理效应 D i 1 D_{i1} Di1​,基于 μ 1 ( x ) \mu_1(x) μ1​(x)为对照组中的用户j估算用户级处理效应 D j 0 D_{j0} Dj0​:
    D i 1 = Y i 1 − μ ^ 0 ( X i 1 ) D_{i1}=Y_{i1}-\hat{\mu}_0(X_{i1}) Di1​=Yi1​−μ^​0​(Xi1​)
    D i 0 = μ ^ 1 ( X i 0 ) − Y i 0 D_{i0}=\hat{\mu}_1(X_{i0})-Y_{i0} Di0​=μ^​1​(Xi0​)−Yi0​

然后使用机器学习模型估计 τ 1 ( x ) = E [ D 1 ∣ X = x ] \tau_1(x)=E[D_1|X = x] τ1​(x)=E[D1​∣X=x]和 τ 0 ( x ) = E [ D 0 ∣ X = x ] \tau_0(x)=E[D_0|X = x] τ0​(x)=E[D0​∣X=x]。

  • 阶段3:通过 τ 1 ( x ) \tau_1(x) τ1​(x)和 τ 0 ( x ) \tau_0(x) τ0​(x)的加权平均来定义CATE估计:
    τ ( x ) = g ( x ) τ 0 ( x ) + ( 1 − g ( x ) ) τ 1 ( x ) \tau(x)=g(x)\tau_0(x)+(1 - g(x))\tau_1(x) τ(x)=g(x)τ0​(x)+(1−g(x))τ1​(x)

其中 g ∈ [ 0 , 1 ] g\in[0, 1] g∈[0,1]。我们可以将倾向得分用于 g ( x ) g(x) g(x)。

R - 学习器

R - 学习器使用结果的交叉验证折外估计 m ^ ( − i ) ( x i ) \hat{m}^{(-i)}(x_i) m^(−i)(xi​)和倾向得分 e ^ ( − i ) ( x i ) \hat{e}^{(-i)}(x_i) e^(−i)(xi​)。它由以下两个阶段组成:

  • 阶段1:使用交叉验证通过机器学习模型拟合 m ^ ( x ) \hat{m}(x) m^(x)和 e ^ ( x ) \hat{e}(x) e^(x)。
  • 阶段2:通过最小化R - 损失 L ^ n ( τ ( x ) ) \hat{L}^n(\tau(x)) L^n(τ(x))来估计处理效应:
    L ^ n ( τ ( x ) ) = 1 n ∑ i = 1 n ( ( Y i − m ^ ( − i ) ( X i ) ) − ( W i − e ^ ( − i ) ( X i ) ) τ ( X i ) ) 2 \hat{L}^n(\tau(x))=\frac{1}{n}\sum_{i = 1}^{n}((Y_i-\hat{m}^{(-i)}(X_i))-(W_i-\hat{e}^{(-i)}(X_i))\tau(X_i))^2 L^n(τ(x))=n1​i=1∑n​((Yi​−m^(−i)(Xi​))−(Wi​−e^(−i)(Xi​))τ(Xi​))2

其中 e ^ ( − i ) ( X i ) \hat{e}^{(-i)}(X_i) e^(−i)(Xi​)等表示未使用第i个训练样本做出的折外留出预测。

双稳健(DR)学习器

DR - 学习器通过在两个阶段交叉拟合双稳健得分函数来估计CATE,步骤如下。我们首先将数据 { Y , X , W } \{Y, X, W\} {Y,X,W}随机划分为3个分区 { Y i , X i , W i } \{Y_i, X_i, W_i\} {Yi​,Xi​,Wi​}, i = { 1 , 2 , 3 } i = \{1, 2, 3\} i={1,2,3}。

  • 阶段1:使用 { X 1 , W 1 } \{X_1, W_1\} {X1​,W1​}通过机器学习拟合倾向得分模型 e ^ ( x ) \hat{e}(x) e^(x),并使用 { Y 2 , X 2 , W 2 } \{Y_2, X_2, W_2\} {Y2​,X2​,W2​}通过机器学习为已处理和未处理用户拟合结果回归模型 m ^ 0 ( x ) \hat{m}_0(x) m^0​(x)和 m ^ 1 ( x ) \hat{m}_1(x) m^1​(x)。
  • 阶段2:使用 { Y 3 , X 3 , W 3 } \{Y_3, X_3, W_3\} {Y3​,X3​,W3​}通过机器学习从以下伪结果拟合CATE模型 τ ^ ( X ) \hat{\tau}(X) τ^(X):
    ϕ = W − e ^ ( X ) e ^ ( X ) ( 1 − e ^ ( X ) ) ( Y − m ^ W ( X ) ) + m ^ 1 ( X ) − m ^ 0 ( X ) \phi=\frac{W-\hat{e}(X)}{\hat{e}(X)(1 - \hat{e}(X))}(Y-\hat{m}_W(X))+\hat{m}_1(X)-\hat{m}_0(X) ϕ=e^(X)(1−e^(X))W−e^(X)​(Y−m^W​(X))+m^1​(X)−m^0​(X)
  • 阶段3:再次重复阶段1和阶段2两次。首先使用 { Y 2 , X 2 , W 2 } \{Y_2, X_2, W_2\} {Y2​,X2​,W2​}、 { Y 3 , X 3 , W 3 } \{Y_3, X_3, W_3\} {Y3​,X3​,W3​}和 { Y 1 , X 1 , W 1 } \{Y_1, X_1, W_1\} {Y1​,X1​,W1​}分别用于倾向得分模型、结果模型和CATE模型。然后使用 { Y 3 , X 3 , W 3 } \{Y_3, X_3, W_3\} {Y3​,X3​,W3​}、 { Y 2 , X 2 , W 2 } \{Y_2, X_2, W_2\} {Y2​,X2​,W2​}和 { Y 1 , X 1 , W 1 } \{Y_1, X_1, W_1\} {Y1​,X1​,W1​}分别用于倾向得分模型、结果模型和CATE模型。最终的CATE模型是这3个CATE模型的平均值。

双稳健工具变量(DRIV)学习器

我们将DR - 学习器的思路与局部平均处理效应(LATE)的双稳健得分函数相结合,以估计条件LATE。为此,我们首先将数据 { Y , X , W , Z } \{Y, X, W, Z\} {Y,X,W,Z}随机划分为3个分区 { Y i , X i , W i , Z i } \{Y_i, X_i, W_i, Z_i\} {Yi​,Xi​,Wi​,Zi​}, i = { 1 , 2 , 3 } i = \{1, 2, 3\} i={1,2,3}。

  • 阶段1:使用 { X 1 , W 1 , Z 1 } \{X_1, W_1, Z_1\} {X1​,W1​,Z1​}为已分配和未分配用户拟合倾向得分模型 e ^ 0 ( x ) \hat{e}_0(x) e^0​(x)和 e ^ 1 ( x ) \hat{e}_1(x) e^1​(x),并使用 { Y 2 , X 2 , Z 2 } \{Y_2, X_2, Z_2\} {Y2​,X2​,Z2​}通过机器学习为已分配和未分配用户拟合结果回归模型 m ^ 0 ( x ) \hat{m}_0(x) m^0​(x)和 m ^ 1 ( x ) \hat{m}_1(x) m^1​(x)。分配概率 p Z p_Z pZ​既可以由用户提供,也可以来自一个简单模型,因为在大多数用例中,分配从设计上就是随机的。
  • 阶段2:使用 { Y 3 , X 3 , W 3 } \{Y_3, X_3, W_3\} {Y3​,X3​,W3​}通过最小化以下损失函数,通过机器学习拟合条件LATE模型 τ ^ ( X ) \hat{\tau}(X) τ^(X):
    L ( τ ^ ( X ) ) = E ^ [ ( m ^ 1 ( X ) − m ^ 0 ( X ) + Z ( Y − m ^ 1 ( X ) ) p Z − ( 1 − Z ) ( Y − m ^ 0 ( X ) ) 1 − p Z − ( e ^ 1 ( X ) − e ^ 0 ( X ) + Z ( W − e ^ 1 ( X ) ) p Z − ( 1 − Z ) ( W − e ^ 0 ( X ) ) 1 − p Z ) τ ^ ( X ) ) 2 ] L(\hat{\tau}(X))=\hat{E}[(\hat{m}_1(X)-\hat{m}_0(X)+\frac{Z(Y-\hat{m}_1(X))}{p_Z}-\frac{(1 - Z)(Y-\hat{m}_0(X))}{1 - p_Z}-(\hat{e}_1(X)-\hat{e}_0(X)+\frac{Z(W-\hat{e}_1(X))}{p_Z}-\frac{(1 - Z)(W-\hat{e}_0(X))}{1 - p_Z})\hat{\tau}(X))^2] L(τ^(X))=E^[(m^1​(X)−m^0​(X)+pZ​Z(Y−m^1​(X))​−1−pZ​(1−Z)(Y−m^0​(X))​−(e^1​(X)−e^0​(X)+pZ​Z(W−e^1​(X))​−1−pZ​(1−Z)(W−e^0​(X))​)τ^(X))2]
  • 阶段3:与DR - 学习器类似,使用不同的分区排列再次重复阶段1和阶段2两次进行估计。最终的条件LATE模型是这3个条件LATE模型的平均值。

基于树的算法

提升树

提升树方法由一组使用基于树的算法的方法构成,其分裂准则基于提升差异。提出了三种不同方式来量化分裂导致的散度增益:
D g a i n = D a f t e r s p l i t ( P T , P C ) − D b e f o r e s p l i t ( P T , P C ) D_{gain}=D_{aftersplit}(P_T, P_C)-D_{beforesplit}(P_T, P_C) Dgain​=Daftersplit​(PT​,PC​)−Dbeforesplit​(PT​,PC​)

其中 D D D衡量散度, P T P_T PT​和 P C P_C PC​分别指处理组和对照组中感兴趣结果的概率分布。该软件包中实现了三种量化散度的不同方式:KL散度、欧几里得距离和卡方。

KL散度

Kullback - Leibler(KL)散度由下式给出:
K L ( P : Q ) = ∑ k = l e f t , r i g h t p k log ⁡ p k q k KL(P:Q)=\sum_{k = left, right}p_k\log\frac{p_k}{q_k} KL(P:Q)=k=left,right∑​pk​logqk​pk​​

其中 p p p是处理组中的样本均值, q q q是对照组中的样本均值, k k k表示计算 p p p和 q q q所在的叶子节点。

欧几里得距离

欧几里得距离由下式给出:
E D ( P : Q ) = ∑ k = l e f t , r i g h t ( p k − q k ) 2 ED(P:Q)=\sum_{k = left, right}(p_k - q_k)^2 ED(P:Q)=k=left,right∑​(pk​−qk​)2

其中符号与上述相同。

卡方

最后, χ 2 \chi^2 χ2散度由下式给出:
χ 2 ( P : Q ) = ∑ k = l e f t , r i g h t ( p k − q k ) 2 q k \chi^2(P:Q)=\sum_{k = left, right}\frac{(p_k - q_k)^2}{q_k} χ2(P:Q)=∑k=left,right​qk​(pk​−qk​)2​

其中符号与上述相同。

DDP

delta-delta-p(ΔΔP)方法,其样本分裂准则定义如下:
Δ Δ P = ∣ ( P T ( y ∣ a 0 ) − P C ( y ∣ a 0 ) − ( P T ( y ∣ a 1 ) − P C ( y ∣ a 1 ) ) ) ∣ \Delta\Delta P = |(P_T(y|a_0)-P_C(y|a_0)-(P_T(y|a_1)-P_C(y|a_1)))| ΔΔP=∣(PT​(y∣a0​)−PC​(y∣a0​)−(PT​(y∣a1​)−PC​(y∣a1​)))∣

其中 a 0 a_0 a0​和 a 1 a_1 a1​是分裂A的结果, y y y是选定的类别, P T P_T PT​和 P C P_C PC​分别是处理组和对照组的响应率。换句话说,我们首先计算每个分支中的响应率差异( Δ P l e f t \Delta P_{left} ΔPleft​和 Δ P r i g h t \Delta P_{right} ΔPright​),随后计算它们之间的差异( Δ Δ P = ∣ Δ P l e f t − Δ P r i g h t ∣ \Delta\Delta P = |\Delta P_{left}-\Delta P_{right}| ΔΔP=∣ΔPleft​−ΔPright​∣)。

IDDP

基于ΔΔP方法,实现了IDDP方法,其样本分裂准则定义如下:

I D D P = Δ Δ P × I ( ϕ , ϕ l , ϕ r ) IDDP = \Delta\Delta P \times I(\phi, \phi_l, \phi_r) IDDP=ΔΔP×I(ϕ,ϕl​,ϕr​)

其中, Δ Δ P ∗ \Delta\Delta P^* ΔΔP∗定义为 Δ Δ P − ∣ E [ Y ( 1 ) − Y ( 0 ) ] ∣ X ∈ ϕ ∣ \Delta\Delta P - |E[Y(1) - Y(0)]|_{X \in \phi}| ΔΔP−∣E[Y(1)−Y(0)]∣X∈ϕ​∣, I ( ϕ , ϕ l , ϕ r ) I(\phi, \phi_l, \phi_r) I(ϕ,ϕl​,ϕr​)定义为:

I ( ϕ , ϕ l , ϕ r ) = H ( n t ( ϕ ) n ( ϕ ) , n c ( ϕ ) n ( ϕ ) ) × 2 1 + Δ Δ P ∗ × 3 + n t ( ϕ ) n ( ϕ ) H ( n t ( ϕ l ) n ( ϕ ) , n t ( ϕ r ) n ( ϕ ) ) + n c ( ϕ ) n ( ϕ ) × H ( n c ( ϕ l ) n ( ϕ ) , n c ( ϕ r ) n ( ϕ ) ) + 1 2 I(\phi, \phi_l, \phi_r) = H(\frac{n_t(\phi)}{n(\phi)}, \frac{n_c(\phi)}{n(\phi)}) \times \frac{2}{1 + \Delta\Delta P^*} \times \frac{3 + \frac{n_t(\phi)}{n(\phi)}H(\frac{n_t(\phi_l)}{n(\phi)}, \frac{n_t(\phi_r)}{n(\phi)}) + \frac{n_c(\phi)}{n(\phi)} \times H(\frac{n_c(\phi_l)}{n(\phi)}, \frac{n_c(\phi_r)}{n(\phi)}) + 1}{2} I(ϕ,ϕl​,ϕr​)=H(n(ϕ)nt​(ϕ)​,n(ϕ)nc​(ϕ)​)×1+ΔΔP∗2​×23+n(ϕ)nt​(ϕ)​H(n(ϕ)nt​(ϕl​)​,n(ϕ)nt​(ϕr​)​)+n(ϕ)nc​(ϕ)​×H(n(ϕ)nc​(ϕl​)​,n(ϕ)nc​(ϕr​)​)+1​

其中,熵 H H H定义为 H ( p , q ) = ( − p × log ⁡ 2 ( p ) ) + ( − q × log ⁡ 2 ( q ) ) H(p, q) = (-p \times \log_2(p)) + (-q \times \log_2(q)) H(p,q)=(−p×log2​(p))+(−q×log2​(q)), ϕ \phi ϕ是与当前决策节点相关联的特征空间的一个子集, ϕ l \phi_l ϕl​和 ϕ r \phi_r ϕr​分别是左子节点和右子节点。 n t ( ϕ ) n_t(\phi) nt​(ϕ)是处理样本的数量, n c ( ϕ ) n_c(\phi) nc​(ϕ)是对照样本的数量, n ( ϕ ) n(\phi) n(ϕ)是当前(父)节点中所有样本的数量。

IT(Interaction Tree)

交互树(IT),其样本分裂准则是在所有可行的分裂中最大化 G G G统计量:
G ( s ∗ ) = max ⁡ G ( s ) G(s^*) = \max G(s) G(s∗)=maxG(s)

其中 G ( s ) = t 2 ( s ) G(s) = t^2(s) G(s)=t2(s), t ( s ) t(s) t(s)定义为:

t ( s ) = ( y 1 L − y 0 L ) − ( y 1 R − y 0 R ) σ × 1 n 1 + 1 n 2 + 1 n 3 + 1 n 4 t(s) = \frac{(y_{1L} - y_{0L}) - (y_{1R} - y_{0R})}{\sigma \times \sqrt{\frac{1}{n_1} + \frac{1}{n_2} + \frac{1}{n_3} + \frac{1}{n_4}}} t(s)=σ×n1​1​+n2​1​+n3​1​+n4​1​ ​(y1L​−y0L​)−(y1R​−y0R​)​

其中 σ = ∑ i = 1 4 w i s i 2 \sigma = \sum_{i = 1}^{4} w_i s_i^2 σ=∑i=14​wi​si2​是常数方差的合并估计量, w i = ( n i − 1 ) / ∑ j = 1 4 ( n j − 1 ) w_i = (n_i - 1) / \sum_{j = 1}^{4}(n_j - 1) wi​=(ni​−1)/∑j=14​(nj​−1)。此外, y 1 L y_{1L} y1L​、 s 1 2 s_{1}^{2} s12​和 n 1 n_1 n1​分别是左子节点中处理组的样本均值、样本方差和样本大小。其他量也采用类似的表示方法。

请注意,此实现与原始实现的不同之处在于:(1) 剪枝技术;(2) 确定最佳树大小的验证方法。

CIT(Causal Inference Tree)

因果推断树(CIT),其样本分裂准则计算似然比检验统计量:

L R T ( s ) = − n τ L 2 × ln ⁡ ( n τ L S S E τ L ) − n τ R 2 × ln ⁡ ( n τ R S S E τ R ) + n τ L 1 ln ⁡ n τ L 1 + n τ L 0 ln ⁡ n τ L 0 + n τ R 1 ln ⁡ n τ R 1 + n τ R 0 ln ⁡ n τ R 0 LRT(s) = -\frac{n_{\tau L}}{2} \times \ln(\frac{n_{\tau L}}{SSE_{\tau L}}) - \frac{n_{\tau R}}{2} \times \ln(\frac{n_{\tau R}}{SSE_{\tau R}}) + n_{\tau L1} \ln n_{\tau L1} + n_{\tau L0} \ln n_{\tau L0} + n_{\tau R1} \ln n_{\tau R1} + n_{\tau R0} \ln n_{\tau R0} LRT(s)=−2nτL​​×ln(SSEτL​nτL​​)−2nτR​​×ln(SSEτR​nτR​​)+nτL1​lnnτL1​+nτL0​lnnτL0​+nτR1​lnnτR1​+nτR0​lnnτR0​

其中 n τ n_{\tau} nτ​、 n τ 0 n_{\tau 0} nτ0​和 n τ 1 n_{\tau 1} nτ1​分别是节点 τ \tau τ中的观测总数、分配到对照组的观测数以及分配到处理组的观测数。 S S E τ SSE_{\tau} SSEτ​定义为:

S S E τ = ∑ i ∈ τ : t i = 1 ( y i − y ^ t 1 ) 2 + ∑ i ∈ τ : t i = 0 ( y i − y ^ t 0 ) 2 SSE_{\tau} = \sum_{i \in \tau : t_i = 1}(y_i - \hat{y}_{t1})^2 + \sum_{i \in \tau : t_i = 0}(y_i - \hat{y}_{t0})^2 SSEτ​=i∈τ:ti​=1∑​(yi​−y^​t1​)2+i∈τ:ti​=0∑​(yi​−y^​t0​)2

y ^ t 0 \hat{y}_{t0} y^​t0​和 y ^ t 1 \hat{y}_{t1} y^​t1​分别是节点 τ \tau τ中对照组和处理组的样本平均响应。

请注意,此实现与原始实现的不同之处在于:(1) 剪枝技术;(2) 确定最佳树大小的验证方法。

CTS(Contextual Treatment Selection)

上下文处理选择(CTS)方法,其样本分裂准则定义如下:

Δ ^ μ ( s ) = p ^ ( ϕ l ∣ ϕ ) × max ⁡ t = 0 , … , K y ^ t ( ϕ l ) + p ^ ( ϕ r ∣ ϕ ) × max ⁡ t = 0 , … , K y ^ t ( ϕ r ) − max ⁡ t = 0 , … , K y ^ t ( ϕ ) \hat{\Delta}\mu(s) = \hat{p}(\phi_l | \phi) \times \max_{t = 0, \ldots, K} \hat{y}^t(\phi_l) + \hat{p}(\phi_r | \phi) \times \max_{t = 0, \ldots, K} \hat{y}^t(\phi_r) - \max_{t = 0, \ldots, K} \hat{y}^t(\phi) Δ^μ(s)=p^​(ϕl​∣ϕ)×t=0,…,Kmax​y^​t(ϕl​)+p^​(ϕr​∣ϕ)×t=0,…,Kmax​y^​t(ϕr​)−t=0,…,Kmax​y^​t(ϕ)

其中 ϕ l \phi_l ϕl​和 ϕ r \phi_r ϕr​分别指左叶和右叶中的特征子空间, p ^ ( ϕ j ∣ ϕ ) \hat{p}(\phi_j | \phi) p^​(ϕj​∣ϕ)表示在给定 ϕ \phi ϕ的情况下,主体处于 ϕ j \phi_j ϕj​的估计条件概率, y ^ t ( ϕ j ) \hat{y}^t(\phi_j) y^​t(ϕj​)是在处理 t t t下的条件期望响应。

价值优化方法

当处理成本较高时,该软件包支持用于分配处理组的方法。为了理解这个问题,将总体分为以下四类会有所帮助:

  • 依从者:这类人只有在接受处理时才会有有利的结果。
  • 总是接受者:这类人无论是否接受处理都会有有利的结果。
  • 从不接受者:这类人无论是否接受处理都不会有有利的结果。
  • 违抗者:这类人只有在不接受处理时才会有有利的结果。

反事实单元选择

提出了一种使用反事实逻辑选择处理单元的方法。假设选择上述不同类别单元有以下收益:

  • 依从者: β \beta β
  • 总是接受者: γ \gamma γ
  • 从不接受者: θ \theta θ
  • 违抗者: δ \delta δ

如果 X X X表示个体的特征集,单元选择问题可以表述如下:

argmax X β P ( complier ∣ X ) + γ P ( always - taker ∣ X ) + θ P ( never - taker ∣ X ) + δ P ( defier ∣ X ) \underset{X}{\text{argmax}} \beta P(\text{complier} | X) + \gamma P(\text{always - taker} | X) + \theta P(\text{never - taker} | X) + \delta P(\text{defier} | X) Xargmax​βP(complier∣X)+γP(always - taker∣X)+θP(never - taker∣X)+δP(defier∣X)

这个问题可以用反事实逻辑重新表述。假设 W = w W = w W=w表示个体接受处理, W = w ′ W = w' W=w′表示个体未接受处理。类似地,令 F = f F = f F=f表示个体有有利结果, F = f ′ F = f' F=f′表示个体有不利结果。那么优化问题变为:

argmax X β P ( f w , f w ′ ′ ∣ X ) + γ P ( f w , f w ′ ∣ X ) + θ P ( f w ′ , f w ′ ′ ∣ X ) + δ P ( f w ′ , f w ′ ∣ X ) \underset{X}{\text{argmax}} \beta P(f_w, f_{w'}' | X) + \gamma P(f_w, f_{w'} | X) + \theta P(f_{w'}, f_{w'}' | X) + \delta P(f_{w'}, f_{w'} | X) Xargmax​βP(fw​,fw′′​∣X)+γP(fw​,fw′​∣X)+θP(fw′​,fw′′​∣X)+δP(fw′​,fw′​∣X)

请注意,上述内容仅仅是根据相关用户细分的定义得出的。随后使用反事实逻辑在某些条件下解决上述优化问题。

注意:该软件包中当前的实现具有很强的实验性。

反事实价值估计器

该软件包中实现的反事实价值估计方法使用标准机器学习模型预测一个单元在不同处理条件下的结果。将一个单元分配到特定处理的预期值由下式给出:

E [ ( v − c c w ) Y w − i c w ] E[(v - cc_w)Y_w - ic_w] E[(v−ccw​)Yw​−icw​]

其中 Y w Y_w Yw​是在给定处理 w w w下有利事件(如转化)发生的概率, v v v是有利事件的价值, c c w cc_w ccw​是有利事件发生时触发的处理成本, i c w ic_w icw​是无论结果是否有利与处理相关的成本。

因果概率

如果一个结果在没有某个原因的情况下不会发生,那么这个原因对于该结果来说被称为是“必要的”。如果一个结果在有某个原因的情况下会发生,那么这个原因对于该结果来说被称为是“充分的”。如果上述两个条件都成立,那么这个原因对于该结果来说被称为是“必要且充分的”。Jin Tian and Judea Pearl表明,我们可以计算出一个原因属于上述三种类型中每一种的概率界限。

为了理解如何计算因果概率的界限,我们需要特殊的符号来表示反事实量。令 y t y_t yt​表示命题“如果处理组设置为‘处理’, y y y会发生”, y c ′ y_{c}' yc′​表示命题“如果处理组设置为‘对照’, y y y不会发生”,对于(假设为)二元结果和处理变量的其余两种组合也类似表示。

那么,处理对于 y y y的发生是“充分的”概率可以定义为:

P S = P ( y t ∣ c , y ′ ) P_S = P(y_t | c, y') PS​=P(yt​∣c,y′)

这是指在实际上处理设置为对照且结果未发生的情况下,如果处理设置为 t t t, y y y会发生的概率。

处理对于 y y y的发生是“必要的”概率可以定义为:

P N = P ( y c ′ ∣ t , y ) P_N = P(y_{c}' | t, y) PN​=P(yc′​∣t,y)

这是指在实际上 y y y发生且处理发生的情况下,如果处理设置为对照, y y y不会发生的概率。

最后,处理既是必要又是充分的概率定义为:

P N S = P ( y t , y c ′ ) P_{NS} = P(y_t, y_{c}') PNS​=P(yt​,yc′​)

它表示如果处理发生, y y y会发生;如果处理不发生, y y y不会发生。 P N S P_{NS} PNS​与 P N P_N PN​和 P S P_S PS​的关系如下:

P N S = P ( t , y ) P N + P ( c , y ′ ) P S P_{NS} = P(t, y)P_N + P(c, y')P_S PNS​=P(t,y)PN​+P(c,y′)PS​

在界定上述三个量时,除了实验数据,我们还利用观测数据。观测数据通过联合概率来表征:

P T Y = P ( t , y ) , P ( c , y ) , P ( t , y ′ ) , P ( c , y ′ ) P_{TY} = P(t, y), P(c, y), P(t, y'), P(c, y') PTY​=P(t,y),P(c,y),P(t,y′),P(c,y′)

这个程序的主要思想是将界定任务转化为一个线性规划问题(关于他们方法的现代实现

使用线性规划方法,并结合某些约束条件和观测数据,Jin Tian and Judea Pearl发现 P N S P_{NS} PNS​的精确下限为:

max ⁡ { 0 , P ( y t ) − P ( y c ) , P ( y ) − P ( y c ) , P ( y t ) − P ( y ) } \max\{0, P(y_t) - P(y_c), P(y) - P(y_c), P(y_t) - P(y)\} max{0,P(yt​)−P(yc​),P(y)−P(yc​),P(yt​)−P(y)}

精确上限为:

min ⁡ { P ( y t ) , P ( y c ′ ) , P ( t , y ) + P ( c , y ′ ) , P ( y t ) − P ( y c ) + P ( t , y ′ ) + P ( c , y ) } \min\{P(y_t), P(y_{c}'), P(t, y) + P(c, y'), P(y_t) - P(y_c) + P(t, y') + P(c, y)\} min{P(yt​),P(yc′​),P(t,y)+P(c,y′),P(yt​)−P(yc​)+P(t,y′)+P(c,y)}

他们使用类似的程序来找到 P S P_S PS​和 P N P_N PN​的界限。get_pns_bounds()函数使用Jin Tian and Judea Pearl中的结果计算这三个因果概率中每一个的界限。

选定的传统方法

该软件包支持选定的传统因果推断方法。这些方法通常用于使用观测(非实验)数据进行因果推断。在这类研究中,处理组和对照组之间观察到的差异通常不等于“潜在结果” E [ Y ( 1 ) − Y ( 0 ) ] E[Y(1) - Y(0)] E[Y(1)−Y(0)]之间的差异。因此,以下方法试图以不同方式处理这个问题。

匹配法

匹配法的总体思路是找到在相关特征方面尽可能相似的处理单元和未处理单元。因此,匹配方法可以被视为试图模仿随机对照试验的因果推断方法家族的一部分。

虽然有许多不同的方法来匹配处理单元和未处理单元,但最常见的方法是使用倾向得分:

e i ( X i ) = P ( W i = 1 ∣ X i ) e_i(X_i) = P(W_i = 1 | X_i) ei​(Xi​)=P(Wi​=1∣Xi​)

然后根据 e ( X ) e(X) e(X)使用某种距离准则(如 k : 1 k:1 k:1最近邻)来匹配处理单元和未处理单元。由于匹配通常在处理群体和对照群体之间进行,这种方法估计处理组的平均处理效应(ATT):

E [ Y ( 1 ) ∣ W = 1 ] − E [ Y ( 0 ) ∣ W = 1 ] E[Y(1) | W = 1] - E[Y(0) | W = 1] E[Y(1)∣W=1]−E[Y(0)∣W=1]

处理逆概率加权法

处理逆概率加权(IPTW)方法使用倾向得分 e e e,通过实际处理 W W W的概率的倒数来对处理群体和未处理群体进行加权。对于二元处理 W ∈ { 1 , 0 } W \in \{1, 0\} W∈{1,0}:

W e + 1 − W 1 − e \frac{W}{e} + \frac{1 - W}{1 - e} eW​+1−e1−W​

通过这种方式,IPTW方法可以被视为创建了一个人工总体,其中处理单元和未处理单元在其观测特征 X X X方面是相似的。

与匹配法相比,IPTW的一个可能优点是,由于处理单元和未处理单元之间缺乏重叠而丢弃的数据可能更少。该方法的一个已知问题是,极端的倾向得分可能会产生高度可变的估计量。已经提出了不同的方法来修剪和标准化IP权重。

两阶段最小二乘法(2SLS)

识别 W W W对 Y Y Y的处理效应的基本要求之一是,在给定协变量 X X X的条件下, W W W与 Y Y Y的潜在结果正交。如果 W W W和 Y Y Y都受到一个未观测到的变量(从 Y Y Y中去除 W W W的真实效应后的误差项)的影响,而这个变量不在 X X X中,那么这个条件可能会被违反。在这种情况下,工具变量方法试图借助与 W W W相关但与误差项不相关的第三个变量 Z Z Z来估计 W W W对 Y Y Y的效应。换句话说,工具变量 Z Z Z仅通过经过 W W W的有向路径与 Y Y Y相关。如果这些条件得到满足,在没有协变量的情况下, W W W对 Y Y Y的效应可以使用以下样本类似公式进行估计:

C o v ( Y i , Z i ) C o v ( W i , Z i ) \frac{Cov(Y_i, Z_i)}{Cov(W_i, Z_i)} Cov(Wi​,Zi​)Cov(Yi​,Zi​)​

工具变量估计最常用的方法是两阶段最小二乘法(2SLS)。在这种方法中,原因变量 W W W首先对工具变量 Z Z Z进行回归。然后,在第二阶段,将感兴趣的结果 Y Y Y对第一阶段模型的预测值进行回归。直观地说,通过仅使用由 Z Z Z的变化引起的 W W W的变化比例来估计 W W W对 Y Y Y的效应。具体来说,假设我们有线性模型:

Y = W α + X β + u = Ξ γ + u Y = W\alpha + X\beta + u = \Xi\gamma + u Y=Wα+Xβ+u=Ξγ+u

为方便起见,这里我们令 Ξ = [ W , X ] \Xi = [W, X] Ξ=[W,X]且 γ = [ α ′ , β ′ ] ′ \gamma = [\alpha', \beta']' γ=[α′,β′]′,假设我们有工具变量 Z Z Z,其列数至少与 W W W 的列数相同,令 Ω = [ Z , X ] \Omega = [Z, X] Ω=[Z,X],2SLS 估计量如下:

γ ^ 2 S L S = [ Ξ ′ Ω ( Ω ′ Ω ) − 1 Ω ′ Ξ ] − 1 [ Ξ ′ Ω ′ ( Ω ′ Ω ) − 1 Ω ′ Y ] \hat{\gamma}_{2SLS} = [\Xi'\Omega(\Omega'\Omega)^{-1}\Omega'\Xi]^{-1}[\Xi'\Omega'(\Omega'\Omega)^{-1}\Omega'Y] γ^​2SLS​=[Ξ′Ω(Ω′Ω)−1Ω′Ξ]−1[Ξ′Ω′(Ω′Ω)−1Ω′Y]

局部平均处理效应(LATE)

在许多情况下,处理措施 W W W 可能取决于受试者自己的选择,并且无法在实验环境中直接实施。然而,可以将用户随机分配到处理组/对照组,以便促使处理组中的用户接受处理。这就是不依从的情况,即用户可能不遵守他们被分配的状态 Z Z Z,决定是否接受处理。与价值优化方法部分类似,通常在这种情况下有 3 种类型的用户:

  • 依从者:这些人只有在被分配到处理组时才会接受处理。
  • 总是接受者:这些人无论被分配到哪个组都会接受处理。
  • 从不接受者:这些人无论被分配到哪个组都不会接受处理。

然而,为了便于识别,我们假设不存在违抗者,即那些只有在被分配到对照组时才会接受处理的人。

在这种情况下,可以测量依从者的处理效应:

τ ^ C o m p l i e r = E [ Y ∣ Z = 1 ] − E [ Y ∣ Z = 0 ] E [ W ∣ Z = 1 ] − E [ W ∣ Z = 0 ] \hat{\tau}_{Complier} = \frac{E[Y|Z = 1] - E[Y|Z = 0]}{E[W|Z = 1] - E[W|Z = 0]} τ^Complier​=E[W∣Z=1]−E[W∣Z=0]E[Y∣Z=1]−E[Y∣Z=0]​

这就是局部平均处理效应(LATE)。如果我们将分配状态 Z Z Z 作为工具变量,该估计量也等同于 2SLS。

针对平均处理效应(ATE)的靶向最大似然估计(TMLE)

靶向最大似然估计(TMLE)提供了一种双稳健半参数方法,借助机器学习算法直接“针对”平均处理效应。与其他方法(包括结果回归和处理逆概率加权)相比,TMLE 通常表现更好,特别是在处理有偏处理和异常值时。

给定二元处理 W W W、协变量 X X X 和结果 Y Y Y,针对 ATE 的 TMLE 按以下步骤进行:

  • 步骤 1
    使用交叉拟合通过机器学习估计倾向得分 e ^ ( x ) \hat{e}(x) e^(x)、处理组的预测结果 m ^ 1 ( x ) \hat{m}_1(x) m^1​(x) 以及对照组的预测结果 m ^ 0 ( x ) \hat{m}_0(x) m^0​(x)。

  • 步骤 2
    将 Y Y Y 缩放为 Y ~ = Y − min ⁡ Y max ⁡ Y − min ⁡ Y \widetilde{Y} = \frac{Y - \min Y}{\max Y - \min Y} Y =maxY−minYY−minY​,使得 Y ~ ∈ [ 0 , 1 ] \widetilde{Y} \in [0, 1] Y ∈[0,1]。使用相同的缩放函数将 m ^ i ( x ) \hat{m}_i(x) m^i​(x) 转换为 m ~ i ( x ) \widetilde{m}_i(x) m i​(x), i = 0 , 1 i = 0, 1 i=0,1。裁剪缩放后的函数,使其值保持在单位区间内。

  • 步骤 3
    令 Q = log ⁡ ( m ~ W ( X ) 1 − m ~ W ( X ) ) Q = \log(\frac{\widetilde{m}_W(X)}{1 - \widetilde{m}_W(X)}) Q=log(1−m W​(X)m W​(X)​)。最大化以下伪对数似然函数:

max ⁡ h 0 , h 1 − 1 N ∑ i [ Y ~ i log ⁡ ( 1 + exp ⁡ ( − Q i − h 0 ( 1 − W ) 1 − e ^ ( X i ) − h 1 W e ^ ( X i ) ) ) + ( 1 − Y ~ i ) log ⁡ ( 1 + exp ⁡ ( Q i + h 0 ( 1 − W ) 1 − e ^ ( X i ) + h 1 W e ^ ( X i ) ) ) ] \max_{h_0, h_1} -\frac{1}{N} \sum_{i} [\widetilde{Y}_i \log(1 + \exp(-Q_i - \frac{h_0(1 - W)}{1 - \hat{e}(X_i)} - \frac{h_1W}{\hat{e}(X_i)})) + (1 - \widetilde{Y}_i) \log(1 + \exp(Q_i + \frac{h_0(1 - W)}{1 - \hat{e}(X_i)} + \frac{h_1W}{\hat{e}(X_i)}))] h0​,h1​max​−N1​i∑​[Y i​log(1+exp(−Qi​−1−e^(Xi​)h0​(1−W)​−e^(Xi​)h1​W​))+(1−Y i​)log(1+exp(Qi​+1−e^(Xi​)h0​(1−W)​+e^(Xi​)h1​W​))]

  • 步骤 4
    令:

Q ~ 0 = 1 1 + exp ⁡ ( − Q − h 0 1 − e ^ ( X ) ) \widetilde{Q}_0 = \frac{1}{1 + \exp(-Q - \frac{h_0}{1 - \hat{e}(X)})} Q ​0​=1+exp(−Q−1−e^(X)h0​​)1​
Q ~ 1 = 1 1 + exp ⁡ ( − Q − h 1 e ^ ( X ) ) \widetilde{Q}_1 = \frac{1}{1 + \exp(-Q - \frac{h_1}{\hat{e}(X)})} Q ​1​=1+exp(−Q−e^(X)h1​​)1​

将 Q ~ 1 \widetilde{Q}_1 Q ​1​ 和 Q ~ 0 \widetilde{Q}_0 Q ​0​ 的差异重新缩放回原始范围后,取样本平均值作为 ATE 的估计值。

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

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

相关文章

解锁深度学习激活函数

在深度学习的广袤天地里,激活函数宛如隐匿于神经网络架构中的神奇密码,掌控着模型学习与表达的关键力量。今天,就让我们一同深入探究这些激活函数的奇妙世界,揭开它们神秘的面纱。 一、激活函数为何不可或缺? 想象一…

从零到有的游戏开发(visual studio 2022 + easyx.h)

引言 本文章适用于C语言初学者掌握基本的游戏开发, 我将用详细的步骤引领大家如何开发属于自己的游戏。 作者温馨提示:不要认为开发游戏很难,一些基本的游戏逻辑其实很简单, 关于游戏的开发环境也不用担心,我会详细…

大数据专业学习路线

大数据专业学习路线 目录 基础知识核心技术进阶技能实战项目职业发展学习资源学习计划常见问题 1. 基础知识 1.1 编程语言 Python:大数据分析的基础语言 基础语法和数据类型函数和模块面向对象编程文件操作和异常处理常用库:NumPy, Pandas, Matplot…

flink部署使用(flink-connector-jdbc)连接达梦数据库并写入读取数据

flink介绍 1)Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。 2)在实时计算或离线任务中,往往需要…

用swift playground写个ios应用和大模型或者网站交互

import SwiftUIstruct ContentView: View {State private var textFieldText: String ""State private var outputText: String "输出将会显示在这里"private let tip:String "消息已发送,请等待"State private var history:[Stri…

springboot+vue2集成JWT token实现权限验证

前端项目搭建参考: Vue项目的搭建和启动_vue项目启动 csdn-CSDN博客 Vue ElementUI 登录页面_vue用户登录页面-CSDN博客 跨域问题前端解决-CSDN博客 实现思路: 1. 实现的目的:为了保护网站安全信息,使用jwt进行权限验证&#xf…

Cursor编程-从入门到精通__0409

早期的Github Copilot 最近更新了,支持Agent编程,字节跳动Trae使用(免费),但成熟程度不如Cursor,Cursor前50次免费 Copilot VS Cursor*** 1,Cursor VSCode 二次开发,IDE级别 2&…

MyBatis 详解及代码示例

MyBatis 是一个 半自动 ORM 框架,主要用于 Java 与数据库之间的持久化操作,它本质是对 JDBC 的封装 全名:MyBatis(前身 iBATIS)核心作用:自动将 SQL 执行结果映射为 Java 对象;也可以将 Java 对…

1.6-抓包技术(Burp Suite\Yakit抓包\Web、APP、小程序)

1.6-抓包技术(Burp Suite\Yakit抓包\Web、APP、小程序) 如果要使用抓包软件,基本上第一步都是要安装证书的。原因如下: 客户端(浏览器或应用)会检测到证书不受信任,并弹出 证书错误&#xff0…

Java 大视界 -- 基于 Java 的大数据隐私保护在金融客户信息管理中的实践与挑战(178)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

第十届 蓝桥杯 嵌入式 省赛

一、分析 这届的真题,有点像第七届的液位检测。 这届的题目开始,貌似比赛描述的功能,逻辑上变得更好梳理了。一开始就把大致的功能给你说明一遍,不像之前都是一块一块的说明。 1. 基本功能 1)测量竞赛板上电位器 R…

实现usb的MTP功能

前言:最终结果根据用户自主选择可实现host和device功能的切换。 效果展示: 当插入usb时设备会弹窗 当用户选择设备模式时pc端就会出现mtp设备盘符 实现mtp设备 ubuntu架构根文件系统通过uMTP-Responder实现usb的MTP功能 添加服务 /home/flynn/firfly_rootfs/lib/system…

React-05React中props属性(传递数据),propTypes校验,类式与函数式组件props的使用

1.类式组件props基本数据读取与解构运算符传递 <script type"text/babel">// 创建组件class PersonalInfo extends React.Component {render() {// 读取props属性 并读取值console.log(props,this.props);return(<ul><li>姓名&#xff1a;{this.p…

PCI认证 密钥注入 ECC算法工具 NID_secp521r1 国密算法 openssl 全套证书生成,从证书提取公私钥数组 x,y等

步骤 1.全套证书已经生成。OK 2.找国芯要ECC加密解密签名验签代码。给的逻辑说明没有示例代码很难的上。 3.集成到工具 与SP联调。 1.用openssl全套证书生成及验证 注意&#xff1a;这里CA 签发 KLD 证书用的是SHA256。因为芯片只支持SHA256算法,不支持SHA512。改成统一。…

蓝桥杯每日刷题c++

目录 P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 (luogu.com.cn) P8748 [蓝桥杯 2021 省 B] 时间显示 - 洛谷 (luogu.com.cn) P10900 [蓝桥杯 2024 省 C] 数字诗意 - 洛谷 (luogu.com.cn) P10424 [蓝桥杯 2024 省 B] 好数 - 洛谷 (luogu.com.cn) P8754 [蓝桥杯 2021 省 AB2…

oracle 数据库字段类型为NUMBER(5,2)时,并且数据库值为0.1,为什么Java执行SQL查出来时为“.1“?

在 Oracle 数据库中&#xff0c;当字段类型为 NUMBER(5,2) 且存储的值为 0.1 时&#xff0c;Java 程序查询结果可能显示为 ".1"&#xff08;省略前导零&#xff09;&#xff0c;这是由 Oracle JDBC 驱动默认的数字格式化行为 导致的。以下是原因分析和解决方案&#…

3月AI论文精选十篇

1. Feature-Level Insights into Artificial Text Detection with Sparse Autoencoders[1] 核心贡献&#xff1a;通过稀疏自编码器揭示AI生成文本的检测特征&#xff0c;提出基于特征分布的鉴别方法。研究发现&#xff0c;AI文本在稀疏编码空间中呈现独特的"高频低幅"…

STM32在裸机(无RTOS)环境下,需要手动实现队列机制来替代FreeRTOS的CAN发送接收函数

xQueueSendToBackFromISR(ecuCanRxQueue, hcan->pRxMsg, &xHigherPriorityTaskWoken)&#xff0c;xQueueReceive(mscCanRxQueue,&mscRxMsg,0)和xQueueSendToBack(mscCanTxQueue, &TxMessageTemp, 0 )这3个函数&#xff0c;在裸机下实现&#xff1a; 在裸机&…

使用PX4,gazebo,mavros为旋翼添加下视的相机(仿真采集openrealm数据集-第一步)

目录 一.方法一&#xff08;没成功&#xff09; 1.运行PX4 2.运行mavros通讯 3.启动仿真世界和无人机 &#xff08;1&#xff09;单独测试相机 &#xff08;2&#xff09;make px4_sitl gazebo启动四旋翼iris无人机 二.方法二&#xff08;成功&#xff09; 1.通过 rosl…

7、nRF52xx蓝牙学习(nrf_gpiote.c库函数学习)

续前一篇文章。 3、nrfx_gpiote_in_event_enable void nrfx_gpiote_in_event_enable(nrfx_gpiote_pin_t pin, bool int_enable) {NRFX_ASSERT(nrf_gpio_pin_present_check(pin));NRFX_ASSERT(pin_in_use_by_gpiote(pin));if (pin_in_use_by_port(pin)){nrf_gpiote_polarity_t…