潜在结果框架(Potential outcomes)与工具变量(Instrumental variable)介绍

本文主要是介绍潜在结果框架(Potential outcomes)与工具变量(Instrumental variable)介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Potential outcomes framework

什么是potential outcome呢?考虑在医学中,X=0表示不吃药,X=1表示吃药,那么很显然,一个人是没有办法同时吃药与不吃药的,所以我们只能够观测到其中的一个结果,即 Y ( 0 ) \displaystyle Y( 0) Y(0) Y ( 1 ) \displaystyle Y( 1) Y(1),而X只是用于选择观测的结果。

在这里插入图片描述

然而每个人对于吃药的结果是有可能不同的,比如有的人不管吃不吃都没法变好,有的人吃了就能恢复了,有的人吃了反而更难受了,还有的不管吃不吃都能恢复,对应着以下四类。

在这里插入图片描述

可记为

P ( Y ( 0 ) = 0 , Y ( 1 ) = 0 ) = P ( N R ) P ( Y ( 0 ) = 0 , Y ( 1 ) = 1 ) = P ( H E ) P ( Y ( 0 ) = 1 , Y ( 1 ) = 0 ) = P ( H U ) P ( Y ( 0 ) = 1 , Y ( 1 ) = 1 ) = P ( A R ) P( Y( 0) =0,Y( 1) =0) =P( NR)\\ P( Y( 0) =0,Y( 1) =1) =P( HE)\\ P( Y( 0) =1,Y( 1) =0) =P( HU)\\ P( Y( 0) =1,Y( 1) =1) =P( AR) P(Y(0)=0,Y(1)=0)=P(NR)P(Y(0)=0,Y(1)=1)=P(HE)P(Y(0)=1,Y(1)=0)=P(HU)P(Y(0)=1,Y(1)=1)=P(AR)

基于上面的各种情况,我们用Average Causal Effect(ACE)计算的因果效应将是:

A C E ( X → Y ) ≡ E [ Y ( 1 ) − Y ( 0 ) ] = 0 ∗ P ( N R ) + 1 ∗ P ( H E ) + 0 ∗ P ( H U ) + 1 ∗ P ( A R ) − ( 0 ∗ P ( N R ) + 0 ∗ P ( H E ) + 1 ∗ P ( H U ) + 1 ∗ P ( A R ) ) = P ( H E ) + P ( A R ) − P ( H U ) − P ( A R ) = P ( H E ) − P ( H U ) ∈ [ − 1 , 1 ] \begin{aligned} ACE\left( X\rightarrow Y\right) & \equiv E[ Y( 1) -Y( 0)]\\ & =0*P( NR) +1*P( HE) +0*P( HU) +1*P( AR)\\ & -( 0*P( NR) +0*P( HE) +1*P( HU) +1*P( AR))\\ & =P( HE) +P( AR) -P( HU) -P( AR)\\ & =P( HE) -P( HU) \in [ -1,1] \end{aligned} ACE(XY)E[Y(1)Y(0)]=0P(NR)+1P(HE)+0P(HU)+1P(AR)(0P(NR)+0P(HE)+1P(HU)+1P(AR))=P(HE)+P(AR)P(HU)P(AR)=P(HE)P(HU)[1,1]

从随机试验估计ACE

那么ACE能不能从样本总估计呢?当满足ignorebility的时候就可以:

X ⊥ Y ( 0 ) , X ⊥ Y ( 1 ) X\bot Y( 0) ,\ X\bot Y( 1) XY(0), XY(1)

于是

P ( Y ( 0 ) = y ) = P ( Y ( 0 ) = y ∣ X = 0 ) = P ( Y = y ∣ X = 0 ) P ( Y ( 1 ) = y ) = P ( Y ( 1 ) = y ∣ X = 1 ) = P ( Y = y ∣ X = 1 ) P( Y( 0) =y) =P( Y( 0) =y|X=0) =P( Y=y|X=0)\\ P( Y( 1) =y) =P( Y( 1) =y|X=1) =P( Y=y|X=1) P(Y(0)=y)=P(Y(0)=yX=0)=P(Y=yX=0)P(Y(1)=y)=P(Y(1)=yX=1)=P(Y=yX=1)

