熟悉常见概率分布

发布于 2023-08-23 12:36:17 字数 12470 浏览 94 评论 0

生活中的很多事情潜在的都符合某种规律。例如:反复抛掷一枚均匀的硬币,出现正面和反面的机会是差不多的;我们认识的人里面特别高或者特别矮的都不多,大部分人的身高都在一个比较接近的范围内。概率论通过概率分布来描述事件出现的频率。本文选取了一些常见的概率分布做一些介绍,以方便在今后使用的时候可以查阅。

当然,常见 是一个很口语而非科学的说法,因为这很难有明确的标准。如果想要对更多的概率分布做深入研究,请以文末的链接为起点进行更多探索。

为了便于描述,这里我们先做一些基础知识的介绍。

随机变量

随机变量是可以随机地取不同值的变量。例如:抛掷一枚硬币,出现正面或者反面的结果;从一个班级中,随机选一个同学,他的身高值。随机变量可以是离散的或者连续的。离散随机变量拥有有限(例如正面或者反面)或者可数无限多的状态。连续随机变量伴随着实数值(例如:身高)。

概率质量函数

离散型变量的概率分布可以用概率质量函数(Probability Mass Function,简称PMF)来描述。我们通常用大写字母 P 来表示概率质量函数。

概率密度函数

当研究的对象是连续型随机变量时,我们用概率密度函数(Probability Density Function,简称PDF)来描述它的概率分布。我们通常用小写字母 p 来描述概率密度函数。

期望

函数 $f(x)$ 关于某分布的期望(Expectation)或者期望值(Expected value)是指:当 x 由 P 产生,f 作用于 x 时,$f(x)$的平均值。

对于离散型随机变量,期望值可以通过求和得到:

\[E_{x \sim P[f(x)]} = \sum_xP(x)f(x)\]

对于连续型随机变量,期望值可以通过求积分得到:

\[E_{x \sim p[f(x)]} = \int p(x)f(x) dx\]

方差与标准差

方差(Variance)衡量的是当我们对 x 依据它的概率分布进行采样时,随机变量 x 的函数值会呈现多大的差异。

计算方差的函数如下:

\[Var(f(x)) = E[(f(x)-E[f(x)])^2]\]

方差的平方根称之为标准差(Standard Deviation)。有些资料也称标准差为均方差

一幅图理解期望和方差

台湾大学李毅宏教授的这节课程: 《Where does the error come from?》 仅仅通过一幅图就非常好的解释了期望和方差的概念。

结果与期望的偏离称之为偏差(Bias)。通俗的讲,Bias 描述了结果与中心的偏离程度。而方差(Variance)描述了结果互相之间的散列程度。

你可以对比下面这幅图的四种情况来加深理解:

从这幅图中我们可以看出:

  • 当 Bias 和 Variance 都比较小的时候,结果都比较紧密的集中在预期的值上。
  • 当 Bias 较小而 Variance 较大时,意味着结果较靠近预期,但是比较散落。
  • 当 Bias 较大而 Variance 较小时,意味着结果集中在一起,但是离预期值偏离较多。
  • 当 Bias 和 Variance 都较大时,意味着结果既不靠近预期,也比较散落。

李毅宏教授的课程是我目前发现的最好的机器学习资料,他的授课把那些复杂的概念,解释的非常的清晰和通俗。

因此强烈推荐给大家。

李毅宏教授的个人网站: 李宏毅 (Hung-yi Lee)

李毅宏教授的 Youtube 站点: Youtube:李宏毅

伯努利分布

伯努利(Bernoulli)分布是最基本,也是我们最常见的分布。这个名称是为了纪念瑞士科学家雅各布·伯努利(Jakob I. Bernoulli)而命名。

伯努利分布在生活中非常的常见。例如,抛掷一枚硬币的结果就是符合伯努利分布的:结果只会是正面或者反面。

下文将看到,好几种其他的分布都与伯努利分布有一定的关系。

伯努利分布亦称“零一分布”、“两点分布”:它的结果只会是两种可能性中的一种,且这两种结果互相对立,必居其一。因此,我们也常常称结果是成功的,或者失败的。

假设伯努利实验成功的概率是 p ,则伯努利分布的概率质量函数如下:

\[P(X=x) = p^x (1 - p)^{(1-x)},\; X \in {0, 1}\]

当然,考虑到 X 只有 0 和 1 两种可能,我们也可以直接写成:

\[P(X=x) = \begin{cases} p\;(x=1) \\ 1-p\;(x=0) \end{cases}\]

伯努利分布的期望值是 p,方差是 $p(1-p)$。

二项分布

我们可以很自然的可以将一次伯努利实验扩展到多次,此时其结果符合二项(Binomial)分布

二项分布的概率质量函数如下:

\[P(X=k) = \binom{n}{k}p^{k}(1-p)^{n-k}\]

这里的:

\[\binom{n}{k} = \frac{n!}{k!(n-k)!}\]

