布隆过滤器之误识别率FPP公式的推导
在《什么是布隆过滤器(Bloom Filter)?》一文中,多次提到了误识别率(FPP,false positive probabilistic)。
那么误识别率到底是多大,应该如何计算呢?
假设布隆过滤器大小为m比特,存储了n个元素,使用k次散列函数来计算元素的存储位置。
- 添加1个元素,则任一比特为1的概率为:
1/m
,任一比特为0的概率:1-1/m
; - 添加1个元素,执行k次散列之后,则任一比特为0的概率:
(1-1/m)^k
,任一比特为1的概率:1-(1-1/m)^k
; - 如果添加n个元素,那么任一比特为0的概率:
(1-1/m)^kn
,任一比特为1的概率:1-(1-1/m)^kn
; - 如果将1个新的元素,添加到已存在n个元素的布隆过滤器中,则任一比特已经为1的概率与上面相同,概率为:
1-(1-1/m)^kn
。因此,k个比特都为1的概率为:(1-(1-1/m)^kn)^k
,此即为新插入元素的误识别率。
当n值比较大时,(1-(1-1/m)kn)k约等于:(1-e-kn/m)k
其中,e是一个数学常数,是自然对数函数的底数。有时被称为欧拉数(Euler’s number),以瑞士数学家欧拉命名。它是一个无限不循环小数,数值约为2.71828182846。
假定布隆过滤器大小m为16比特,k为8,存储元素n为1,那么误识别(假阳性)的概率是万分之五(5/10000)。
此时,m/n=16,事实上这表示1个元素使用16个比特的空间来存储。
因此,当k相同时,m/n为16/1、32/2、64/4等值时具有相同的误识别率。
将数值代入公式,计算一下万分之五的概率是怎么来的:
kn=8*1=8kn/m=8/16=1/2e的-1次方转换为倒数:1/e=0.36787944117再计算1/e的1/2次方,即对0.36787944117进行开方,得到:0.60653065971144443045693327628786计算括号内的值:1-0.60653065971144443045693327628786=0.39346934028855556954306672371214最后再计算k次方:0.39346934028855556954306672371214的8次方=5.7449622219356465294987619912758e-4
计算得到的误识别率为 5.7449622219356465294987619912758e-4
,即万分之五。
下面是来自http://pages.cs.wisc.edu/~cao/papers/summary-cache/node8.html的一个误识别率表,可以很方便的查询出在m、n和k分别取不同值时的误识别率。
m/n | k | k=1 | k=2 | k=3 | k=4 | k=5 | k=6 | k=7 | k=8 |
2 | 1.39 | 0.393 | 0.400 | ||||||
3 | 2.08 | 0.283 | 0.237 | 0.253 | |||||
4 | 2.77 | 0.221 | 0.155 | 0.147 | 0.160 | ||||
5 | 3.46 | 0.181 | 0.109 | 0.092 | 0.092 | 0.101 | |||
6 | 4.16 | 0.154 | 0.0804 | 0.0609 | 0.0561 | 0.0578 | 0.0638 | ||
7 | 4.85 | 0.133 | 0.0618 | 0.0423 | 0.0359 | 0.0347 | 0.0364 | ||
8 | 5.55 | 0.118 | 0.0489 | 0.0306 | 0.024 | 0.0217 | 0.0216 | 0.0229 | |
9 | 6.24 | 0.105 | 0.0397 | 0.0228 | 0.0166 | 0.0141 | 0.0133 | 0.0135 | 0.0145 |
10 | 6.93 | 0.0952 | 0.0329 | 0.0174 | 0.0118 | 0.00943 | 0.00844 | 0.00819 | 0.00846 |
11 | 7.62 | 0.0869 | 0.0276 | 0.0136 | 0.00864 | 0.0065 | 0.00552 | 0.00513 | 0.00509 |
12 | 8.32 | 0.08 | 0.0236 | 0.0108 | 0.00646 | 0.00459 | 0.00371 | 0.00329 | 0.00314 |
13 | 9.01 | 0.074 | 0.0203 | 0.00875 | 0.00492 | 0.00332 | 0.00255 | 0.00217 | 0.00199 |
14 | 9.7 | 0.0689 | 0.0177 | 0.00718 | 0.00381 | 0.00244 | 0.00179 | 0.00146 | 0.00129 |
15 | 10.4 | 0.0645 | 0.0156 | 0.00596 | 0.003 | 0.00183 | 0.00128 | 0.001 | 0.000852 |
16 | 11.1 | 0.0606 | 0.0138 | 0.005 | 0.00239 | 0.00139 | 0.000935 | 0.000702 | 0.000574 |
17 | 11.8 | 0.0571 | 0.0123 | 0.00423 | 0.00193 | 0.00107 | 0.000692 | 0.000499 | 0.000394 |
18 | 12.5 | 0.054 | 0.0111 | 0.00362 | 0.00158 | 0.000839 | 0.000519 | 0.00036 | 0.000275 |
19 | 13.2 | 0.0513 | 0.00998 | 0.00312 | 0.0013 | 0.000663 | 0.000394 | 0.000264 | 0.000194 |
20 | 13.9 | 0.0488 | 0.00906 | 0.0027 | 0.00108 | 0.00053 | 0.000303 | 0.000196 | 0.00014 |
21 | 14.6 | 0.0465 | 0.00825 | 0.00236 | 0.000905 | 0.000427 | 0.000236 | 0.000147 | 0.000101 |
22 | 15.2 | 0.0444 | 0.00755 | 0.00207 | 0.000764 | 0.000347 | 0.000185 | 0.000112 | 7.46e-05 |
23 | 15.9 | 0.0425 | 0.00694 | 0.00183 | 0.000649 | 0.000285 | 0.000147 | 8.56e-05 | 5.55e-05 |
24 | 16.6 | 0.0408 | 0.00639 | 0.00162 | 0.000555 | 0.000235 | 0.000117 | 6.63e-05 | 4.17e-05 |
25 | 17.3 | 0.0392 | 0.00591 | 0.00145 | 0.000478 | 0.000196 | 9.44e-05 | 5.18e-05 | 3.16e-05 |
26 | 18 | 0.0377 | 0.00548 | 0.00129 | 0.000413 | 0.000164 | 7.66e-05 | 4.08e-05 | 2.42e-05 |
27 | 18.7 | 0.0364 | 0.0051 | 0.00116 | 0.000359 | 0.000138 | 6.26e-05 | 3.24e-05 | 1.87e-05 |
28 | 19.4 | 0.0351 | 0.00475 | 0.00105 | 0.000314 | 0.000117 | 5.15e-05 | 2.59e-05 | 1.46e-05 |
29 | 20.1 | 0.0339 | 0.00444 | 0.000949 | 0.000276 | 9.96e-05 | 4.26e-05 | 2.09e-05 | 1.14e-05 |
30 | 20.8 | 0.0328 | 0.00416 | 0.000862 | 0.000243 | 8.53e-05 | 3.55e-05 | 1.69e-05 | 9.01e-06 |
31 | 21.5 | 0.0317 | 0.0039 | 0.000785 | 0.000215 | 7.33e-05 | 2.97e-05 | 1.38e-05 | 7.16e-06 |
32 | 22.2 | 0.0308 | 0.00367 | 0.000717 | 0.000191 | 6.33e-05 | 2.5e-05 | 1.13e-05 | 5.73e-06 |
参考
《数学之美》
http://pages.cs.wisc.edu/~cao/papers/summary-cache/node8.html
https://zh.wikipedia.org/zh-cn/E_(%E6%95%B0%E5%AD%A6%E5%B8%B8%E6%95%B0)
https://en.wikipedia.org/wiki/Bloom_filter
关于我
公众号:二进制之路
教程:996geek.com
博客:binarylife.icu
布隆过滤器之误识别率FPP公式的推导相关推荐
- KWS_关键词命名+识别率和误识别率
关键词命名: 1. 命令词中相邻汉字的声母区分度越大越好,比如"消息"."小心",这样的不容易识别,因为相邻汉字的声母都是x,最好是不同的声母. 2. 命令词中 ...
- 布隆过滤器之Python+Redis
简单的python实现 pip install mmh3 对于安装报错,c++编译错误问题:可以安装 Microsoft Visual C++ Build Tools() 例子转载(https: ...
- 目标检测(降低误检测率及小目标检测系列笔记)
深度学习中,为了提高模型的精度和泛化能力,往往着眼于两个方面:(1)使用更多的数据(2)使用更深更复杂的网络. ** 一.什么是负样本 ** 负样本是指不包含任务所要识别的目标的图像,也叫负图像(Ne ...
- OCR算法识别率怎么评估?
关于OCR算法:http://ocr.space/ ocr api接口的种类:OCR名片识别API接口.OCR文档识别API接口.OCR车牌识别API接口.OCR证件识别API接口 一.测试方法: 人 ...
- 误报率、故障检测率、漏报率、虚警率、误警率等指标异同及计算公式
文章目录 误报率.故障检测率.漏报率.虚警率.误警率等指标异同及计算公式 1. 一些标准指标的计算 true positive rate (tp rate)[真阳性率], or hit rate [命 ...
- 一步步提高手写数字的识别率(1)
手写数字识别是机器学习领域中的一个经典应用,很多机器学习算法以这个问题作为示例,其地位相当于程序界的hello world.这个问题具有以下两个特点: 问题复杂度适中.手写识别是一门很深的学问,但这里 ...
- 国税局发票查验中英文验证码识别,识别率95.2%
关于国税局发票验证码识别,应该是大多数从事发票查验的人员比较头疼的问题,但实际上发票验证码识别问题严格而言较为简单. 一.背景 首先,需要了解清楚国税局的发票验证码构成,如下图,正常而言都是中文.数字 ...
- oracle bloom过滤,布隆过滤(Bloom Filter)-必须了解的优化器算法
布隆过滤(Bloom Filter)-必须了解的优化器算法 布隆过滤器(Bloom Filter)是1970年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数.布隆过滤器可以用于检索一 ...
- 【Redis系列】Redis布隆过滤之8亿大数据集实战
序言 即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义. 文章标记颜色说明: 黄色:重要标题 红色:用来标记结论 绿色:用来标记一级重要 蓝色:用来标记二级重要 希望 ...
最新文章
- IOS 中的MVC设计模式
- Python 技术篇 - 使用pypandoc库实现html文档转word文档实例演示
- Mac终端Terminal使用
- 缓存服务器协议有哪些,HTTP 协议的缓存机制概述
- 企业实战_23_MyCat SQL防火墙
- android webview 字体 系统字体大小,Android 系统字体大小动态改变,导致webview中显示不兼容的问题解决...
- 一种使用pyinstaller时图标问题解决方案
- vue子组件mounted不执行_vue中父子组件传值,解决钩子函数mounted只运行一次的问题...
- Mac配置adb笔记,彻底解决zsh: command not found: adb问题
- Jenkins通过FTP上传站点太多文件导致太慢且不稳定,切换为压包上传再解压的思路(asp.net)...
- c 按输入的字母来输出对应效果
- 计算机基础竞赛知识试题,计算机基础知识及基本技能操作竞赛试题
- MxCAD云图DWG转PDF
- mysql怎么tonumber_orcale中的to_number方法使用
- dcn网络与公网_DCN网络安全
- yolov5环境配置及训练coco128数据集
- 数学建模PPT(三)
- c语言编译星座测试,用c语言编写程序,判断输入的日期(月,日)属于哪个星座?...
- docker搭建xui
- C语言之三目运算符---学习笔记
热门文章
- python实现远程控制
- java aria,ARIA 标签和关系
- | 名师博客 | 地址 |
- 关于java开发邮件接收程序的一点总结
- 数加生产制造执行系统(MES)——优势
- linux安装docker并搭建DNS服务器,劫持百度小实验
- 噼里啪智能·财税产品技术 VP 张芳:DI 和 AI 双引擎为智能财税保驾护航
- 自动化篇 - 为闲鱼制作一个客服机器人
- jenkins提示没有这个文件: ‘pom.xml‘
- VC6.0编译出错Compiling...,Error spawning cl.exe的解决方法