此外
P ( Y ( 0 ) = 0 ) = ∑ y P ( Y ( 0 ) = 0 , Y ( 1 ) = y ) = P ( N R ) + P ( H E ) = P ( Y = 0 ∣ X = 0 ) P ( Y ( 0 ) = 1 ) = ∑ y P ( Y ( 0 ) = 1 , Y ( 1 ) = y ) = P ( H U ) + P ( A R ) = P ( Y = 1 ∣ X = 0 ) P ( Y ( 1 ) = 0 ) = ∑ y P ( Y ( 0 ) = y , Y ( 1 ) = 0 ) = P ( N R ) + P ( H U ) = P ( Y = 0 ∣ X = 1 ) P ( Y ( 1 ) = 1 ) = ∑ y P ( Y ( 0 ) = y , Y ( 1 ) = 1 ) = P ( H E ) + P ( A R ) = P ( Y = 1 ∣ X = 1 ) (1) \begin{aligned} P( Y( 0) =0) =\sum _{y} P( Y( 0) =0,Y( 1) =y) =P( NR) +P( HE) =P( Y=0|X=0) \\ P( Y( 0) =1) =\sum _{y} P( Y( 0) =1,Y( 1) =y) =P( HU) +P( AR) =P( Y=1|X=0)\\ P( Y( 1) =0) =\sum _{y} P( Y( 0) =y,Y( 1) =0) =P( NR) +P( HU) =P( Y=0|X=1) \\ P( Y( 1) =1) =\sum _{y} P( Y( 0) =y,Y( 1) =1) =P( HE) +P( AR) =P( Y=1|X=1) \end{aligned} \tag{1} P(Y(0)=0)=yP(Y(0)=0,Y(1)=y)=P(NR)+P(HE)=P(Y=0X=0)P(Y(0)=1)=yP(Y(0)=1,Y(1)=y)=P(HU)+P(AR)=P(Y=1X=0)P(Y(1)=0)=yP(Y(0)=y,Y(1)=0)=P(NR)+P(HU)=P(Y=0X=1)P(Y(1)=1)=yP(Y(0)=y,Y(1)=1)=P(HE)+P(AR)=P(Y=1X=1)(1)
注意上述等式,只有在满足ignorebility的时候才成立的,此时ACE可以用

P ( Y = 1 ∣ X = 1 ) − P ( Y = 1 ∣ X = 0 ) = P ( H E ) − P ( H U ) P( Y=1|X=1) -P( Y=1|X=0) =P( HE) -P( HU) P(Y=1X=1)P(Y=1X=0)=P(HE)P(HU)

得到。

反事实与随机试验

从上面的分析我们可以发现,我们只能从实验数据中得到4类人群比例的两两组合,却没有办法得到精确的 P ( N R ) , P ( H E ) , P ( H U ) , P ( A R ) \displaystyle P( NR) ,P( HE) ,P( HU) ,P( AR) P(NR),P(HE),P(HU),P(AR)的值。

为什么我们需要在意他们每个人群的比例呢?直接算ACE不就好了?其实,ACE是一个“不太完善”的指标,因为ACE只是考虑的人群中的平均有效性,但忽略了那些会因为吃药而因此受伤的人,如果要正确的评价药效,那么我们应该用以下“完善”的指标:

吃 药 收 益 = a P ( N R ) + b P ( H E ) + c P ( H U ) + d P ( A R ) 不 吃 药 收 益 = e P ( N R ) + f P ( H E ) + g P ( H U ) + h P ( A R ) 吃药收益=aP( NR) +bP( HE) +cP( HU) +dP( AR)\\ 不吃药收益=eP( NR) +fP( HE) +gP( HU) +hP( AR) =aP(NR)+bP(HE)+cP(HU)+dP(AR)=eP(NR)+fP(HE)+gP(HU)+hP(AR)

其中a,b,c,d对应了每个不同人群下,吃药的收益,而e,f,g,h则是每一类人不吃药的收益,我们的目标是看看上述那个收益较大。显然,通过设置不同的收益,我们会有不同的决策。

但可惜的是,这是一个counterfatual问题,你是无法知道每一类人的比例的,为什么?不妨想想自己属于哪类人?你肯定无法给出答案,毕竟你无法同时知道自己吃药与不吃药后的状态,你只能观测其中一个。

所以我们观测的只是反事实的一小部分而已。

反事实与非随机试验(纯观测数据)

如果没有随机试验,这意味着ignobility是无法满足的,此时,我们没有办法从纯观测数据中得到正确的ACE了,那么我们能不能找到ACE的一个范围呢?考虑以下例子,

在这里插入图片描述

有的人使用了安慰剂,有的人使用了药,但是是否决定用药是非随机的。在这种情况下,我们尝试分析下, P ( H E ) \displaystyle P( HE) P(HE) P ( H U ) \displaystyle P( HU) P(HU)的最大值和最小值。

