可更换或不更换的一致取样包装。

consistent-sampler的Python项目详细描述


一致采样器

提供“一致采样”的例程sampler---采样 这在子集之间是一致的(如下所述)。

这里我们称这些元素为“id”,尽管它们可能是 任意python对象(字符串、元组等)。我们假设 ID是不同的。

通过将随机“票号”与 每个id;通过获取 包含最小元素的所需样本大小 相关随机数。

使用给定的“种子”计算随机票号;此种子 可以是任意的python对象,通常是大整数或长整数 弦。

采样是consistent,因为它始终支持元素 小票号;如果两套S和T 重叠,那么他们给定大小的样本也将具有实质性的 重叠(对于相同的随机种子)。

这个例程将一个有限的不同对象集合作为输入 ids、随机种子和一些其他参数。抽样可以是 “有替换”或“无替换”。一个额外的 例程的参数是“take”--所需样本的大小。

它提供作为输出的“采样顺序”--对象的有序列表 确定样本的ID。与 取决于ID和 seed;id按票证号的增加顺序输出。为了 效率和可移植性,票号表示为 小数点0。dddd…dddd介于0和1之间。

对于不更换的采样,输出不能超过 输入,因为没有ID可能会多次出现在示例中。

对于替换采样,输出可能是无限长的, 由于id可能出现在样本中,因此任意大(甚至无限大) 次数。当一个id被采样并在集合中替换时 对于被采样的id,它被赋予一个新的随机票号 从(0,1)中大于其上一个数的一组数均匀地 票号。

sampler的输出始终是python 生成器,能够生成无限长的ID流。

示例1.

作为不替换采样的一个小例子:

g = sampler(['A-1', 'A-2', 'A-3', 'B-1', 'B-2', 'B-3'], 
            with_replacement=False, take=4, seed=314159, output='id')

产生一个发电机G,其输出可以打印:

print(list(id for id in g))

产生:

['B-2', 'B-3', 'A-3', 'A-2']

例2.

下面是一个示例,其中采样是用一组6个ID替换的, 输出为每个选定的id提供一个三元组 一。关联的随机票号, 2.选定的ID,以及 三。“generation”(到目前为止选择id的次数)。

>>> for t in sampler(['a1', 'b2', 'c3', 'd4', 'e5', 'f6'],
                     with_replacement=True, seed=19283746, take=10):
...     print(t)
('0.303241347', 'e5', 1)
('0.432145156', 'b2', 1)
('0.487135586', 'c3', 1)
('0.581779914', 'b2', 2)
('0.680782907', 'b2', 3)
('0.700258702', 'c3', 2)
('0.816686725', 'b2', 4)
('0.841870265', 'a1', 1)
('0.857737141', 'a1', 2)
('0.866227993', 'f6', 1)

讨论

这个程序是为选举审计而设计的, 其中被采样的id是选票id,但是这个例程 适用于一般用途。

对于类似的选举审计抽样方法, 见斯塔克的选举审计工具: https://www.stat.berkeley.edu/~stark/Vote/auditTools.htm

一致采样并不是一个新概念,请参见 https://arxiv.org/abs/1612.01041 以及其中对一致抽样的提及。 这里的程序可能(或者不可能)是新颖的,因为它扩展一致 取样到替换取样。

对于我们的应用程序,一致采样的一个主要优点是 接下来。如果每个县单独收集选票,那么 可以自己点票取样和解释 不受其他国家的影响。全部样品 订单可以根据各个县的样本订单,通过 将每个生成的三元组列表合并为一个整体排序 命令。

用法

进一步的文件和示例如下: 一。在代码中consistent_sampler.py 2.可通过运行程序demo_consistent_sampler.py获得 三。如文件usage_examples.md所述 四。在文件中docs/consistent_sampling_with_replacement.pdf (此文件很快也将出现在arxiv上。)

此代码已打包并上传对皮皮很在行。从Python3你可以说

from consistent_sampler import sampler

然后说help(sampler)获取更多文档,或者运行sampler 就像上面的例子一样。

效率

大部分工作是在计算sha256散列函数,它 在一台典型的笔记本电脑上,每次通话大约需要一微秒。因此, sampler的运行时间与 id_list(设置优先级队列)加上,如果采样完成 使用替换,值drop+take,其中 比例大约是1微秒。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java流收集组合器   文件如何在java中逐个压缩选定的多个文件夹   从Google存储下载数据时发生java SocketTimeoutException   java在安卓应用程序客户端上从python服务器接收值,然后显示与该值对应的mysql数据   数组如何在Java中测试字符串索引是否为Null   java将一串值拆分并放入一个表中   java Spring Memcached注释不缓存   调用pom中设置的环境变量时出现java问题。xml surefire插件   java修复JFrame中重叠的鼠标侦听器   格式化java。sql。日期至yyyyMMdd   java声音剪辑。如果剪辑不正确,isActive应返回true。启动被调用   无根计算机上hadoop中的java格式化namenode   从字符串数组中删除重复项,而无需在Java中进行显式比较   java Eclipse插件安装错误   java webdriver无法在firefox中单击超链接   动画错误。朗。反思。调用目标异常   java试图调用虚拟方法“void”。小装置。编辑文本。在空对象引用上添加TextChangedListener(安卓.text.TextWatcher)”