查看全课大纲(第 10 / 82 节)
  1. 1.函数与数据泛化
  2. 2.向量:从几何直觉到高维空间
  3. 3.矩阵与张量
  4. 4.特征值与特征向量:矩阵变换的不动方向
  5. 5.凸函数:从向量求导的矩阵记号到好优化的函数形状
  6. 6.概率与统计:机器学习的数学基础
  7. 7.独立性与随机变量:贝叶斯公式与二项分布
  8. 8.期望、方差与协方差:随机变量的数字画像
  9. 9.联合概率:当一条轴不够用的时候
  10. 10.概率分布(一):从伯努利到伽马函数
  11. 11.概率分布(二):贝塔、泊松、正态与两个贝叶斯故事
  12. 12.机器学习的模型:找输入与输出的关系
  13. 13.机器学习的应用
  14. 14.过拟合
  15. 15.机器学习的分类
  16. 16.有监督学习:从房价预测说起
  17. 17.损失函数
  18. 18.梯度下降(上):更新规则与学习速率
  19. 19.梯度下降(2)
  20. 20.牛顿方法
  21. 21.KNN简介
  22. 22.距离测算
  23. 23.朴素贝叶斯
  24. 24.朴素贝叶斯的实际应用
  25. 25.信息熵:决策树构建的度量基础
  26. 26.信息增益与决策树的构建
  27. 27.ID3算法
  28. 28.决策树节点的划分
  29. 29.CART树
  30. 30.Bagging
  31. 31.Boosting:自适应提升算法
  32. 32.Gradient Boosting
  33. 33.线性模型:回归与分类的同一副骨架
  34. 34.最小二乘:把最优参数直接解出来
  35. 35.最小二乘法的几何与概率视角
  36. 36.极大似然:给最小二乘一个概率出身
  37. 37.逻辑回归(1):把线性模型接到分类上
  38. 38.逻辑回归(2):损失函数与多分类
  39. 39.---- 手造数据: 5 个样本, 2 个特征; x2 几乎 = 2*x1 (偏差手工指定, 无随机) ----
  40. 40.讲师例: 向量 "23014" -- 三把范数尺子量同一个向量
  41. 41.优化方法(1):坐标下降与前向选择
  42. 42.优化方法(2):前向策略与最小角回归
  43. 43.拉格朗日乘子法(1):从无约束到等式约束
  44. 44.拉格朗日乘子法(2):等式约束下的平行条件与拉格朗日函数
  45. 45.拉格朗日乘子法(3):不等式约束与 KKT 条件
  46. 46.最大间隔:把分类问题变成优化问题
  47. 47.拉格朗日对偶问题:把 w 和 b 全部换成 α
  48. 48.支持向量:边界上的少数派
  49. 49.SVM 计算过程:一笔到底算完,再走进核方法
  50. 50.贝叶斯公式:概率即信念
  51. 51.隐含变量和概率模型:给看不见的原因建模
  52. 52.EM 算法:期望与最大化的迭代
  53. 53.琴生不等式:EM 的数学钥匙
  54. 54.三个硬币问题:EM 的复盘与衔接
  55. 55.高斯混合模型:用隐变量解释双峰数据
  56. 56.隐马尔可夫模型
  57. 57.隐马尔可夫模型(2):前向算法与动态混合模型
  58. 58.隐马尔可夫模型在 NLP 中的运用
  59. 59.EM 算法:把「为什么收敛」推到底
  60. 60.HMM 在 NLP 中的运用:从分词到机器翻译
  61. 61.HMM 参数估计:Baum-Welch 的三块拉格朗日
  62. 62.高维下的高斯模型
  63. 63.主题模型:从词袋到隐含主题
  64. 64.Dirichlet 分布(1)
  65. 65.Dirichlet 分布(2)
  66. 66.统计学习内容回顾
  67. 67.K-means 算法
  68. 68.PCA 降维
  69. 69.SVD 降维
  70. 70.从聚类到流形
  71. 71.局部线性嵌入
  72. 72.随机邻域嵌入:SNE 与 t-SNE
  73. 73.无参模型:让数据自己说话
  74. 74.高斯过程:函数空间里的正态分布
  75. 75.高斯过程(2):噪声、正则化与核的线性组合
  76. 76.神经网络简介:从感知器到自编码器
  77. 77.反向传播:把误差一层层传回去
  78. 78.卷积神经网络(CNN):让特征自己学出来
  79. 79.循环神经网络(RNN):给网络装上记忆
  80. 80.深度学习回顾:静态一类,动态一类
  81. 81.增强学习(1):蒙特卡洛、树搜索与 Q-learning
  82. 82.强化学习(2):从乌鸦吃核桃到井字棋的 value 回传