首先HE是吃了药才好,但不吃药就不好的人。首先 P ( Y = 0 ∣ X = 0 ) \displaystyle P( Y=0|X=0) P(Y=0X=0)里面可能有HE,也可能有NR,就是永远不好的人,另外, P ( Y = 1 ∣ X = 1 ) \displaystyle P( Y=1|X=1) P(Y=1X=1)中可能有HE,也可能有AR,即吃不吃药都好的人。因此 P ( H E ) \displaystyle P( HE) P(HE)的最大值就是当NR,AR都是0的时候,即
m a x P ( H E ) = P ( Y = 0 ∣ X = 0 ) + P ( Y = 1 ∣ X = 1 ) = 6 + 7 20 = 0.65 max\ P( HE) =P( Y=0|X=0) +P( Y=1|X=1) =\frac{6+7}{20} =0.65 max P(HE)=P(Y=0X=0)+P(Y=1X=1)=206+7=0.65

那么HU的最小值是什么呢?类似的, P ( Y = 1 ∣ X = 0 ) \displaystyle P( Y=1|X=0) P(Y=1X=0)包含了AR和HU的人, P ( Y = 0 ∣ X = 1 ) \displaystyle P( Y=0|X=1) P(Y=0X=1)包含了NR和HU的人,那显然最小值就是这两拨人中,全是AR和NR的人了,于是

m i n P ( H U ) = 0 min\ P( HU) =0 min P(HU)=0

从而 m a x A C E = 6 + 7 20 − 0 \displaystyle max\ ACE=\frac{6+7}{20} -0 max ACE=206+70.

类似的,

m i n P ( H E ) = 0 m a x P ( H U ) = 4 + 3 20 = 0.35 min\ P( HE) =0\\ max\ P( HU) =\frac{4+3}{20} =0.35 min P(HE)=0max P(HU)=204+3=0.35

从而 m i n A C E = 0 − 4 + 3 20 \displaystyle min\ ACE=0-\frac{4+3}{20} min ACE=0204+3. 所以一个伤心的事实是,我们没有办法从纯观察数据中推断出ACE到底是正面还是负面的效果,他必然是经过0点的。

上面是一个比较直接的做法,我们可以尝试严格地证明一下这个bound。
首先,从上述的分析可以看出来,我们的观察数据本质上就是4个group中的人群的各种组合:
P ( X = 0 , Y = 0 ) = ∑ y P ( X = 0 , Y ( 0 ) = 0 , Y ( 1 ) = y ) = P ( X = 0 , N R ) + P ( X = 0 , H E ) P ( X = 0 , Y = 1 ) = ∑ y P ( X = 0 , Y ( 0 ) = 1 , Y ( 1 ) = y ) = P ( X = 0 , H U ) + P ( X = 0 , A R ) P ( X = 1 , Y = 0 ) = ∑ y P ( X = 1 , Y ( 0 ) = y , Y ( 1 ) = 0 ) = P ( X = 1 , N R ) + P ( X = 1 , H U ) P ( X = 1 , Y = 1 ) = ∑ y P ( X = 1 , Y ( 0 ) = y , Y ( 1 ) = 1 ) = P ( X = 1 , H E ) + P ( X = 1 , A R ) (2) \begin{aligned} P( X=0,Y=0) =\sum _{y} P( X=0,Y( 0) =0,Y( 1) =y) =P( X=0,NR) +P( X=0,HE) \\ P( X=0,Y=1) =\sum _{y} P( X=0,Y( 0) =1,Y( 1) =y) =P( X=0,HU) +P( X=0,AR)\\ P( X=1,Y=0) =\sum _{y} P( X=1,Y( 0) =y,Y( 1) =0) =P( X=1,NR) +P( X=1,HU) \\ P( X=1,Y=1) =\sum _{y} P( X=1,Y( 0) =y,Y( 1) =1) =P( X=1,HE) +P( X=1,AR) \end{aligned} \tag{2} P(X=0,Y=0)=yP(X=0,Y(0)=0,Y(1)=y)=P(X=0,NR)+P(X=0,HE)P(X=0,Y=1)=yP(X=0,Y(0)=1,Y(1)=y)=P(X=0,HU)+P(X=0,AR)P(X=1,Y=0)=yP(X=1,Y(0)=y,Y(1)=0)=P(X=1,NR)+P(X=1,HU)P(X=1,Y=1)=yP(X=1,Y(0)=y,Y(1)=1)=P(X=1,HE)+P(X=1,AR)(2)
对比公式(1),我们就可以发现,由于X的取值不同会影响不同群体的人数,从而导致ACE的计算失效。我们还能发现

