PyMC3中常见连续概率分布

连续分布

1.均匀分布

class pymc3.distributions.continuous.Uniform(lower = 0,upper = 1,* args,** kwargs )

均匀分布的概率密度函数为:

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-darkgrid')
x = np.linspace(-3, 3, 500)
ls = [0., -2]
us = [2., 1]
for l, u in zip(ls, us):
    y = np.zeros(500)
    y[(x<u) & (x>l)] = 1.0/(u-l)
    plt.plot(x, y, label='lower = {}, upper = {}'.format(l, u))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.ylim(0, 1)
plt.legend(loc=1,fontsize=14)
plt.show()

 2.正态分布

class pymc3.distributions.continuous.Normal(mu=0, sd=None, tau=None, **kwargs)
'''
mu:均值
sd:标准差(>0),仅在未指定tau时才需要。
tau:精度(>0),仅在未指定sd时才需要。
'''

正态分布的概率密度函数为:

正态分布可以在精度或标准偏差方面进行参数化。两个参数之间的关系由下式给出:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as st
plt.style.use('seaborn-darkgrid')
x = np.linspace(-5, 5, 1000)
mus = [0., 0., 0., -2.]
sds = [0.4, 1., 2., 0.4]
for mu, sd in zip(mus, sds):
    pdf = st.norm.pdf(x, mu, sd)
    plt.plot(x, pdf, label=r'$\mu$ = {}, $\sigma$ = {}'.format(mu, sd))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.legend(loc=1,fontsize=12)
plt.show()

logp(value)
'''
计算正态分布在指定值的对数概率。
参数:value (numeric) – 计算对数概率的值。如果需要多个值的对数概率,则必须以numpy数组或theano张量值提供值
Returns:TensorVariable
'''

3.截断正态分布

class pymc3.distributions.continuous.TruncatedNormal(mu = 0,sd = None,tau = None,lower = None,upper = None,transform ='auto',* args,** kwargs )
'''
参数:	
mu - 均值。
sd(float) - 标准偏差(sd> 0)。
lower(float (可选)) - 左边界。
upper(float (可选)) - 右边界。
'''

 概率密度函数为:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as st
plt.style.use('seaborn-darkgrid')
x = np.linspace(-10, 10, 1000)
mus = [0.,  0., 0.]
sds = [3.,5.,7.]
a1 = [-3, -5, -5]
b1 = [7, 5, 4]
for mu, sd, a, b in zip(mus, sds,a1,b1):
    an, bn = (a - mu) / sd, (b - mu) / sd
    pdf = st.truncnorm.pdf(x, an,bn, loc=mu, scale=sd)
    plt.plot(x, pdf, label=r'$\mu$ = {}, $\sigma$ = {}, a={}, b={}'.format(mu, sd, a, b))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.legend(loc=1,fontsize=12)
plt.show()

 4.Beta分布

class pymc3.distributions.continuous.Beta(alpha=None, beta=None, mu=None, sd=None, *args, **kwargs)
'''
参数:	
alpha - alpha> 0。
beta - beta> 0。
mu- 均值(0 <mu <1)。
sd - 标准差(0 <sd <sqrt(mu *(1-mu)))。

'''

概率密度函数为:

均值,方差:

注:Beta分布是 二项分布 的共轭先验

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as st
plt.style.use('seaborn-darkgrid')
x = np.linspace(0, 1, 200)
alphas = [.5, 5., 1., 2., 2.]
betas = [.5, 1., 3., 2., 5.]
for a, b in zip(alphas, betas):
    pdf = st.beta.pdf(x, a, b)
    plt.plot(x, pdf, label=r'$\alpha$ = {}, $\beta$ = {}'.format(a, b))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.ylim(0, 4.5)
plt.legend(loc=9)
plt.show()

 5.指数分布

class pymc3.distributions.continuous.Exponential(lam, *args, **kwargs)

概率密度函数:

均值,方差:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as st
plt.style.use('seaborn-darkgrid')
x = np.linspace(0, 3, 100)
for lam in [0.5, 1., 2.]:
    pdf = st.expon.pdf(x, scale=1.0/lam)
    plt.plot(x, pdf, label=r'$\lambda$ = {}'.format(lam))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.legend(loc=1)