概率分布(一):从伯努利到伽马函数

约 21 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · 机器学习算法精讲

本节我们将从离散概率迈向连续概率,系统学习机器学习中常用的几种核心概率分布。理解这些分布的特性、适用场景及其数学表达,是后续学习贝叶斯推断、主题模型、高斯过程等高级算法的基石。学完本节,你将能够清晰地区分伯努利、二项式、多项式分布,并理解伽马函数作为阶乘扩展的深刻含义。

💡 核心导读

  • 连续与离散:理解概率密度函数(PDF)与离散概率质量函数的本质区别——前者用面积表示概率,后者用求和。
  • 经典离散分布:掌握伯努利分布(单次试验)、二项式分布(n次独立伯努利试验的成功次数)与多项式分布(多类别试验的计数分布)的定义、公式与直观意义。
  • 二项式系数与杨辉三角:直观理解二项式展开的系数规律,及其在概率计算中的应用。
  • 伽马函数:认识伽马函数作为阶乘运算在连续实数域上的扩展,它是定义许多连续分布(如伽马分布、狄利克雷分布)的关键工具。

从离散到连续:概率密度函数

在之前的讨论中,我们主要处理像掷硬币(正面/反面)或掷骰子(1到6点)这样的离散随机变量。每个可能的结果都有一个明确的概率值,所有结果的概率之和为1。

然而,现实世界中有许多现象是连续的。例如,测量一个人的身高。身高值可以是150厘米、150.1厘米、150.15厘米……在任意两个实数之间都存在无限多个可能的值。我们无法为“身高恰好是170.000…厘米”这样一个点赋予一个非零的概率(否则无限个点概率之和将无穷大)。

为了解决这个问题,我们引入了概率密度函数。

概率密度函数 是一个非负函数 f(x)f(x),用于描述连续随机变量在不同取值附近的“可能性”密度。对于连续随机变量 XX 落在区间 [a,b][a, b] 内的概率,由密度函数在该区间上的积分给出: P(a≤X≤b)=∫abf(x) dx.P(a \le X \le b) = \int_{a}^{b} f(x) \, dx.

最关键的性质是,概率密度函数在整个实数域上的积分(即曲线下的总面积)必须等于1: ∫−∞∞f(x) dx=1.\int_{-\infty}^{\infty} f(x) \, dx = 1.

这对应于离散概率中所有可能结果的概率之和为1。

我们选择不同的概率密度函数来描述不同特性的不确定性。例如,人的身高通常用正态分布(高斯分布)来描述;而“百年一遇的洪水在十年内来几次”这类计数问题,则要用另外的分布来刻画(下一节展开)。每种分布都有其独特的形态,由少数几个参数(如均值、方差)控制,并决定了大部分概率质量集中在哪个区域——比如一个方差之内落了多少比例的值、两个方差之内又落了多少。

接下来,我们从最简单的离散分布开始,逐步构建更复杂的分布概念。

经典离散概率分布

伯努利分布:单次二元试验

伯努利分布 是最简单的概率分布,描述一次只有两种可能结果的试验,例如抛一次硬币(正面/反面)、一次射击(命中/脱靶)。顺带一提,Bernoulli 是瑞士一个极高产的数学家族——伯努利方程、伯努利分布出自家族中不同的成员,有空可以搜搜他们的维基百科页面,非常有意思。

我们通常将两种结果编码为:成功(Success)= 1,失败(Failure)= 0。设成功的概率为 pp (0≤p≤10 \le p \le 1),则失败的概率为 q=1−pq = 1 - p。

伯努利分布的概率质量函数可以紧凑地写为: P(X=k)=pk(1−p)1−k,k∈{0,1}.P(X = k) = p^k (1-p)^{1-k}, \quad k \in \lbrace 0, 1\rbrace .

  • 当 k=1k=1(成功)时,P(X=1)=p1(1−p)0=pP(X=1) = p^1 (1-p)^{0} = p。
  • 当 k=0k=0(失败)时,P(X=0)=p0(1−p)1=1−pP(X=0) = p^0 (1-p)^{1} = 1-p。

