查看全课大纲(第 7 / 82 节)
- 1.函数与数据泛化
- 2.向量:从几何直觉到高维空间
- 3.矩阵与张量
- 4.特征值与特征向量:矩阵变换的不动方向
- 5.凸函数:从向量求导的矩阵记号到好优化的函数形状
- 6.概率与统计:机器学习的数学基础
- 7.独立性与随机变量:贝叶斯公式与二项分布
- 8.期望、方差与协方差:随机变量的数字画像
- 9.联合概率:当一条轴不够用的时候
- 10.概率分布(一):从伯努利到伽马函数
- 11.概率分布(二):贝塔、泊松、正态与两个贝叶斯故事
- 12.机器学习的模型:找输入与输出的关系
- 13.机器学习的应用
- 14.过拟合
- 15.机器学习的分类
- 16.有监督学习:从房价预测说起
- 17.损失函数
- 18.梯度下降(上):更新规则与学习速率
- 19.梯度下降(2)
- 20.牛顿方法
- 21.KNN简介
- 22.距离测算
- 23.朴素贝叶斯
- 24.朴素贝叶斯的实际应用
- 25.信息熵:决策树构建的度量基础
- 26.信息增益与决策树的构建
- 27.ID3算法
- 28.决策树节点的划分
- 29.CART树
- 30.Bagging
- 31.Boosting:自适应提升算法
- 32.Gradient Boosting
- 33.线性模型:回归与分类的同一副骨架
- 34.最小二乘:把最优参数直接解出来
- 35.最小二乘法的几何与概率视角
- 36.极大似然:给最小二乘一个概率出身
- 37.逻辑回归(1):把线性模型接到分类上
- 38.逻辑回归(2):损失函数与多分类
- 39.---- 手造数据: 5 个样本, 2 个特征; x2 几乎 = 2*x1 (偏差手工指定, 无随机) ----
- 40.讲师例: 向量 "23014" -- 三把范数尺子量同一个向量
- 41.优化方法(1):坐标下降与前向选择
- 42.优化方法(2):前向策略与最小角回归
- 43.拉格朗日乘子法(1):从无约束到等式约束
- 44.拉格朗日乘子法(2):等式约束下的平行条件与拉格朗日函数
- 45.拉格朗日乘子法(3):不等式约束与 KKT 条件
- 46.最大间隔:把分类问题变成优化问题
- 47.拉格朗日对偶问题:把 w 和 b 全部换成 α
- 48.支持向量:边界上的少数派
- 49.SVM 计算过程:一笔到底算完,再走进核方法
- 50.贝叶斯公式:概率即信念
- 51.隐含变量和概率模型:给看不见的原因建模
- 52.EM 算法:期望与最大化的迭代
- 53.琴生不等式:EM 的数学钥匙
- 54.三个硬币问题:EM 的复盘与衔接
- 55.高斯混合模型:用隐变量解释双峰数据
- 56.隐马尔可夫模型
- 57.隐马尔可夫模型(2):前向算法与动态混合模型
- 58.隐马尔可夫模型在 NLP 中的运用
- 59.EM 算法:把「为什么收敛」推到底
- 60.HMM 在 NLP 中的运用:从分词到机器翻译
- 61.HMM 参数估计:Baum-Welch 的三块拉格朗日
- 62.高维下的高斯模型
- 63.主题模型:从词袋到隐含主题
- 64.Dirichlet 分布(1)
- 65.Dirichlet 分布(2)
- 66.统计学习内容回顾
- 67.K-means 算法
- 68.PCA 降维
- 69.SVD 降维
- 70.从聚类到流形
- 71.局部线性嵌入
- 72.随机邻域嵌入:SNE 与 t-SNE
- 73.无参模型:让数据自己说话
- 74.高斯过程:函数空间里的正态分布
- 75.高斯过程(2):噪声、正则化与核的线性组合
- 76.神经网络简介:从感知器到自编码器
- 77.反向传播:把误差一层层传回去
- 78.卷积神经网络(CNN):让特征自己学出来
- 79.循环神经网络(RNN):给网络装上记忆
- 80.深度学习回顾:静态一类,动态一类
- 81.增强学习(1):蒙特卡洛、树搜索与 Q-learning
- 82.强化学习(2):从乌鸦吃核桃到井字棋的 value 回传
独立性与随机变量:贝叶斯公式与二项分布
约 23 分钟
小象实战讲义 · 机器学习算法精讲
上一节把概率的语言基础(公理、条件概率、全概率)过了一遍。本节让概率真正接上机器学习:先学事件的独立性——它把联合概率简化成一句乘法;再从条件概率的两条等式推出贝叶斯公式——讲师口中”至少是最重要之一”的公式;然后正式引入随机变量与它的第一个重量级例子二项分布;最后借高尔顿钉板,看二项分布如何一步步叠出正态分布。
💡 核心导读
- 独立性:两事件互不影响,联合概率=概率乘积,记作 ;不独立时退回条件概率乘法链。
- 贝叶斯公式:两条乘法等式一挪即得;把 A 读成”假设”、B 读成”数据”,概率就变成”用数据更新信念”。
- 随机变量:把试验结果映成数值的函数;光有取值清单不够,配上每个值的概率(分布)才是完整定义。
- 二项分布:数 n 次独立试验的成功次数;公式 背后是”路径分组”的梯子推导。
- 选择叠加成正态:高尔顿钉板演示二项分布叠成钟形;p 决定峰值位置。
什么是独立:能相乘,就别动用条件概率
条件概率是给”有关联”的事件准备的。它的反面——独立(independence)——在机器学习里出现得更频繁,因为它让计算大幅简化。如果两个事件同时发生的概率恰好等于各自概率的乘积:
就称 A 与 B 相互独立。讲师在黑板上”画一个一横一竖”表示 independent——两件事彼此垂直、互不牵扯,这个记号写作 。直观含义:A 发生与否,不改变 B 发生的可能性。反过来,如果两者不独立,联合概率就得退回上一节的乘法链:
讲师的例子:一个女孩,聪明(clever)的概率大概 1/10——“十个女孩里边大概算一个聪明,非常聪明的算很多了”;漂亮(beautiful)的也算 1/10——“十个里边能找到一个真正的美女也不是那么容易”;而会学机器学习(learn machine learning)的概率,算上文科、艺术等所有人群,“也许可能只有 1%“。那么,想认识一个既聪明又漂亮、还在学机器学习的女孩,概率是多少?三个概率直接相乘:
万分之一。敢”直接相乘”的前提是独立性,讲师当场给了论证:她漂亮与否和聪明与否无关;而聪明也未必去学机器学习——“因为你聪明可以去弹琴,可以去跳舞,可以去做 finance,不见得一定要学 machine learning”。所以这三件事近似互不牵连,同时发生的概率就是各自概率的乘积。
贝叶斯公式:机器学习最重要的公式之一
再看一眼那条乘法链:同一个联合概率有两条等价写法,于是它们彼此相等:
把 单独解出来,就得到讲师口中”如果说它不是最重要的话,它绝对是最重要之一”的公式——贝叶斯公式(Bayes’ rule):
这个式子本身只是代数挪移,威力来自换一套读法。讲师把 A 换成花体的 ——hypothesis,假设;把 B 换成 ——data,数据,有时候也叫 evidence:
四个部件各有名字,机器学习的论文里天天见:
- 后验概率(posterior):看到数据之后,假设 成立的概率——更新后的信念。
- 似然(likelihood):假设成立时,恰好看到这批数据的可能性。
- 先验概率(prior):看到任何数据之前,对假设的初始信念。
- 证据(evidence):数据的边际概率。讲师点破:它”并不重要”,多数时候只是一个归一化(normalization)系数——我们常只比较不同假设后验的相对大小,分母相同就不用真正算它。
于是整套公式读成一句话:先验乘似然,得到后验——拿旧信念去迎接新数据,得到修正后的新信念。
用贝叶斯公式做分类。讲师的例子: 是很长的一串数据——身高一米七五、体重 60 公斤等等,“布拉布拉好长一串特征描述的高维数据”;假设只有两种: 是男, 是女。分别计算 与 ,谁大就把这条数据归到哪一类——这就是贝叶斯分类器的雏形。以后我们会把这个骨架逐层做实:第 5 章的朴素贝叶斯(Naive Bayes)是第一个落地版本,再往后还有 semi-naive Bayes、贝叶斯图模型(Bayesian graphical model)等一整个”贝叶斯家族”。
随机变量:给随机结果发数值标签
先说变量(variable):t 代表时间,F 代表力(F = MA 里的 F 和 M)——变量就是可以取不同值的符号。那随机变量(random variable)特殊在哪?讲师强调:它更像一种函数——把试验所有可能结果组成的集合,映射到一组数值上。
- 掷一次硬币: 取 H(head,正面)或 T(tail,反面)——一定是这两个取值里的一个,但掷之前不知道是哪个;
- 掷一次骰子:——非确定性地落在 1 到 6 中的某一位。
但只说”X 能取哪些值”还不完整。讲师的原话是:真正表示一个随机变量的,是它的概率分布。骰子的例子中,每个值各占 1/6,这才算对这个随机变量的完整定义;均匀硬币则是 H 与 T 各 0.5。取值清单,加上每个值上的概率,缺一不可——离散取值配”概率质量”、连续取值配”概率密度”,接下来讲分布的两节正式展开。
二项分布:n 次试验数成功
随机变量最经典的第一个例子是二项随机变量(binomial random variable)。设硬币出现正面的概率为 (均匀硬币就是 0.5),独立地掷 次,令 为正面出现的次数—— 就是参数为 的二项随机变量,服从二项分布(binomial distribution)。
先用直觉预热讲师课上的两道提问:
- 掷 10 次均匀硬币,出现 5 次正面的概率大,还是 10 次全正面的概率大? 不用算也知道:大概率为 4、5、6 次正面这种”半数附近”的情形,而 10 次全正、全反这种极端,概率很小。
- 射箭命中率 1/3,射 100 箭:命中 10 箭、15 箭、30 箭、80 箭的概率各有多大? 两头极端小,越靠近真实水平(约 33 箭)概率越大。
分布的形状由 p 主导——讲师:“p 实际上是决定了这个分布的最重要的一个参数。“p 变成 0.3,最高点就挪到 30 次附近;p 等于 0.8,就挪到 80 次附近。课件的标准图取 p=1/2、n=9:出现 4 次和 5 次正面的概率最大(各约 0.246),1 次或 9 次正面的概率小到几乎看不见。
公式:给定 n 与 p,“恰好 k 次正面”的概率是
其中 (n 选 k)是排列组合数。讲师没让人死记公式,而是当场画了一部”梯子”来推它:把每次掷币画成一层的岔路,向上记 H(概率 p)、向下记 T(概率 1−p)。以 3 层为例,走完共有 条路径,每条路径的概率是沿途各步的连乘——比如路径 T-H-H 的概率是 。再按”正面次数 k”把路径归堆:k=3 只有全 H 一条,;k=2 有 T-H-H、H-T-H、H-H-T 三条,每条 ;k=1 三条,每条 ;k=0 一条,。堆内条数 1、3、3、1 恰好就是 ,“每堆加总”自然得到 ;四堆再全部加起来,恰好是 的二项式展开。讲师鼓励大家”按这个梯子的阶段不断地自己去尝试”——练一练第 2 题就把这部梯子写成代码;至于展开系数 1、3、3、1 连成的杨辉三角,接下来《分布(一)》还会正面展开。
把讲师的两道提问交给代码作答:
import math
def binomial_pmf(n, p, k):
"""二项分布 Binomial(n, p):n 次独立试验中恰好 k 次成功的概率。"""
return math.comb(n, k) * (p ** k) * ((1 - p) ** (n - k))
print("问题一:掷 10 次均匀硬币(p=0.5),不同正面次数的概率")
for k in (0, 5, 10):
print(f" P(X={k}) = {binomial_pmf(10, 0.5, k):.6f}")
print()
print("问题二:射箭命中率 1/3,射 100 箭,不同命中箭数的概率")
for k in (10, 15, 30, 33, 50, 80):
print(f" P(X={k}) = {binomial_pmf(100, 1/3, k):.4e}")问题一:掷 10 次均匀硬币(p=0.5),不同正面次数的概率
P(X=0) = 0.000977
P(X=5) = 0.246094
P(X=10) = 0.000977
问题二:射箭命中率 1/3,射 100 箭,不同命中箭数的概率
P(X=10) = 4.1579e-08
P(X=15) = 1.9016e-05
P(X=30) = 6.7284e-02
P(X=33) = 8.4383e-02
P(X=50) = 2.2041e-04
P(X=80) = 1.0905e-21读数:掷 10 次均匀硬币,5 次正面的概率约 24.6%,而 0 次或 10 次这种极端各只有约 0.098%——中间压倒两端;命中率 1/3 的箭手射 100 箭,命中 33 箭(约等于 )附近概率最高(8.44%),命中 10 箭只有约 ,命中 80 箭更是 量级——课上的直觉完全兑现。
高尔顿钉板:所有小选择叠加成正态分布
二项分布最直观的教具是高尔顿钉板(Galton board):板上钉满交错排列的钉子,小球从顶部落下,每碰到一颗钉子,有 1/2 的概率向左、1/2 的概率向右;层层弹跳,最终落进底部某个槽位。一个球落进哪个槽是随机的,但成千上万个球落下来,槽位堆出的形状高度稳定——中间高、两边低。
讲师在钉板前插了一段有名的”人生选择”闲话:很多人觉得”当年的某一件事改变了我的命运”——小学没去对,害得没上好中学,没上好大学,没找到好工作,一生就成这样了。但仔细想并不完全是这样:就算把”向左”全当错、“向右”全当对,你第一步走错了,下一步仍有向左、向右两个选择,仍有纠错的机会。于是大多数人一生对错掺杂,都聚在中间——成了普通的大众;只有极少数人每次都选错,一路走到角落里(讲师笑说”也许目前在监狱里待着了”);也只有极少数人每次都选对,走到另一端——类似马云、马化腾那样的成功人士。讲师的结论是:今天你是什么状态,不要怪过去的某一个选择——你是所有每一步选择叠加的总和。
把钉板交给代码复现——12 层钉板、5000 个小球,看堆出的形状:
import random
def galton_board(levels, num_balls, p=0.5):
"""模拟高尔顿钉板:小球逐层下落,每层以概率 p 向右弹一格。"""
random.seed(42)
slots = [0] * (levels + 1)
for _ in range(num_balls):
position = 0
for _ in range(levels):
if random.random() < p:
position += 1
slots[position] += 1
return slots
levels = 12
num_balls = 5000
slots = galton_board(levels, num_balls)
print(f"高尔顿钉板模拟({levels} 层、{num_balls} 个小球、p=0.5)")
max_count = max(slots)
scale = 30.0 / max_count
for i, count in enumerate(slots):
bar = "█" * int(count * scale)
print(f"槽位 {i:2d} | {count:4d} {bar}")高尔顿钉板模拟(12 层、5000 个小球、p=0.5)
槽位 0 | 2
槽位 1 | 22
槽位 2 | 80 ██
槽位 3 | 252 ██████
槽位 4 | 606 ████████████████
槽位 5 | 973 █████████████████████████
槽位 6 | 1128 ██████████████████████████████
槽位 7 | 936 ████████████████████████
槽位 8 | 621 ████████████████
槽位 9 | 290 ███████
槽位 10 | 74 █
槽位 11 | 15
槽位 12 | 1中间槽位(第 6 格附近)最高、两端稀少——这正是 Binomial(12, 0.5) 的概率质量图,钟形已现。背后的规律讲师一句话说透:二项分布在不断的叠加之下,就变成了我们生活中最重要的正态分布。我们的身高、考试成绩,甚至一个班里的近视眼镜度数,都近似服从这种中间高、两边低的分布;信号处理里”没有任何已知信息时,就先假设噪声是高斯白噪声”的惯例,根源也在这里——n 趋于无穷大时,二项分布收敛到正态分布。正态分布长什么样、怎么用,接下来讲分布的两节正式登场。
📝 动手练一练
- 概念辨析:一枚不均匀硬币,正面概率 。掷 5 次:“恰好出现 3 次正面”与”前 3 次正面、后 2 次反面”,哪个概率大?大多少倍?
👉 点击查看参考答案
“恰好 3 次正面”是二项分布问题,:
“前 3 次正面、后 2 次反面”是特定序列的概率,每次掷币独立,各步概率连乘:
比较: 是 的整整 10 倍。倍数恰好就是 ——“恰好 3 次正面”包含全部 10 种”3 正 2 反”的序列,而”前 3 后 2”只是其中一种。这正呼应了正文里的梯子推导:公式中的组合数,数的就是同组路径的条数。
- 代码实践:把讲师画的”梯子”写成代码——枚举 时全部 条掷币序列,每条按连乘算出路径概率,再按正面次数 k 分组累加,与二项式公式 逐一对照。
👉 点击查看参考答案
import math
from itertools import product
n = 4
p = 0.3
formula = [math.comb(n, k) * p ** k * (1 - p) ** (n - k) for k in range(n + 1)]
grouped = [0.0] * (n + 1)
print(f"n={n}、p={p}:把 {2**n} 条掷币序列按正面次数分组累加,与公式对照")
for seq in product("HT", repeat=n):
k = seq.count("H")
prob = (p ** k) * ((1 - p) ** (n - k))
grouped[k] += prob
for k in range(n + 1):
match = "一致" if abs(grouped[k] - formula[k]) < 1e-12 else "不一致"
print(f"k={k}: 分组累加={grouped[k]:.6f}, 公式={formula[k]:.6f} → {match}")
print(f"总和 = {sum(grouped):.6f}")n=4、p=0.3:把 16 条掷币序列按正面次数分组累加,与公式对照
k=0: 分组累加=0.240100, 公式=0.240100 → 一致
k=1: 分组累加=0.411600, 公式=0.411600 → 一致
k=2: 分组累加=0.264600, 公式=0.264600 → 一致
k=3: 分组累加=0.075600, 公式=0.075600 → 一致
k=4: 分组累加=0.008100, 公式=0.008100 → 一致
总和 = 1.000000分组累加与公式逐项一致:同组的每条序列概率都是 ,组内恰好有 条(k=2 那组有 6 条),乘起来就是公式;全部加总等于 1,也就是二项式展开 。梯子的每一格,代码都替你数清楚了。
本章小结
本节四件事,环环相扣:独立时联合概率直接相乘(),不独立时退回条件概率乘法链;把乘法链的两条等式一挪,就是”用数据更新信念”的贝叶斯公式——后验 = 先验 × 似然 / 证据,男女分类是它最直接的落地雏形;随机变量是”结果到数值”的函数,配上概率分布才是完整定义;二项分布数 n 次独立试验的成功次数,公式背后是路径分组的梯子推导——而它不断叠加就长成正态分布。高尔顿钉板还把这个道理钉进了生活:今天的你,是所有选择叠加的总和。
📋 行动清单
- 默写贝叶斯公式,并准确说出”后验、似然、先验、证据”四个部件各自的含义
- 用
binomial_pmf(n=100, p, k)分别取 p=0.3、0.5、0.8 找概率最大的 k,验证讲师”峰值跟着 p 走”(约 30、50、80) - 顺着讲师的问题想一想:为什么没有任何已知信息时,常常先假设噪声是高斯白噪声?再举两个”大量独立小因素叠加成正态”的生活现象
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第2章课件:机器学习的数学基础 II(概率)