通过这个函数,我们可以计算出在进行 n 次的伯努利实验中,有 k 次出现正面结果的概率。

很显然,当 n 为 1 时,这个函数和伯努利的概率质量函数是一样的。

二项分布的期望值是 np,方差是$np(1-p)$。

几何分布

几何(Geometric)分布也是进行多次的伯努利实验。

它指的是:在 n 次伯努利试验中,试验 k 次才得到第一次成功的机率。或者说,就是:前 k-1 次皆失败,第 k 次成功的概率。

几何分布的概率质量函数如下:

\[P(X = k) = p(1-p)^{k - 1}\]

几何分布的期望是$\frac{1}{p}$,方差是$\frac{(1-p)}{p^2}$。

多项分布

进一步的,我们可以将二项分布扩展到多项(Multinomial)分布

多项分布的结果有超过 2 种的更多种情况。例如:抛掷一枚骰子,其结果可能是 1~6 中的某个数值。

假设有$X_1$到$X_k$种结果,每种结果发生的概率是$p_1$到$p_k$,多项分布的概率质量函数如下:

\[P(X_1=n_1,...,X_k=n_k) = \frac{n !}{n_1! ... n_k !} p_1^{n_1} ... p_k^{n_{k}} , \; (\sum_{i=1}^k x_{i} = n)\]

对于每个$X_{i}$来说,其数学期望是 $E(X_{i}) = np_{i}$,其方差是 $Var(X_{i}) = np_{i}(1-p_{i})$。

离散均匀分布

特别地,当我们仅仅进行一次多项实验,并且多项的各项结果是等可能的,那么这个时候就得到的就是离散均匀(Discrete Uniform)分布

其概率密度函数如下:

\[P(X = x) = \frac{1}{N} \; (x= 1,...,N)\]

例如,抛掷一枚均匀的骰子,出现 6 个数中任意一个的概率都是 $\frac{1}{6}$。

离散均匀分布的期望值是 $\frac{N+1}{2}$,方差是 $\frac{(N+1)(N-1)}{12} $。

很显然,上面几种分布都与伯努利分布存在一定的关系,下面这幅图描述了它们之间的关系:

泊松分布

泊松(Poisson)分布是另外一种很常见的概率分布,由法国数学家西莫恩·德尼·泊松(Siméon-Denis Poisson)在 1838 年时发表。

我们可以回想一下,生活中很多事情都以特定频率的反复发生的,例如:

  • 某个医院平均每天有 100 个新生儿;
  • 某个客服号码每个小时会接到 50 个来电;
  • 某一班公交每个小时会 5 次经过其中一个站点;
  • 等等等等;

过去发生的平均频度我们是可以计算的,但是我们永远无法精确计算该事件下一次发生的时间点。

泊松分布描述的是:在已知过去发生频率的基础上,预测在接下来一段特定的时间内,该事件发生特定次数的概率

这么说有些拗口,但是接下来我们通过一个具体的例子就很容易理解了。

泊松分布的概率质量函数如下:

\[P(k) = \frac{e^{-\lambda}\lambda^{k}}{k!} \; ,\lambda \ge 0\]

这里的 e 是一个常量,约等于 2.71828。$\lambda$是过去单位时间内发生的频率,k 是预测发生的次数。

以公交为例,假设我们知道过去它每个小时平均会 5 次经过其中一个站点($\lambda$=5),那么接下来的一个小时,它经过的次数很可能是 4~6 次。不太可能是 1 次或者 10 次。我们可以根据概率质量函数,计算它接下来一个小时分别经过 1 次,4 次,5 次,10 次的概率。

  • 当 k=1 时:$P(1) = \frac{e^{-5}5^{1}}{1!} \approx 0.034 $
  • 当 k=4 时:$P(4) = \frac{e^{-5}5^{4}}{4!} \approx 0.175 $
  • 当 k=5 时:$P(5) = \frac{e^{-5}5^{5}}{5!} \approx 0.175 $
  • 当 k=10 时:$P(10) = \frac{e^{-5}5^{10}}{10!} \approx 0.018 $

当然,我们不用自己手算,借助于 Python 的 scipy.stats 库可以很轻松的计算出结果。

Python 的 scipy.stats 库包含了许多种分布的许多相关函数。

借助于 matplotlib ,我们甚至可以很轻松的将这个结果以图形的方式展示出来。

下面这段代码,绘制了上面我们想要的结果:

import matplotlib.pyplot as plt
import numpy as np

from scipy.stats import poisson x = np.arange(0, 11) lamda = 5 plt.bar(x, poisson.pmf(x, lamda)) plt.text(8, 0.17, 'lamda=5') plt.title('Poisson Distribution') plt.show()​

这段代码很简单,这里就不多做说明了。 网上有很多关于 numpy 和 matplotlib 的教程,也可以看我之前写的文章:

另外,这篇文章也很值得一看: Plotting Distributions with matplotlib and scipy

下面这幅图就是我们得到的结果。可以看到,这和我们前面计算的结果是一致的。

泊松分布的期望值和方差都是$\lambda$。

高斯分布

高斯(Gaussian)分布又称正态(Normal)分布。这个概念是由德国的数学家和天文学家 Moivre 于 1733 年首次提出的,但由于德国数学家高斯率先将其应用于天文学家研究,故正态分布又叫高斯分布。

高斯分布的概率密度函数曲线呈钟形,因此人们又经常称之为钟形曲线。借助于前面提到的几个库,我们可以很轻松的画出高斯分布的概率密度函数和累积分布函数。

相关代码如下:

import matplotlib.pyplot as plt
import numpy as np

from scipy.stats import norm x = np.linspace(-3, 3, 1000) plt.plot(x, norm.pdf(x), label='Probability density function') plt.plot(x, norm.cdf(x), label='Cumulative distribution function') plt.legend() plt.title('Gaussian Distribution') plt.show()​

得到的图形如下:

从这个图中我们可以看出,对于高斯分布来说,随机变量处于中间的概率是比较大的,而其取非常大或者非常小的值的概率都很小。我们现实中人们的身高,体重,收入等特点都符合这个模型。

高斯分布的概率密度函数如下:

\[f(x) = \frac{1}{\sqrt{2 \pi}\sigma}e^{-\frac{(x - \mu)^2}{2\sigma^2}}\]

对于符合高斯分布的随机变量,我们也经常记做下面这样:

\[X \sim N(\mu, \sigma^2)\]

在这个函数中,$\mu$决定了高斯分布的中心位置,$\sigma$决定了钟型曲线的胖瘦程度。实际上,$\mu$就是高斯分布的期望,而$\sigma^2$就是方差。

当 $\mu$ = 0,$\sigma$ = 1 时的,我们称之为标准正态分布。

上面我们看到的这个图形就是标准正态分布。

均匀分布

均匀(Uniform)分布要简单很多,它指的就是:随机变量在某个区间内,取任意一个值都是等可能的。

其概率密度函数如下:

\[f(x) = \frac{1}{b-a} , a \le x \le b\]

很显然,如果我们将这个函数画成图形,那就是两个区间之间的一个水平线。

均匀分布的期望值是 $\frac{b+a}{2}$,方差是 $\frac{(b-a)^2}{12}$。

指数分布

指数(Exponential)分布是描述泊松过程中的事件之间的时间的概率分布,即事件以恒定平均速率连续且独立地发生的过程。

指数分布的概率密度函数如下:

\[f(x) = \frac{1}{\lambda}e^{-\frac{x}{\lambda}} \; ,x \ge 0, \lambda \gt 0\]

指数分布的期望是$\lambda$,方差是$\lambda^2$。

我们仍然是以前面提到的公交车为例。假设每个小时某班公交平均有 5 次会经过其中一个站点。

则可以通过下面这段代码绘制出其概率密度函数和分布累积函数:

import matplotlib.pyplot as plt
import numpy as np

from scipy.stats import expon x = np.linspace(0, 1, 1000) lamda = 5 scale = 1/lamda plt.plot(x, expon.pdf(x, scale=scale), label='Probability density function') plt.plot(x, expon.cdf(x, scale=scale), label='Cumulative distribution function') x1 = 0.2 x2 = 0.4 x3 = 1 y1 = expon.cdf(x1, scale=scale) y2 = expon.cdf(x2, scale=scale) y3 = expon.cdf(x3, scale=scale) plt.scatter([x1, x2, x3], [y1, y2, y3], c="b") plt.annotate("{:.3f}".format(y1), (x1, y1 + 0.2)) plt.annotate("{:.3f}".format(y2), (x2, y2 + 0.2)) plt.annotate("{:.3f}".format(y3), (x3, y3 + 0.2)) plt.legend() plt.title('Exponential Distribution') plt.show()​

这段代码得到的图形如下:

在这段代码中,我们特意的在 0.2,0.4 和 1.0 这三个点上做了标记。

从这个图形中我们可以看出,对于这班公交来说,12 分钟(0.2 小时)来车的概率是 0.632,24 分钟(0.4 小时)来车的概率是 0.865。 当等待的时间越接近一个小时,新的一班车就几乎肯定要来了。

这里我们选取了一些常见的概率分布介绍给大家。这些分布可能是我们在做机器学习时会用到的。

文章的开头也提到,常见 是一个没有标准的定义,也许后面我还会继续扩充这篇文章,加入更多的内容。

相关链接

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

辞别

暂无简介

文章
评论
545 人气
更多

推荐作者

佚名

文章 0 评论 0

今天

文章 0 评论 0

゛时过境迁

文章 0 评论 0

达拉崩吧

文章 0 评论 0

呆萌少年

文章 0 评论 0

孤者何惧

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文