该分布的期望(均值)为 E[X]=pE[X] = p,方差为 Var(X)=p(1−p)Var(X) = p(1-p)。

import random

# 伯努利试验模拟
def bernoulli_trial(p):
    """以概率p返回1(成功),以概率1-p返回0(失败)。"""
    return 1 if random.random() < p else 0

# 参数设置
p = 0.3  # 单次试验成功的概率
num_trials = 10000  # 模拟试验次数

# 模拟并统计
random.seed(42)
success_count = sum(bernoulli_trial(p) for _ in range(num_trials))
empirical_p = success_count / num_trials

print(f"理论成功概率 p = {p}")
print(f"模拟 {num_trials} 次试验,成功次数 = {success_count}")
print(f"经验成功概率 = {empirical_p:.4f}")
print(f"与理论概率的绝对误差 = {abs(empirical_p - p):.4f}")
理论成功概率 p = 0.3
模拟 10000 次试验,成功次数 = 2964
经验成功概率 = 0.2964
与理论概率的绝对误差 = 0.0036

二项式分布:n次独立伯努利试验的成功计数

二项式分布 描述的是进行 nn 次独立的伯努利试验,每次成功概率为 pp,总共获得 kk 次成功的概率。例如:抛10次硬币,得到6次正面的概率;射击10次,命中8次的概率。

其概率质量函数为: P(X=k)=(nk)pk(1−p)n−k,k=0,1,2,…,n.P(X = k) = \binom{n}{k} p^k (1-p)^{n-k}, \quad k = 0, 1, 2, \dots, n. 其中 (nk)=n!k!(n−k)!\binom{n}{k} = \frac{n!}{k!(n-k)!} 是二项式系数,表示从 nn 次试验中选择 kk 次成功有多少种不同的方式。

讲师在课上放了一个”板钉”演示:小球从顶部落下,每撞一排钉子就以 pp 与 1−p1-p 的概率向左或向右分化,层层累积后底部的堆叠形状正是二项式分布的样子——概率在中间高、两头低,肉眼可见。

这里的系数 (nk)\binom{n}{k} 正是杨辉三角(帕斯卡三角)中的数字。杨辉三角的每一行对应 (x+y)n(x+y)^n 二项式展开的系数。

  • 第0行:1 → (x+y)0=1(x+y)^0 = 1
  • 第1行:1, 1 → (x+y)1=x+y(x+y)^1 = x + y
  • 第2行:1, 2, 1 → (x+y)2=x2+2xy+y2(x+y)^2 = x^2 + 2xy + y^2
  • 第3行:1, 3, 3, 1 → (x+y)3=x3+3x2y+3xy2+y3(x+y)^3 = x^3 + 3x^2y + 3xy^2 + y^3
  • …

这种几何关系可以通过面积(平方)和体积(立方)来直观理解:(a+b)2(a+b)^2 的面积等于边长为 aa 的正方形、边长为 bb 的正方形以及两个 a×ba \times b 矩形的面积之和。

import math

def binomial_probability(n, k, p):
    """计算二项式分布概率 P(X = k) for n trials, success prob p."""
    # 计算组合数 C(n, k) = n! / (k! * (n-k)!)
    # 使用对数计算防止阶乘溢出
    def log_comb(n, k):
        # 利用 log(n!) = sum(log(i)) 以及 C(n,k) = n!/(k!(n-k)!)
        # 计算 log(C(n,k))
        if k < 0 or k > n:
            return -float('inf')  # 概率为0
        # 使用更稳定的方法:log(C(n,k)) = log(n!) - log(k!) - log((n-k)!)
        # 这里用求和近似,对于教学小规模数据直接计算
        comb = math.comb(n, k) if hasattr(math, 'comb') else math.factorial(n) // (math.factorial(k) * math.factorial(n - k))
        return math.log(comb) if comb > 0 else -float('inf')
    
    log_coef = log_comb(n, k)
    log_prob = log_coef + k * math.log(p) + (n - k) * math.log(1 - p)
    return math.exp(log_prob)

# 示例:抛10次公平硬币,恰好得到6次正面的概率
n = 10
k = 6
p = 0.5
prob = binomial_probability(n, k, p)
coef = math.comb(n, k) if hasattr(math, 'comb') else math.factorial(n) // (math.factorial(k) * math.factorial(n - k))

