UA MATH ECE636 信息论10 Group Testing简介

  • Group Testing
    • AGT
      • Dworfman算法
      • Binary Search
      • Generalized Binary Search
    • Lower Bound

Group testing在工程、医学、统计等领域都有广泛的应用。一个group testing的比较直观的例子:假设有NNN个串联的灯泡,其中有ddd个烧掉了,所以整串灯泡都不亮了。现在想把这ddd个灯泡检测出来,如果每个灯泡都检查的话就需要检测NNN个,而group testing想要回答的问题是最少需要检测几个灯泡才能把这ddd个烧掉的检测出来?

Group Testing

假设X1,⋯,XNX_1,\cdots,X_NX1​,⋯,XN​是一组随机样本,X1,⋯,XN∼iidBer(p),p<<1X_1,\cdots,X_N \sim_{iid} Ber(p),p<<1X1​,⋯,XN​∼iid​Ber(p),p<<1。记
d=∑i=1NXid = \sum_{i=1}^N X_id=i=1∑N​Xi​
ddd表示所有取值为1的样本数(假设ddd已知),记TTT表示需要做的检测的数量。对应上面的例子,这NNN个样本就是NNN个串联的灯泡,ddd就是烧掉的灯泡的数量,一次检测可以就是用电压表测一下每个灯泡两端的电压,TTT就是需要检测的灯泡的数量,显然T≤NT \le NT≤N。考虑到p<<1p << 1p<<1,也就是烧掉的灯泡数量很少,我们比较容易想到的是pooling的思想,也就是检测多个灯泡两端的电压,如果是220V就说明其中有烧掉的,如果明显小于220V说明没问题。

用pooling的思想做Group testing的方法分为两大类,adaptive group testing和non-adaptive group testing。Adaptive group testing(AGT)的做法是序贯地对样本的子集做检测。。因为AGT的序贯性,它的速度是比较慢的,所以样本数目比较大的时候一般不用这个。Non-adaptive group testing(NAGT)的做法是并行地对样本的子集做检测,所以速度较快,大样本时一般用这种操作。但相比AGT,NAGT需要的检测的数量更多。

AGT

Dworfman算法

这个算法是1943年就提出来了的,比较古老的一种算法。它的思想是把NNN个样本分成Nd\sqrt{Nd}Nd​组,每一组有N/d\sqrt{N/d}N/d​个样本,对每一组做一次检测,一共需要做Nd\sqrt{Nd}Nd​次检测。假设检测到kkk组取值为1的样本,则1≤k≤d1 \le k \le d1≤k≤d,接下来对这kkk组中的每一个样本做检测,找出所有取值为1的样本,一共需要做kN/dk\sqrt{N/d}kN/d​次检测。从而这个算法需要做的检测次数为
T=Nd+kNdT = \sqrt{Nd} + k\sqrt{\frac{N}{d}}T=Nd​+kdN​​
显然
Nd+Nd≤T≤2Nd\sqrt{Nd} + \sqrt{\frac{N}{d}} \le T \le 2\sqrt{Nd}Nd​+dN​​≤T≤2Nd​

Binary Search

如果d=1d=1d=1:首先对NNN个样本做检测,如果结果是0,说明d=0d=0d=0,如果结果是1,将样本均分为两个group,每个group有N/2N/2N/2个元素,然后对每个group做检测,如果结果是0,说明这个group没有取值为1的样本,如果结果是0,再将样本均分为两个group。。。重复这个操作,最终找到取值为1的那个样本。根据这个算法,我们需要
2T=N⇒T=ceil(log⁡2N)2^T = N \Rightarrow T = ceil(\log_2 N)2T=N⇒T=ceil(log2​N)
其中ceil()ceil()ceil()表示不超过括号内的数的最小整数。因此Binary满足
T=ceil(log⁡2N)T = ceil(\log_2 N)T=ceil(log2​N)

如果d>1d>1d>1:检测到第一个取值为1的样本,将它移走,对剩下的N−1N-1N−1个样本做Binary Search,重复这个过程,直到找到ddd个取值为1的样本。因此
T=ceil(log⁡2N)+⋯ceil(log⁡2N−d)≤d×ceil(log⁡2N)=O(dlog⁡2N)T = ceil(\log_2 N) + \cdots ceil(\log_2 N-d) \le d\times ceil(\log_2 N) = O(d \log_2 N)T=ceil(log2​N)+⋯ceil(log2​N−d)≤d×ceil(log2​N)=O(dlog2​N)
因为d<<Nd << Nd<<N,所以通常Binary Search需要的检测数目比Dworfman算法更少。

Generalized Binary Search

将NNN个样本分为ddd个group,则每个group中有N/dN/dN/d个样本,在每个group中做binary search,假设第jjj个group中有kjk_jkj​个样本取值为1,则
T=k1log⁡2Nd+⋯+kdlog⁡2Nd=dlog⁡2NdT = k_1 \log_2 \frac{N}{d} + \cdots + k_d \log_2 \frac{N}{d} = d \log_2 \frac{N}{d}T=k1​log2​dN​+⋯+kd​log2​dN​=dlog2​dN​
显然这个比Binary Search更优秀。

Lower Bound

下面的定理给出了GT最优的可能性,由此可以看出generalized binary search是AGT中一种最优的算法。

定理
T≥dlog⁡2NdT \ge d \log_2 \frac{N}{d}T≥dlog2​dN​

证明

我们尝试用信息论的语言来描述这个问题。假设我们用了TTT个检测,则每个检测返回的结果是0或者1,相当于就是收到了一个字长为TTT的binary code,则这个binary code能表示的信息的总数为2T2^T2T。而ddd个取值为1的样本在所有样本中的分布情况可以理解为字长为NNN的binary信号中有ddd个字是1,这种编码方式可以表示CNdC_N^dCNd​种信号。为了保证binary code能够表示所有的信号:
2T≥CNd⇒T≥log⁡2CNd≥T≥log⁡2(N/d)d=dlog⁡2Nd2^T \ge C_N^d \Rightarrow T \ge \log_2 C_N^d \ge T \ge \log_2 (N/d)^d = d \log_2 \frac{N}{d}2T≥CNd​⇒T≥log2​CNd​≥T≥log2​(N/d)d=dlog2​dN​

这里面用到了不等式
CNd=(N/d)dC_N^d = (N/d)^dCNd​=(N/d)d
它其实非常直观
CNd=NdN−1d−1N−2d−2⋯N−(d−1)d−(d−1)C_N^d = \frac{N}{d} \frac{N-1}{d-1} \frac{N-2}{d-2} \cdots \frac{N-(d-1)}{d-(d-1)}CNd​=dN​d−1N−1​d−2N−2​⋯d−(d−1)N−(d−1)​
根据小学数学分式的性质
N−nd−n≥Nd,n<d\frac{N-n}{d-n} \ge \frac{N}{d},n < dd−nN−n​≥dN​,n<d
用到的那个不等式成立。

UA MATH ECE636 信息论10 Group Testing简介相关推荐

  1. UA MATH ECE636 信息论10 Non-adaptive Group Testing

    UA MATH ECE636 信息论10 Non-adaptive Group Testing d-disjunct Reed-Solomon Code方法 上一讲主要介绍的是AGT,这一讲介绍NAG ...

  2. UA MATH566 统计理论10 Bootstrap简介

    UA MATH566 统计理论10 Bootstrap简介 Bootstrap是用来替代基于CDF的一些统计计算的手段:当真实的CDF(记为F∈FF \in \mathbb{F}F∈F,F\mathb ...

  3. UA MATH636 信息论7 并行高斯信道简介

    UA MATH636 信息论7 并行高斯信道简介 考虑并行的高斯信道:将一个长信号分为kkk段,走一个并行的高斯信道,被接受后再把信号拼起来.每一个高斯信道的输入为Xi,i=1,⋯,kX_i,i=1, ...

  4. UA MATH 571B Tukey‘s Test for Non-additivity

    UA MATH 571B Tukey's Test for Non-additivity 实现上面这个方法的例子: data wash; input stain soap y @@; cards; 1 ...

  5. UA MATH 571B 回归 QE练习题 一元线性回归理论

    UA MATH 571B 回归 QE练习题 一元线性回归理论 2015/1/5 2015/5/5 2016/5/6 2017/1/5 2017/5/6 这是2015年1月第五题,2015年5月第五题, ...

  6. UA MATH565C 随机微分方程V 算子半群理论简介

    UA MATH565C 随机微分方程V 算子半群理论简介 Banach空间中的算子半群 Hille-Yosida定理 Shift Operator 上一讲提到Homogeneous Markov Fa ...

  7. UA MATH565C 随机微分方程V Markov Family简介

    UA MATH565C 随机微分方程V Markov Family简介 Transition function Banach Space Method ODE的IVP可以看成是对系统的一些变量从初始状 ...

  8. UA MATH565C 随机微分方程III Ito积分简介

    UA MATH565C 随机微分方程III Ito积分简介 Wiener过程的分割 与Riemann积分的对比 Ito积分的构造 在随机微分方程解的构造中,积分 ∫0tσ(Xs)dWs\int_{0} ...

  9. UA MATH565C 随机微分方程II Wiener过程简介

    UA MATH565C 随机微分方程II Wiener过程简介 Wiener过程的简单性质 Wiener过程的定义 在上一讲我们定义了WtW_tWt​: dWt=ηtdt⇔Wt=∫0tηsdsdW_t ...

最新文章

  1. UITextField长度限制的写法
  2. 大陆唯一7nm光刻机被抵押!武汉千亿投资、台积电大牛掌舵的芯片项目官宣停摆...
  3. 电脑有电流声怎么解决_微星笔记本有电流声或者风扇声怎么办?
  4. [RHEL] RHEL7.0 下 Postfix + Dovecot 实现邮件发送
  5. windows2003的一些设置之一
  6. linux shell脚本的执行方式与区别
  7. C/C++输入输出流
  8. 分布式版本控制系统入门
  9. 我26岁,月薪一万,刚实现“黄焖鸡自由”(苦笑)
  10. HTML5 Canvas的基本用法
  11. python写网页脚本_东拼西凑用python脚本登录web管理页面做巡检(实现)
  12. 关于.NET异常处理的思考
  13. 强悍的 Linux —— 强悍的 ls
  14. 【第二周】结对编程(宫丽君和林莉):四则运算
  15. libusb-win32学习笔记(一)
  16. 《WebGL编程指南》学习笔记——2.使用 canvas 元素
  17. SpringBoot整合MyBatis(七)
  18. 活动|QuarkChain 高TPS悬赏令:看你能有多快!2.4BTC等你拿!
  19. 苹果手机怎么在照片上添加文字_手机照片如何添加文字?原来方法这么简单,手把手教你学会。...
  20. Java常用类之String(超详细+大量代码)

热门文章

  1. Leetcode 173. 二叉搜索树迭代器 解题思路及C++实现
  2. sklearn快速入门教程:(二)线性回归
  3. 学会打败你的时间“窃贼”!!
  4. java keytool 代码_JDK keytool证书工具功能代码解析_java_脚本之家
  5. jdbctemplate 开启事务_来,讲讲Spring事务有哪些坑?
  6. 创建Vue实例传入的options||Vue的生命周期
  7. Unity Mathf 数学运算(C#)
  8. Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
  9. Oracle 数据库利用sql语句判断某个表是否是临时表实例演示,达梦数据库查询出所有临时表
  10. 获得程序运行结果的返回值