(Python)Markov,Chebyshev,Chernoff上界函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(Python)Markov,Chebyshev,Chernoff上界函数相关的知识,希望对你有一定的参考价值。
我在学习的路上遇到了一项任务。
对于二项式分布X~Bp,n具有平均μ= np和方差σ**2=np(1−p)
,我们想要概率上限P(X≥c⋅μ) for c≥1
。三个界限介绍:
任务是分别为每个不等式编写三个函数。他们必须将n , p and c
作为输入并返回由上述Markov,Chebyshev和Chernoff不等式给出的P(X≥c⋅np)
的上界作为输出。
有一个IO的例子:
码:
print Markov(100.,0.2,1.5)
print Chebyshev(100.,0.2,1.5)
print Chernoff(100.,0.2,1.5)
Output
0.6666666666666666
0.16
0.1353352832366127
我完全卡住了。我只是无法弄清楚如何将所有数学插入函数(或如何在算法上思考)。如果有人可以帮助我,那将是非常有帮助的!
附:除math.exp外,任务条件不允许使用所有库
好的,让我们来看看给出了什么:
输入值和派生值:
n = 100
p = 0.2
c = 1.5
m = n*p = 100 * 0.2 = 20
s2 = n*p*(1-p) = 16
s = sqrt(s2) = sqrt(16) = 4
你有P(X>=a*m)
形式的多个不等式,你需要提供术语P(X>=c*m)
的界限,所以你需要考虑a
在所有情况下如何与c
相关。
马尔可夫不等式:P(X>=a*m) <= 1/a
你被要求实现Markov(n,p,c)
,它将返回P(X>=c*m)
的上限。来自
P(X>=a*m)
= P(X>=c*m)
很明显,a == c
,你得到1/a = 1/c
。嗯,那只是
def Markov(n, p, c):
return 1.0/c
>>> Markov(100,0.2,1.5)
0.6666666666666666
这很容易,不是吗?
切尔诺夫不平等说明P(X>=(1+d)*m) <= exp(-d**2/(2+d)*m)
首先,让我们验证是否
P(X>=(1+d)*m)
= P(X>=c *m)
然后
1+d = c
d = c-1
这为我们提供了计算上限所需的一切:
def Chernoff(n, p, c):
d = c-1
m = n*p
return math.exp(-d**2/(2+d)*m)
>>> Chernoff(100,0.2,1.5)
0.1353352832366127
Chebyshev不等式由P(X>=m+k*s)
限制1/k**2
再说一遍,如果
P(X>=c*m)
= P(X>=m+k*s)
然后
c*m = m+k*s
m*(c-1) = k*s
k = m*(c-1)/s
然后就可以直接实施了
def Chebyshev(n, p, c):
m = n*p
s = math.sqrt(n*p*(1-p))
k = m*(c-1)/s
return 1/k**2
>>> Chebyshev(100,0.2,1.5)
0.16
以上是关于(Python)Markov,Chebyshev,Chernoff上界函数的主要内容,如果未能解决你的问题,请参考以下文章
理解Markov, Chebyshev, Chernoff概率不等式
理解Markov, Chebyshev, Chernoff概率不等式
如何在 Java 中实现 Chebyshev Type 2 LPF?