plt.show()

6.拉普拉斯分布:

class pymc3.distributions.continuous.Laplace(mu, b, *args, **kwargs)
'''
参数:	
mu(float) - 位置参数。
b(float) - 比例参数(b> 0)。
'''

概率密度函数:

均值和方差为:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as st
plt.style.use('seaborn-darkgrid')
x = np.linspace(-10, 10, 1000)
mus = [0., 0., 0., -5.]
bs = [1., 2., 4., 4.]
for mu, b in zip(mus, bs):
    pdf = st.laplace.pdf(x, loc=mu, scale=b)
    plt.plot(x, pdf, label=r'$\mu$ = {}, $b$ = {}'.format(mu, b))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.legend(loc=1)
plt.show()

 7.t分布

class pymc3.distributions.continuous.StudentT(nu, mu=0, lam=None, sd=None, *args, **kwargs)
'''
参数:	
nu(float) - 自由度,也称为正态参数(nu> 0)。
mu(float) - 位置参数。
sd(float) - 比例参数(sd> 0)。当nu增加时,收敛于标准偏差。(仅在未指定lam时才需要)
lam(float) - 比例参数(lam> 0)。随着nu的增加,精度趋于一致。(仅在未指定sd时才需要)
'''

概率密度函数:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as st
plt.style.use('seaborn-darkgrid')
x = np.linspace(-8, 8, 200)
mus = [0., 0., -2., -2.]
sds = [1., 1., 1., 2.]
dfs = [1., 5., 5., 5.]
for mu, sd, df in zip(mus, sds, dfs):
    pdf = st.t.pdf(x, df, loc=mu, scale=sd)
    plt.plot(x, pdf, label=r'$\mu$ = {}, $\sigma$ = {}, $\nu$ = {}'.format(mu, sd, df))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.legend(loc=1)
plt.show()

 8.Gamma分布

class pymc3.distributions.continuous.Gamma(alpha=None, beta=None, mu=None, sd=None, *args, **kwargs)
'''
参数:	
alpha(float) - 形状参数(alpha> 0)。
beta(float) - 速率参数(beta> 0)。
mu(float) - 可选形状参数(mu> 0)。
sd(float) - 可选比例参数(sd> 0)。
'''

概率密度函数:

均值和方差为:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as st
plt.style.use('seaborn-darkgrid')
x = np.linspace(0, 20, 200)
alphas = [1., 2., 3., 7.5]
betas = [.5, .5, 1., 1.]
for a, b in zip(alphas, betas):
    pdf = st.gamma.pdf(x, a, scale=1.0/b)
    plt.plot(x, pdf, label=r'$\alpha$ = {}, $\beta$ = {}'.format(a, b))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.legend(loc=1)
plt.show()

9.卡方分布

class pymc3.distributions.continuous.ChiSquared(nu, *args, **kwargs)
'''
参数:	nu(int) - 自由度(nu> 0)
'''

概率密度函数为:

均值和方差:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as st
plt.style.use('seaborn-darkgrid')
x = np.linspace(0, 15, 200)
for df in [1, 2, 3, 6, 9]:
    pdf = st.chi2.pdf(x, df)
    plt.plot(x, pdf, label=r'$\nu$ = {}'.format(df))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.ylim(0, 0.6)
plt.legend(loc=1)
plt.show()

10.半正太分布

class pymc3.distributions.continuous.HalfNormal(sd=None, tau=None, *args, **kwargs)
'''
参数:	
sd(float) - 比例参数sigma(sd> 0)(仅在tau未指定时才需要)。
tau(float) - 精度tau(tau> 0)(仅在未指定sd时才需要)。

'''

概率密度函数:

均值和方差:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as st
plt.style.use('seaborn-darkgrid')
x = np.linspace(0, 5, 200)
for sd in [0.4, 1., 2.]:
    pdf = st.halfnorm.pdf(x, scale=sd)
    plt.plot(x, pdf, label=r'$\sigma$ = {}'.format(sd))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.legend(loc=1)
plt.show()

 参考:

http://docs.pymc.io/api/distributions/continuous.html

猜你喜欢

转载自blog.csdn.net/qq_16000815/article/details/81481594