P ( Y = 0 , X = 0 ) + P ( Y = 1 , X = 1 ) = P ( X = 0 , N R ) + P ( X = 0 , H E ) + P ( X = 1 , H E ) + P ( X = 1 , A R ) = P ( X = 0 , N R ) + P ( H E ) + P ( X = 1 , A R ) ⩾ P ( H E ) \begin{aligned} & P( Y=0,X=0) +P( Y=1,X=1)\\ = & P( X=0,NR) +P( X=0,HE) +P( X=1,HE) +P( X=1,AR)\\ = & P( X=0,NR) +P( HE) +P( X=1,AR)\\ \geqslant & P( HE) \end{aligned} ==P(Y=0,X=0)+P(Y=1,X=1)P(X=0,NR)+P(X=0,HE)+P(X=1,HE)+P(X=1,AR)P(X=0,NR)+P(HE)+P(X=1,AR)P(HE)

因此,类似的
0 ⩽ H E ⩽ P ( X = 0 , Y = 0 ) + P ( X = 1 , Y = 1 ) 0 ⩽ H U ⩽ P ( X = 0 , Y = 1 ) + P ( X = 1 , Y = 0 ) 0 ⩽ N R ⩽ P ( X = 0 , Y = 0 ) + P ( X = 1 , Y = 0 ) 0 ⩽ A R ⩽ P ( X = 0 , Y = 1 ) + P ( X = 1 , Y = 1 ) (3) \begin{aligned} 0\leqslant HE\leqslant P( X=0,Y=0) +P( X=1,Y=1) \\ 0\leqslant HU\leqslant P( X=0,Y=1) +P( X=1,Y=0) \\ 0\leqslant NR\leqslant P( X=0,Y=0) +P( X=1,Y=0)\\ 0\leqslant AR\leqslant P( X=0,Y=1) +P( X=1,Y=1) \end{aligned} \tag{3} 0HEP(X=0,Y=0)+P(X=1,Y=1)0HUP(X=0,Y=1)+P(X=1,Y=0)0NRP(X=0,Y=0)+P(X=1,Y=0)0ARP(X=0,Y=1)+P(X=1,Y=1)(3)
最后,回忆下,
P ( Y ( x 0 ) = 1 ) = P ( H U ) + P ( A R ) P ( Y ( x 1 ) = 1 ) = P ( H E ) + P ( A R ) (4) \begin{aligned} P( Y( x_{0}) =1) =P( HU) +P( AR)\\ P( Y( x_{1}) =1) =P( HE) +P( AR) \end{aligned} \tag{4} P(Y(x0)=1)=P(HU)+P(AR)P(Y(x1)=1)=P(HE)+P(AR)(4)
因此,结合公式(2),(4),我们有
P ( X = 0 , Y = 1 ) ⩽ P ( Y ( x 0 ) = 1 ) ⩽ 1 − P ( X = 0 , Y = 0 ) P ( X = 1 , Y = 1 ) ⩽ P ( Y ( x 1 ) = 1 ) ⩽ 1 − P ( X = 1 , Y = 0 ) (5) \begin{aligned} P( X=0,Y=1) \leqslant P( Y( x_{0}) =1) \leqslant 1-P( X=0,Y=0)\\ P( X=1,Y=1) \leqslant P( Y( x_{1}) =1) \leqslant 1-P( X=1,Y=0) \end{aligned} \tag{5} P(X=0,Y=1)P(Y(x0)=1)1P(X=0,Y=0)P(X=1,Y=1)P(Y(x1)=1)1P(X=1,Y=0)(5)
根据公式(3)(5)的不等式,我们可以用图把他们画出来,在这里,我们来画一个三维图:

在这里插入图片描述

HE轴上的点表示所有人都是HE,HU轴上的点则表示所有人都是HU,AR轴上的点表示所有人都是AR,最后原点,表示所有人都是NR,因为此时AR,HE,HU都是0,所以都剩下NR了,也就是NR可以通过1-AR-HE-HU得到。

