查看全课大纲(第 36 / 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 回传
极大似然:给最小二乘一个概率出身
约 11 分钟
小象实战讲义 · 机器学习算法精讲
上一节结尾埋了一个问题:把残差建模成 的噪声之后,“平方损失凭什么合理”就等在前面了。本节兑现这个承诺——在正态噪声假设下,线性回归的极大似然估计恰好就是最小二乘解。我们先复习极大似然的一般流程,再把线性函数”装进”正态分布里,最后用一行推导把两种目标焊在一起。从此,最小二乘不再是拍脑袋选的,它是概率假设的必然产物。
💡 核心导读
- 正态噪声假设:点到拟合线的距离服从正态分布——距离小的概率大、特别大的概率特别小,这是全部推导的地基。
- 复习极大似然:参数 (换成 与 )→ 联合概率 → 独立则连乘 → 乘积都是小数,取对数变加和。
- 关键一步:沿整条直线每个点扣一个固定 的正态”小碗”,把 这个线性误差写成正态分布的一部分。
- 等价性:——似然最大,就是平方和最小。
- 小碗扣糖豆: 控制线的位置, 不对碗就全扣歪; 合适,每个小碗都稳稳扣住数据。
从误差到假设:距离的概率画像
给定一个线性方程、给定数据,我们想要最好的线性拟合。但只要动手做拟合就会发现:数据与线之间总会有误差。与其回避,不如正面描述它——用概率的形式。
我们做一个基础假设:这些误差 (点到当前最近距离上的偏离)服从正态分布。这个假设很符合直觉:距离小的,一般都很小;特别大的距离,概率会特别小——正是正态分布”中间高、两头低”的形状。
有了这个假设,接下来就看:怎么把”极大似然”与”最小二乘里减少 cost function”这两件事统一起来。
先复习:一般的极大似然长什么样
讲师先把极大似然的一般流程过了一遍(第 5 章朴素贝叶斯讲 MAP 与 log trick 时已经见过同款操作)。
给定一组数据 (这里 是一维的,所以不写得那么啰嗦, 到 代表 个数)。我们认为它们服从正态分布——以均值 、方差 为参数的随机变量。把参数记作 ,则 就是 :观察到这组数据的联合概率,是给定 时的条件概率,而它服从正态——把正态的概率密度函数(第 2 章的老朋友)代进来即可。
如果假设这些数据之间相互独立(做朴素贝叶斯时也是这么假设的),联合概率就拆成每一个概率的乘积:
极大似然的目标:调整 ,使这个乘积最大。但每个 都是小数,越乘越小、算起来也麻烦——老 trick 登场:取对数,乘积变加和:
调整 使对数似然 最大。到这一步为止,都是复习。
把线性函数装进正态分布
现在是关键一步,讲师给了一个非常好用的画面:在这条直线上,每一个点都扣着一个同样大小(固定 )的正态分布小碗。
给定任何一个 :它的期望值由线性函数给出—— 乘上 ,就是线性组合 ;而观测到的是 。把两者之差 放进正态密度函数的指数位置,就构造出一个以 为中心的正态分布:
看清楚这个函数的两部分:前面的系数部分都是固定的,真正随 变化的是指数里那一项——观测与期望之间的差,被我们解释成了”线性函数产生的误差”。把线性误差写成正态分布的一部分——线性模型与概率模型就这样直接关联到一起了。
等价性:似然最大 = 平方和最小
把每个样本的密度连乘、取对数(独立假设 + log trick 再用一次):
第一项只含 与 ,与 无关(本节沿用讲师的设定: 是给定的固定值;它当然也可以作为参数一起估计,那超出了本节范围)。于是最大化 只剩一件事可争:
右边正是最小二乘的目标函数。 整个变化就在这里:以前我们用最小二乘也好、梯度下降也好,都是在”调整 使损失函数最小”;今天多了一条路——调整 使似然值最大。两条路通向同一个 。所以说,用概率的方式求极大似然,某种程度上就是在求 cost function 最小——两者直接联系到了一起。
数值验证:亲手把两条路走到同一个点
用一小段纯 Python 验证等价性:固定 ,用上一节的正规方程解出 ,再算出各候选参数的完整对数似然——看 是否稳坐似然最高点,并验证”对数似然之差 = 平方和之差除以 “这个恒等式。
import math
# 数据:5 个样本,y 大致沿 y = 1.5x + 2 分布,带少量手工噪声
x = [1, 2, 3, 4, 5]
y = [3.6, 4.9, 6.7, 8.2, 9.6]
def dot(v1, v2):
return sum(a * b for a, b in zip(v1, v2))
# ---- 第一步:最小二乘解析解(上一节的正规方程)----
col0 = [1.0] * len(x) # x0 = 1
ATA = [[dot(col0, col0), dot(col0, x)],
[dot(x, col0), dot(x, x)]]
ATy = [dot(col0, y), dot(x, y)]
det = ATA[0][0] * ATA[1][1] - ATA[0][1] * ATA[1][0]
theta = [(ATA[1][1] * ATy[0] - ATA[0][1] * ATy[1]) / det,
(ATA[0][0] * ATy[1] - ATA[1][0] * ATy[0]) / det]
def sse(t0, t1):
return sum((yi - (t0 + t1 * xi)) ** 2 for xi, yi in zip(x, y))
print("A^T A =", ATA)
print("A^T y =", ATy)
print(f"最小二乘解: theta0 = {theta[0]}, theta1 = {theta[1]}")
print(f"解处的残差平方和 SSE = {sse(*theta):.4f}")
# ---- 第二步:完整对数似然(固定 sigma = 0.5)----
sigma = 0.5
def loglik(t0, t1):
ll = 0.0
for xi, yi in zip(x, y):
e = yi - (t0 + t1 * xi)
ll += -0.5 * math.log(2 * math.pi) - math.log(sigma) - e * e / (2 * sigma ** 2)
return ll
# ---- 第三步:让"别的 theta"来挑战 ----
candidates = [
("theta_hat(最小二乘解)", theta[0], theta[1]),
("截距挪远(theta0+0.4)", theta[0] + 0.4, theta[1]),
("斜率挪远(theta1-0.3)", theta[0], theta[1] - 0.3),
("两条都挪(1.6, 1.8)", 1.6, 1.8),
]
print(f"\n固定 sigma = {sigma},各参数组合的对数似然:")
for name, t0, t1 in candidates:
print(f" {name}: SSE = {sse(t0, t1):.4f}, log L = {loglik(t0, t1):.4f}")
# ---- 第四步:验证恒等式 logL = -SSE/(2*sigma^2) + 与 theta 无关的常数 ----
ll_hat = loglik(*theta)
ll_move = loglik(theta[0] + 0.4, theta[1])
diff_ll = ll_hat - ll_move
diff_pred = (sse(theta[0] + 0.4, theta[1]) - sse(*theta)) / (2 * sigma ** 2)
print(f"\n恒等式验证: logL(theta_hat) - logL(挪远) = {diff_ll:.4f}")
print(f" 理论预测 (SSE' - SSE)/(2*sigma^2) = {diff_pred:.4f}")A^T A = [[5.0, 15.0], [15.0, 55]]
A^T y = [33.0, 114.3]
最小二乘解: theta0 = 2.01, theta1 = 1.53
解处的残差平方和 SSE = 0.0510
固定 sigma = 0.5,各参数组合的对数似然:
theta_hat(最小二乘解): SSE = 0.0510, log L = -1.2310
截距挪远(theta0+0.4): SSE = 0.8510, log L = -2.8310
斜率挪远(theta1-0.3): SSE = 5.0010, log L = -11.1310
两条都挪(1.6, 1.8): SSE = 1.5800, log L = -4.2890
恒等式验证: logL(theta_hat) - logL(挪远) = 1.6000
理论预测 (SSE' - SSE)/(2*sigma^2) = 1.6000结果一目了然:四个候选里,最小二乘解 的 SSE 最小(),对数似然也最高()——其余三个怎么挪都比它差;而且对数似然之差与理论预测精确相等(),连浮点毛边都没有。顺带注意”斜率挪远”的下场最惨(SSE 从 暴涨到 ):斜率一歪,离得越远的点被拖得越狠。
小碗扣糖豆:把直觉扣牢
最后把这个画面记住。数据像一地的小蚂蚁、小糖豆;正态分布像一只只小碗。我们需要一个碗把所有东西都盖住——盖得越好,似然值越大。
而碗的位置由谁控制?由 控制—— 决定那条线的位置。随便举一个不好的 :线画歪了,所有点到线的距离全变,给定固定 的正态分布,碗就全部扣歪了——碗都扣到没有糖豆的位置上去了,对数据的”覆盖质量”非常差,似然值小。如果 恰到好处,构造出来的每一个小碗都能稳稳地把数据 cover 住,似然值就是大的。
所以我们才要不断调整 ,直到它待在最合适的地方,使极大似然值最大——这句话翻译回上一节的语言,就是”不断调整 ,使损失函数最小”。
两种理解方式,一个结果
到这里,linear model 在我们手里有了两副完整的眼镜:
- 几何的理解(上一节):构造一个向量空间,在里面找一个合适的线性组合,使误差最小——最小二乘是投影。
- 概率的理解(本节):认为每个点到它所期望函数之间的距离服从正态分布,调整 使似然最大——最小二乘是极大似然。
无论是构造损失函数使误差最小,还是用概率的方式求极大似然,都能得到一样的结果。下几节的岭回归、逻辑回归,将轮流借用这两副眼镜。
📝 动手练一练
- 等价性推导:在正态误差假设下,写出”最大化对数似然 最小化残差平方和”的关键推导步骤。
👉 点击查看参考答案
对数似然为:
第一项 只含 与固定的 ,与 无关,不影响最优点。于是最大化 等价于最大化 ;由于 是负常数,这又等价于最小化 ——残差平方和,正是最小二乘的目标函数。所以 。
- 单点似然手算:观测到一个样本 。两条候选拟合线在这一点给出的预测分别是 与 ,取 。分别计算两个高斯密度 ,判断哪条线的似然大,并算出倍数。
👉 点击查看参考答案
代入 ,其中 :
- 线一(预测 3.0):残差 ,指数 ,;
- 线二(预测 3.9):残差 ,指数 ,。
线一的似然大约是线二的 倍(正是 )——同一条观测,贴得近的线,似然高。全部样本连乘起来,这个差距逐点放大,这就是”碗要扣在有糖豆的地方”的数学含义。
本章小结
- 正态噪声假设:点到拟合线的距离 服从正态分布——距离小的概率大、特别大的概率特别小,这是连接概率与回归的地基。
- 似然构造:沿直线每个点扣一个固定 的正态小碗, 进指数,即 ;独立则连乘,log trick 变加和。
- 等价性:,与 无关的常数不争胜负——极大似然估计 = 最小二乘估计,数值实验精确印证(似然差 = 平方和差 / )。
- 小碗扣糖豆: 控制线,线控制碗的位置;碗扣歪了似然就小,扣稳了似然就大。
- 两副眼镜:几何(向量空间的投影)与概率(正态噪声下的极大似然)是同一个最小二乘的两种理解,后面章节轮流使用。
📋 行动清单
- 不看讲义,从 出发,推出”极大似然 = 最小二乘”的完整链路
- 运行本节代码,把”斜率挪远”改成”斜率挪远 0.1”,观察 SSE 与对数似然的变化幅度
- 给同学讲一遍”小碗扣糖豆”:为什么 不好碗就全歪、 合适似然就大
- 预习下一节《逻辑回归(1)》:线性模型加上 Sigmoid,从回归走向分类
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。