Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))
在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习。 理解颇浅,还请大神指点!
http://blog.codinglabs.org/articles/algorithms-for-cardinality-estimation-part-ii.html
它的基本处理方法和上篇中用bitmap统计的方法类似,但是最后要用到一个公式:
说明:m为bitmap总位数,u为0的个数,最后的结果为n的一个估计,且为最大似然估计(MLE)。
那么问题来了,最大似然估计是什么东东?好像在学概率论的时候听说过,于是又去搜索了一下MLE的信息。
MLE:(此处不使用概率论中的各种符号及表示方法,按我自己的理解写)
以下内容参考链接:http://blog.csdn.net/yanqingan/article/details/6125812
假设进行一个实验,实验次数定为10次,每次实验成功率为0.2,那么不成功的概率为0.8,用n来表示成功的次数。
事件之间是相互独立的,于是可以得到成功次数的概率:
成功次数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
概率 | 0.107374 | 0.268435 | 0.301990 | 0.201327 | 0.088080 | 0.026424 | 0.005505 | 0.000786 | 0.000074 | 0.000004 | 0.000000 |
以上数据由下述程序计算:
#include <stdio.h>
#define N 10
#define G 0.2 int factorial(int n)
{
int i;
int ret = ;
for(i = ; i <= n; ++i)
{
ret *= i;
}
return ret;
} double exponent(double m, int n)
{
int i;
double ret = ;
for(i = ; i < n; ++i)
{
ret *= m;
}
return ret;
} double fun(int n)
{
return ((double)factorial(N) / factorial(n) / factorial(N - n) * exponent(G, n) * exponent( - G, N - n));
} int main()
{
int i;
for(i = ; i <= N; ++i)
{
printf("%f\t", fun(i));
}
printf("\n");
}
用excel做出它的图表
而所谓概率密度,就是这一个个柱子的面积。公式如下:
所谓的最大似然估计,就是在已知成功次数n的情况下,求出每次实验成功率的最可能的值。
假设现已知成功次数为n=7,那么每次的成功概率ω可能是多少呢?
可以代入式子:
于是它成了P和ω的方程。
既然成功次数为7,那么假设n=7时,P有极大值,即求上述方程极大值。借助excel,画出它的方程曲线图:
即先求导,然后取导数的0点,即为最大可能概率:
但是这样做又不方便,又容易出错,于是可以借助对数来进行处理:
这样继续求解是不是方便多了呢?
现在回到Linear Counting算法(具体一开始头上带^的n是怎么推导的可以查看一下开关的链接,或者“A linear-time probabilistic counting algorithm for database applications”)
Linear Counting算法中,m是比n小的。我并不知道应该如何描述它,于是按个人的理解举个例子:
假设一个网站一天有n个不同的人访问,现设一m位的bitmap,将“不同的人”传入哈希函数,传出的结果填入bitmap(可能重复),最后用bitmap中的分布情况来估计n的值。
引用链接中的一个图:
每个圈代表一个人,然后用bitmap中的分布情况估计出圈的个数。
这样的估计是有误差的,所以应该对m的选择考虑一番。
结论:Linear Counting算法比直接用bitmap节约了常系数极的空间
Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))的更多相关文章
- 萌新笔记——Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))
在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习. 理解颇浅,还请大神指点! http://blog.codinglabs.org/articles/algorithm ...
- CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现
CRC16算法系列文章: CRC16算法之一:CRC16-CCITT-FALSE算法的java实现 CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现 CRC16算法之三:CR ...
- JVM-GC算法(二)-复制算法&&标记整理算法
这次我和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一篇在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢? 复制算法 ...
- 数据结构与算法学习(二)——Master公式及其应用
本篇文章涉及公式,由于博客园没有很好的支持,建议移步我的CSDN博客和简书进行阅读. 1. Master公式是什么? 我们在解决算法问题时,经常会用到递归.递归在较难理解的同时,其算法的复杂度也不是很 ...
- Opencv算法学习二
1.直方图:图片中像素值分布情况的坐标图. 直方图均衡化:按一定规律拉伸像素值,提高像素值少的点,增加原图的对比度,使人感觉更清晰的函数. equalizeHist( src, dst ); 2.ha ...
- 疯子的算法总结(二) STL Ⅰ 算法 ( algorithm )
写在前面: 为了能够使后续的代码具有高效简洁的特点,在这里讲一下STL,就不用自己写堆,写队列,但是做为ACMer不用学的很全面,我认为够用就好,我只写我用的比较多的. 什么是STL(STl内容): ...
- 五大常用算法之二:动态规划算法(DP)
一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本 ...
- 四旋翼基础算法学习2-IMU输入滤波算法
前言: 处理器读取陀螺仪加速度计数据后首先需要对数据进行滤波处理,此文分析比较几种常用的滤波算法. 参考学习:四轴加速度计滤波 IMU: IMU使用MPU9250(即MPU6500),设置加速度量程± ...
- 数据结构&算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)
什么是算法: 间而言之算法(Algorithm):一个计算过程,解决问题的方法 递归的两个特点: 调用自身 结束条件 递归示例: def func(x): : print("我的小鲤鱼&qu ...
随机推荐
- Linux Shell 自动化之让文本飞
Linux Shell 自动化之让文本飞 一.前言: 作者之前在一家 IDC 从事运维兼职工作,后来因某些原因辞职开始 Python 爬虫数据分析.因为这些经历以及后续时间积累下的经验,发现好像自 ...
- MVC 提交List 集合 注意对应的参数名称
public void AddMovieInfos(List<MoviesInfo> movies) { foreach (var item in movies) { dal.Add(it ...
- [原创]markdown语法学习(commonmark)
CommonMark是markdown的解析器,以下是部分学习链接: commonmark规范 https://spec.commonmark.org/ commonmark帮助 https://co ...
- [BZOJ 4890][TJOI2017]城市
传送门 $ \color{green} {solution : }$ 我们可以暴力枚举断边,然后 $ O(n) $ 的跑一次换根 $ dp $,然后复杂度是 $ O(n * n) $ 的 #inclu ...
- Pytorch学习笔记(二)——Tensor
一.对Tensor的操作 从接口的角度讲,对Tensor的操作可以分为两类: (1)torch.function (2)tensor.function 比如torch.sum(a, b)实际上和a.s ...
- excel时间戳转化为标准日期(日期转化为日期戳)
最近在学习python将数据导入到excel,发现日期变成数字而不是日期格式的问题. 第一眼看去肯定是excel单元格格式问题,一般excel单元格格式为常规,而常规处理日期时就显示为数字,所以就想到 ...
- 使用 Dotfuscator 对代码进行混淆
Dotfuscator 简介 作为一种高级语言,c# 类库很容易被 .NET Reflector 这样的工具反编译.攻击者很容易从代码中找到数据库连接方式,加解密方法等重要信息.使用 dnspy 这样 ...
- (转)tune2fs命令详解
tune2fs命令详解(原创) 原文:http://czmmiao.iteye.com/blog/1749232 tune2fs简介 tune2fs是调整和查看ext2/ext3文件系统的文件系统参数 ...
- 深入理解子元素的width与父元素的width关系
深入理解父元素与子元素的width关系 对于这一部分内容,如果理解准确,可以更容易控制布局,节省不必要的代码,这里将简单研究. 第一部分:父子元素都是内联元素 代码演示如下: <!DOCTYPE ...
- kafka集群安装及简单使用
关于kafka是什么及原理,请参考kafka官方文档的介绍:http://kafka.apache.org/documentation/#introduction ,英文不好的同学可以看这里http: ...