接下来,我们来计算一下这些bound:
0 ⩽ H E ⩽ P ( X = 0 , Y = 0 ) + P ( X = 1 , Y = 1 ) = 7 + 6 20 0 ⩽ H U ⩽ P ( X = 0 , Y = 1 ) + P ( X = 1 , Y = 0 ) = 3 + 7 20 0 ⩽ A R ⩽ P ( X = 0 , Y = 1 ) + P ( X = 1 , Y = 1 ) = 3 + 6 20 3 20 = P ( X = 0 , Y = 1 ) ⩽ P ( H U ) + P ( A R ) ⩽ 1 − P ( X = 0 , Y = 0 ) = 1 − 7 20 6 20 = P ( X = 1 , Y = 1 ) ⩽ P ( H E ) + P ( A R ) ⩽ 1 − P ( X = 1 , Y = 0 ) = 1 − 4 20 0\leqslant HE\leqslant P( X=0,Y=0) +P( X=1,Y=1) =\frac{7+6}{20}\\ 0\leqslant HU\leqslant P( X=0,Y=1) +P( X=1,Y=0) =\frac{3+7}{20}\\ 0\leqslant AR\leqslant P( X=0,Y=1) +P( X=1,Y=1) =\frac{3+6}{20}\\ \frac{3}{20} =P( X=0,Y=1) \leqslant P( HU) +P( AR) \leqslant 1-P( X=0,Y=0) =1-\frac{7}{20}\\ \frac{6}{20} =P( X=1,Y=1) \leqslant P( HE) +P( AR) \leqslant 1-P( X=1,Y=0) =1-\frac{4}{20} 0HEP(X=0,Y=0)+P(X=1,Y=1)=207+60HUP(X=0,Y=1)+P(X=1,Y=0)=203+70ARP(X=0,Y=1)+P(X=1,Y=1)=203+6203=P(X=0,Y=1)P(HU)+P(AR)1P(X=0,Y=0)=1207206=P(X=1,Y=1)P(HE)+P(AR)1P(X=1,Y=0)=1204

我们可以用Mathematica画出来看看:

RegionPlot3D[{y + z <= 1 - 7/20 && y + z >= 3/20 && x + z <= 1 - 4/20 && x + z >= 6/20}, {x, 0, (7 + 6)/20}, {y, 0, (7 + 3)/20}, {z, 0, (3 + 6)/20}, PlotPoints -> 100, Mesh -> None, AxesLabel -> {"HE", "HU", "AR"}, PlotStyle -> Directive[Yellow, Opacity[0.3]]]

在这里插入图片描述

于是,这堆平面里面,最里面的部分就是可行域

在这里插入图片描述

因为ACE只关心HE和HU,所以我们就只看这幅图的底部或者顶部投影,就是所有HU,HE的取值

在这里插入图片描述

这幅图告诉我们,HE的取值区间为[0,0.65],HU的取值区间为[0,0.35],这与我们的分析是一致的。虽然这个东西看起来没什么用,但这个分析方法可以帮助我们分析更多的问题,比如工具变量问题。

工具变量(Instrumental Variables)

显然,当存在confounder的时候ACE是无法识别的,

在这里插入图片描述

这种时候往往采用工具变量的方法

在这里插入图片描述

我们假设存在一个z,不受confouder的影响。举个例子,

在这里插入图片描述

Z表示医生建议吃的药,X表示病人是否真的吃药,Y表示是否变好。这个例子里,简化了下问题,当医生决定不开药的时候,病人是无法得到药的,所以不可能存在 Z = 0 , X = 1 \displaystyle Z=0,X=1 Z=0,X=1的情况。

那么在这种情况下,我们能不能找到X对Y的ACE呢?

首先,根据上一节我们知道,对于每一个关于X,Y的观察数据,我们都能够得到ACE的边界(尽管看起来没什么用),但在这里就不一样了,因为我们发现,不同的z有不同的关于X,Y的观察数据,唯一不同的是X的分布不太一样(因为受到了Z的影响),但我们知道,不管X的分布怎么变,因果效应ACE都是不变的

在这里插入图片描述

所以,我们可以从两个不同Z的观察数据,估计其不同人群的比例,并取交集

在这里插入图片描述

取交集之后,我们再看底部,

在这里插入图片描述

可以发现,我们得到了一个不再经过0点的范围,从这个范围我们可以给出ACE的bound是[0.39,0.78]。事实上,Z可以有更多的取值,我们只需要简单的将他们相交就能得到范围的估计。

在这里插入图片描述

当前很多关于ACE的bound本质上就是这个取交集的操作,如上图.

参考资料

An Introduction to Potential Outcomes, DAGs and Single-World Intervention Graphs

simons-lecture1-handout.pdf

simons-lecture2-handout.pdf

simons-lecture3-handout.pdf

simons-lecture4-handout.pdf

这篇关于潜在结果框架(Potential outcomes)与工具变量(Instrumental variable)介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/280555

相关文章

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio