UA MATH ECE636 信息论10 Group Testing简介
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∼iidBer(p),p<<1。记
d=∑i=1NXid = \sum_{i=1}^N X_id=i=1∑NXi
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(log2N)2^T = N \Rightarrow T = ceil(\log_2 N)2T=N⇒T=ceil(log2N)
其中ceil()ceil()ceil()表示不超过括号内的数的最小整数。因此Binary满足
T=ceil(log2N)T = ceil(\log_2 N)T=ceil(log2N)
如果d>1d>1d>1:检测到第一个取值为1的样本,将它移走,对剩下的N−1N-1N−1个样本做Binary Search,重复这个过程,直到找到ddd个取值为1的样本。因此
T=ceil(log2N)+⋯ceil(log2N−d)≤d×ceil(log2N)=O(dlog2N)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(log2N)+⋯ceil(log2N−d)≤d×ceil(log2N)=O(dlog2N)
因为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=k1log2Nd+⋯+kdlog2Nd=dlog2NdT = k_1 \log_2 \frac{N}{d} + \cdots + k_d \log_2 \frac{N}{d} = d \log_2 \frac{N}{d}T=k1log2dN+⋯+kdlog2dN=dlog2dN
显然这个比Binary Search更优秀。
Lower Bound
下面的定理给出了GT最优的可能性,由此可以看出generalized binary search是AGT中一种最优的算法。
定理
T≥dlog2NdT \ge d \log_2 \frac{N}{d}T≥dlog2dN
证明
我们尝试用信息论的语言来描述这个问题。假设我们用了TTT个检测,则每个检测返回的结果是0或者1,相当于就是收到了一个字长为TTT的binary code,则这个binary code能表示的信息的总数为2T2^T2T。而ddd个取值为1的样本在所有样本中的分布情况可以理解为字长为NNN的binary信号中有ddd个字是1,这种编码方式可以表示CNdC_N^dCNd种信号。为了保证binary code能够表示所有的信号:
2T≥CNd⇒T≥log2CNd≥T≥log2(N/d)d=dlog2Nd2^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≥log2CNd≥T≥log2(N/d)d=dlog2dN
这里面用到了不等式
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=dNd−1N−1d−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简介相关推荐
- UA MATH ECE636 信息论10 Non-adaptive Group Testing
UA MATH ECE636 信息论10 Non-adaptive Group Testing d-disjunct Reed-Solomon Code方法 上一讲主要介绍的是AGT,这一讲介绍NAG ...
- UA MATH566 统计理论10 Bootstrap简介
UA MATH566 统计理论10 Bootstrap简介 Bootstrap是用来替代基于CDF的一些统计计算的手段:当真实的CDF(记为F∈FF \in \mathbb{F}F∈F,F\mathb ...
- UA MATH636 信息论7 并行高斯信道简介
UA MATH636 信息论7 并行高斯信道简介 考虑并行的高斯信道:将一个长信号分为kkk段,走一个并行的高斯信道,被接受后再把信号拼起来.每一个高斯信道的输入为Xi,i=1,⋯,kX_i,i=1, ...
- 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 ...
- 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月第五题, ...
- UA MATH565C 随机微分方程V 算子半群理论简介
UA MATH565C 随机微分方程V 算子半群理论简介 Banach空间中的算子半群 Hille-Yosida定理 Shift Operator 上一讲提到Homogeneous Markov Fa ...
- UA MATH565C 随机微分方程V Markov Family简介
UA MATH565C 随机微分方程V Markov Family简介 Transition function Banach Space Method ODE的IVP可以看成是对系统的一些变量从初始状 ...
- UA MATH565C 随机微分方程III Ito积分简介
UA MATH565C 随机微分方程III Ito积分简介 Wiener过程的分割 与Riemann积分的对比 Ito积分的构造 在随机微分方程解的构造中,积分 ∫0tσ(Xs)dWs\int_{0} ...
- UA MATH565C 随机微分方程II Wiener过程简介
UA MATH565C 随机微分方程II Wiener过程简介 Wiener过程的简单性质 Wiener过程的定义 在上一讲我们定义了WtW_tWt: dWt=ηtdt⇔Wt=∫0tηsdsdW_t ...
最新文章
- UITextField长度限制的写法
- 大陆唯一7nm光刻机被抵押!武汉千亿投资、台积电大牛掌舵的芯片项目官宣停摆...
- 电脑有电流声怎么解决_微星笔记本有电流声或者风扇声怎么办?
- [RHEL] RHEL7.0 下 Postfix + Dovecot 实现邮件发送
- windows2003的一些设置之一
- linux shell脚本的执行方式与区别
- C/C++输入输出流
- 分布式版本控制系统入门
- 我26岁,月薪一万,刚实现“黄焖鸡自由”(苦笑)
- HTML5 Canvas的基本用法
- python写网页脚本_东拼西凑用python脚本登录web管理页面做巡检(实现)
- 关于.NET异常处理的思考
- 强悍的 Linux —— 强悍的 ls
- 【第二周】结对编程(宫丽君和林莉):四则运算
- libusb-win32学习笔记(一)
- 《WebGL编程指南》学习笔记——2.使用 canvas 元素
- SpringBoot整合MyBatis(七)
- 活动|QuarkChain 高TPS悬赏令:看你能有多快!2.4BTC等你拿!
- 苹果手机怎么在照片上添加文字_手机照片如何添加文字?原来方法这么简单,手把手教你学会。...
- Java常用类之String(超详细+大量代码)
热门文章
- Leetcode 173. 二叉搜索树迭代器 解题思路及C++实现
- sklearn快速入门教程:(二)线性回归
- 学会打败你的时间“窃贼”!!
- java keytool 代码_JDK keytool证书工具功能代码解析_java_脚本之家
- jdbctemplate 开启事务_来,讲讲Spring事务有哪些坑?
- 创建Vue实例传入的options||Vue的生命周期
- Unity Mathf 数学运算(C#)
- Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
- Oracle 数据库利用sql语句判断某个表是否是临时表实例演示,达梦数据库查询出所有临时表
- 获得程序运行结果的返回值