print(f"进行 n={n} 次独立伯努利试验,每次成功概率 p={p}")
print(f"恰好得到 k={k} 次成功的概率为:{prob:.4f}")
print(f"二项式系数 C({n}, {k}) = {coef}")
进行 n=10 次独立伯努利试验,每次成功概率 p=0.5
恰好得到 k=6 次成功的概率为:0.2051
二项式系数 C(10, 6) = 210

多项式分布:多类别试验的计数

多项式分布 是二项式分布的推广,用于描述每次试验有 KK 种可能结果(而不仅仅是两种)的情况。例如,掷骰子(6种结果)、对文档进行主题分类(K个主题)。

设单次试验中,结果 ii 出现的概率为 pip_i,满足 ∑i=1Kpi=1\sum_{i=1}^{K} p_i = 1。现在进行 nn 次独立试验,用 XiX_i 表示结果 ii 出现的次数,则向量 X=(X1,X2,…,XK)\mathbf{X} = (X_1, X_2, \dots, X_K) 服从多项式分布,其联合概率质量函数为: P(X1=x1,X2=x2,…,XK=xK)=n!x1!x2!…xK!p1x1p2x2…pKxK,P(X_1 = x_1, X_2 = x_2, \dots, X_K = x_K) = \frac{n!}{x_1! x_2! \dots x_K!} p_1^{x_1} p_2^{x_2} \dots p_K^{x_K}, 其中 ∑i=1Kxi=n\sum_{i=1}^{K} x_i = n。

系数 n!x1!…xK!\frac{n!}{x_1! \dots x_K!} 是多项式系数,表示在 nn 次试验中得到特定计数组合 (x1,…,xK)(x_1, \dots, x_K) 的不同序列数。

伽马函数:阶乘的连续化扩展

在多项式分布的公式中,我们看到了阶乘。当我们需要处理非整数或者推广到更一般的分布时,阶乘运算需要被扩展到一个连续的定义上。这就是伽马函数的用武之地。

伽马函数 Γ(z)\Gamma(z) 定义为: Γ(z)=∫0∞xz−1e−x dx,z>0.\Gamma(z) = \int_0^{\infty} x^{z-1} e^{-x} \, dx, \quad z > 0.

伽马函数最关键的性质是它的递推关系: Γ(z+1)=zΓ(z).\Gamma(z+1) = z \Gamma(z). 并且有 Γ(1)=1\Gamma(1) = 1。

如果 nn 是正整数,那么: Γ(n+1)=nΓ(n)=n(n−1)Γ(n−1)=⋯=n!Γ(1)=n!.\Gamma(n+1) = n \Gamma(n) = n (n-1) \Gamma(n-1) = \dots = n! \Gamma(1) = n!. 因此,伽马函数是阶乘在正实数域上的推广。我们可以计算 Γ(2.5)\Gamma(2.5)、Γ(3.7)\Gamma(3.7) 等值,它们对应着“非整数”的阶乘。

从图像上看,如果我们把正整数点 (n,n!)(n, n!) 画在坐标系中,伽马函数就是一条光滑穿过所有这些点的曲线。

import math

# 伽马函数在Python标准库中可用 math.gamma
# 这里我们演示其性质,并与阶乘对比
print("伽马函数与阶乘的关系验证:")
for n in range(1, 6):
    factorial_n = math.factorial(n)  # n!
    gamma_n_plus_1 = math.gamma(n + 1)  # Γ(n+1)
    print(f"  n = {n}: {n}! = {factorial_n}, Γ({n+1}) = {gamma_n_plus_1:.2f}, 是否相等?{abs(factorial_n - gamma_n_plus_1) < 1e-9}")

# 计算一个非整数的“阶乘”
z = 2.5
gamma_val = math.gamma(z + 1)  # 这可以看作是“2.5!”
print(f"\n非整数示例:Γ({z}+1) = Γ({z+1:.1f}) ≈ {gamma_val:.4f} (可以理解为‘{z}!’的连续版本)")
伽马函数与阶乘的关系验证:
  n = 1: 1! = 1, Γ(2) = 1.00, 是否相等?True
  n = 2: 2! = 2, Γ(3) = 2.00, 是否相等?True
  n = 3: 3! = 6, Γ(4) = 6.00, 是否相等?True
  n = 4: 4! = 24, Γ(5) = 24.00, 是否相等?True
  n = 5: 5! = 120, Γ(6) = 120.00, 是否相等?True

非整数示例:Γ(2.5+1) = Γ(3.5) ≈ 3.3234 (可以理解为‘2.5!’的连续版本)

利用伽马函数,多项式分布的概率质量函数可以写成更紧凑的形式(尽管在离散情况下看起来更复杂,但这种形式在连续推广和贝叶斯推理中非常有用): P(X=x)=Γ(∑i=1Kxi+1)∏i=1KΓ(xi+1)∏i=1Kpixi.P(\mathbf{X} = \mathbf{x}) = \frac{\Gamma(\sum_{i=1}^{K} x_i + 1)}{\prod_{i=1}^{K} \Gamma(x_i + 1)} \prod_{i=1}^{K} p_i^{x_i}.

伽马函数本身也是定义其他重要连续分布的基础——本节结尾讲师就用两个参数 α\alpha、β\beta 带出了在正实数轴(0 到正无穷)上定义的伽马分布;第 15 章主题模型中的 Dirichlet 分布同样由伽马函数构建,它是多项式分布的”连续版搭档”。

📝 动手练一练

  1. 概念辨析:伯努利分布、二项式分布和多项式分布之间最本质的区别是什么?请各用一句话总结其描述的随机过程。
  2. 代码实践:修改上面的二项式概率计算代码,计算抛20次不均匀硬币(正面概率 p=0.7p=0.7)时,得到正面次数不超过15次(即 k≤15k \le 15)的累计概率。提示:你需要对 kk 从0到15的概率求和。
👉 点击查看参考答案
  1. 概念辨析:

    • 伯努利分布:描述单次二元随机试验的结果(成功/失败)。
    • 二项式分布:描述固定次数 n 的独立伯努利试验中,成功总次数的概率分布。
    • 多项式分布:描述固定次数 n 的独立多类别试验中,各类别出现次数的联合概率分布。
  2. 代码实践:

    import math
    
    def binomial_probability(n, k, p):
        """计算二项式分布概率 P(X = k)。"""
        # 使用 math.comb 计算组合数(Python 3.8+)
        if hasattr(math, 'comb'):
            coef = math.comb(n, k)
        else:
            coef = math.factorial(n) // (math.factorial(k) * math.factorial(n - k))
        return coef * (p ** k) * ((1 - p) ** (n - k))
    
    n = 20
    p = 0.7
    cumulative_prob = 0.0
    for k in range(0, 16):  # k = 0, 1, ..., 15
        prob_k = binomial_probability(n, k, p)
        cumulative_prob += prob_k
        # 可选:打印每个k的概率
        # print(f"P(X={k}) = {prob_k:.6f}")
    
    print(f"抛{n}次硬币(正面概率p={p}),正面次数不超过15次的累计概率为:{cumulative_prob:.6f}")
    # 验证:也可以用1减去反面次数少于5次的概率来算,但这里直接累加更清晰。

    运行后输出类似(具体数值可能因计算精度略有差异):

    抛20次硬币(正面概率p=0.7),正面次数不超过15次的累计概率为:0.762492

    这意味着,在20次试验中,尽管单次成功概率高达0.7,但成功次数超过15次(即16次及以上)的概率仍有约23.75%。

本章小结

本节我们建立了从离散概率到连续概率的桥梁,并深入学习了三类基础的离散分布:

  • 伯努利分布是基石,描述单次二元试验。
  • 二项式分布在其基础上,通过计数n次独立试验的成功次数,并引入了二项式系数(杨辉三角)这一关键组合数学概念。
  • 多项式分布进一步推广到多类别试验,是理解后续主题模型等算法的基础。

最后,我们认识了伽马函数 Γ(z)\Gamma(z),它巧妙地将阶乘运算 n!n! 推广到了整个正实数域,为定义更复杂的连续分布(如伽马分布、贝塔分布)提供了数学工具。理解伽马函数是理解许多高级概率模型共轭先验的关键一步。

📋 行动清单

  • 默写出伯努利、二项式、多项式分布的概率质量函数,并说明每个参数和变量的含义。
  • 用 Python 标准库 math.gamma 函数验证 Γ(5)\Gamma(5) 是否等于 4!4!,并尝试计算 Γ(1.5)\Gamma(1.5) 的值。
  • 构思一个现实场景(如调查问卷选项、产品缺陷分类),用多项式分布来描述其数据生成过程。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第2章课件:机器学习的数学基础 II(概率)
    下载