查看全课大纲(第 16 / 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 回传

有监督学习:从房价预测说起

约 23 分钟

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

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

前几节课我们打完了数学地基(线性代数、概率统计),也聊透了机器学习的宏观哲学。从本节开始,进入第一个真正的机器学习问题:波特兰的房价预测。讲师在课上说明这个例子借鉴了吴恩达(Andrew Ng)的公开课——英文好的同学可以直接去 follow 原版,会有更多收获。我们将沿着”提出问题 → 统一记号 → 选定最简模型 → 手工试出最优解”的路径,把监督学习第一次完整走通。

💡 核心导读

  • 回顾主线:机器学习 = model learning = 在假设空间(hypothesis space)中搜寻最能解释数据的数学模型。
  • 第一个问题:波特兰房价——给定历史数据(面积 → 价格),预测新房子的价格。
  • 统一记号:训练数据 DD、上标 (i)(i) 标样本序号(区别于幂)、特征向量 xx 与标签 yy。
  • 线性模型:hθ(x)=θTxh_\theta(x) = \theta^T x——用 x0≡1x_0 \equiv 1 的小技巧把截距也收进向量形式。
  • 手工试解:在 h=θxh=\theta x 的最简情形下,靠”试线—看误差—调整”找到完美拟合,体会学习到底在做什么。

机器学习回顾:从哲学到动手

先用几句话把前面的宏观图景串起来。机器学习本质上是 model learning:在一个巨大的假设空间(hypothesis space)里,搜寻能最好地解释已知数据的那个假设——它的表现形式就是一个函数或数学模型。模型经过训练数据的训练之后,就可以用来预测或分类。

问题按范式分四大类,各自特点一句话说清:

  • 监督学习:所有数据都有标签;
  • 无监督学习:物以类聚、人以群分,看数据自身特点决定聚类;
  • 半监督学习:一部分有标签、一部分没有;
  • 强化学习:不直接给标签,但每次执行动作后给一个奖赏或惩罚——有点像监督学习,只是”标签”只有奖惩信号(game AI、下棋都属此类)。

为什么要先学线性代数?因为每个数据都要表示成特征向量。为什么要学概率统计?因为研究模型时充满不确定性,概率是最好的建模语言。地基备齐,现在开始砌第一块砖。

第一个机器学习问题:波特兰房价

问题设定(borrowed from 吴恩达的例子):研究美国城市波特兰(Portland)的房价。给定一组历史数据:横轴 xx 是房子的居住面积(living area,美国用平方英尺 square feet 计,咱们中国习惯用平方米),纵轴 yy 是价格(以每 1000 美元为单位——西方习惯用”千”,我们习惯说”万”,看到 400 千就是 40 万,熟悉一下这个换算就好)。

把所有已知数据画成散点,它们大致排成一条直线状的带子。现在来了一套新房子,面积 3500 平方英尺——训练数据里没有它。我们想知道:f(x0)=?f(x_0) = ?,即它的房价该预测为多少?

这就是最典型的一类问题:学一个从输入到输出的关系。既然数据看着像一条直线,那就从最简单的”直线”开始假设。

训练数据与记号

先把记号统一,后面所有算法都沿用:

  • 训练数据(training data) 记作 DD,由 NN 对数据组成: D={(x(1),y(1)),(x(2),y(2)),…,(x(N),y(N))}D = \lbrace (x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \dots, (x^{(N)}, y^{(N)}) \rbrace
  • 上标带括号:x(i)x^{(i)} 表示第 ii 个样本。注意它和 x2x^2(xx 的平方)不是一回事——括号是序号,没括号是幂。
  • cardinality:描述集合里元素个数的术语——DD 的 cardinality 就是 NN。
  • 每个样本的特征 x(i)x^{(i)} 是一个 nn 维向量(x(i)∈Rnx^{(i)} \in \mathbb{R}^n):第一个维度可以是房子面积,第二个是卧室数,第三个可以是院子大小(当然,美国的例子才有院子——中国的房子一般不带院子卖,讲师原话)。
  • 标签 y(i)y^{(i)} 一般是一个标量(y(i)∈Ry^{(i)} \in \mathbb{R}),比如价格。

比如”面积 + 卧室数”两个特征的问题:同样面积下,多一个卧室的房子通常更贵——所以特征从一个标量升级为二维向量,模型也随之升维。我们要做的事情始终没变:学习 x(i)→y(i)x^{(i)} \to y^{(i)} 的映射关系,使得用函数 ff 表达的对应关系是最好的。这是一个标准的监督学习问题。

线性模型:假设空间的第一个成员

先从最简单的情况开始,假设 hθ(x)h_\theta(x) 是一个线性函数。什么叫线性函数?讲师现场画了一条线考大家:这条线经过 (0,2)(0, 2) 和 (1,0)(1, 0) 两个点,方程是什么?

  • x=0x=0 时 y=2y=2,x=1x=1 时 y=0y=0,两点唯一确定一条直线;
  • 稍加计算可得:y=−2x+2y = -2x + 2(验证:x=0x=0 得 22;x=1x=1 得 −2+2=0-2+2=0)。

用代码把”两点定线”走一遍:

# 两点确定一条直线:讲师课堂例 (0,2) 与 (1,0)
p1 = (0, 2)
p2 = (1, 0)

theta1 = (p2[1] - p1[1]) / (p2[0] - p1[0])  # 斜率 θ1
theta0 = p1[1] - theta1 * p1[0]            # 截距 θ0

print(f"两点 {p1} 与 {p2} 确定的直线:h(x) = {theta1:g}·x + {theta0:g}")
print(f"验证 x=0: h(0) = {theta1 * 0 + theta0:g}(应为 2)")
print(f"验证 x=1: h(1) = {theta1 * 1 + theta0:g}(应为 0)")
两点 (0, 2) 与 (1, 0) 确定的直线:h(x) = -2·x + 2
验证 x=0: h(0) = 2(应为 2)
验证 x=1: h(1) = 0(应为 0)

直线有两个关键参数:斜率 θ1\theta_1(例子里的 −2-2)和截距 θ0\theta_0(例子里的 22)。于是线性模型的一般形式为:

hθ(x)=θ1x+θ0(就是我们熟悉的 y=ax+b)h_\theta(x) = \theta_1 x + \theta_0 \quad (\text{就是我们熟悉的 } y = ax + b)

向量化:一个技巧统一所有写法

引入一个永远等于 1 的虚拟特征 x0≡1x_0 \equiv 1,模型就能写成规整的对称形式:

hθ(x)=θ1x1+θ0x0h_\theta(x) = \theta_1 x_1 + \theta_0 x_0

再把参数和特征各自堆成向量 θ=(θ0,θ1)T\theta = (\theta_0, \theta_1)^T、x=(x0,x1)Tx = (x_0, x_1)^T,线性模型就变成了一个内积:

hθ(x)=θTxh_\theta(x) = \theta^T x

这个写法的推广性极好:两个特征(面积 x1x_1、卧室数 x2x_2)时,hθ(x)=θ0x0+θ1x1+θ2x2h_\theta(x) = \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 依然是 θTx\theta^T x,只是函数图像从一条线变成三维空间里的一张面;特征继续加,无非维数继续涨。一般地,nn 个特征时 θ∈Rn+1\theta \in \mathbb{R}^{n+1}、x∈Rn+1x \in \mathbb{R}^{n+1}——多出来的那一维,就是 x0=1x_0=1 这个”截距占位”。

最简情形:一条过原点的直线怎么”调”出来

一切从最简单的开始。令 θ0=0\theta_0 = 0,假设退化为最简形式 hθ(x)=θxh_\theta(x) = \theta x——一条必须过原点的直线,θ\theta 一变,直线就绕着原点转。

讲师给了三个训练点:D={(1,1),(2,2),(3,3)}D = \lbrace (1,1), (2,2), (3,3) \rbrace(输入 1 输出 1,输入 2 输出 2,输入 3 输出 3)。现在要学出最好的 θ\theta。

试线的过程:

  1. 先试 θ=12\theta = \frac{1}{2},即 y=0.5xy = 0.5x——三个点都不在线上,误差不小;
  2. 再试一条更歪的——误差反而更大,方向不对,继续调;
  3. 调到 θ=1\theta = 1,即 y=xy = x——三个点全部落在线上,完美。

用代码复现这个”试线—看误差”的过程:

# 训练数据 D = {(1,1), (2,2), (3,3)},假设 h(x) = θx(过原点的直线)
D = [(1, 1), (2, 2), (3, 3)]

def h(theta, x):
    """最简线性假设:h(x) = θx"""
    return theta * x

for theta in [0.5, 0.8, 1.0]:
    preds = [round(h(theta, x), 6) for x, _ in D]
    errors = [round(h(theta, x) - y, 6) for x, y in D]
    print(f"θ = {theta}: 预测 {preds},误差 {errors}")
θ = 0.5: 预测 [0.5, 1.0, 1.5],误差 [-0.5, -1.0, -1.5]
θ = 0.8: 预测 [0.8, 1.6, 2.4],误差 [-0.2, -0.4, -0.6]
θ = 1.0: 预测 [1.0, 2.0, 3.0],误差 [0.0, 0.0, 0.0]

可以看到:θ\theta 从 0.5 调到 0.8,误差整体缩小;调到 1.0,误差全部归零。所谓”学习”,就是这样一个不断调整参数、让假设越来越贴合数据的过程——我们最终需要的,是让所有点到这条线的距离(误差)最短,让假设能尽可能完美地解释数据。

📝 动手练一练

  1. 两点定线:给定训练点 (0,1)(0, 1) 与 (2,5)(2, 5),求出它们确定的线性模型 h(x)=θ1x+θ0h(x) = \theta_1 x + \theta_0,并验证两点都在线上。
👉 点击查看参考答案

斜率 θ1=5−12−0=2\theta_1 = \frac{5-1}{2-0} = 2,截距 θ0=1\theta_0 = 1(把 x=0,y=1x=0, y=1 代入 y=θ1x+θ0y = \theta_1 x + \theta_0 即得)。所以 h(x)=2x+1h(x) = 2x + 1。

验证:h(0)=1h(0) = 1 ✓,h(2)=5h(2) = 5 ✓。

  1. 试线与误差:换一组数据 D={(1,2),(2,4),(3,6)}D = \lbrace (1,2), (2,4), (3,6) \rbrace(即 y=2xy = 2x 的点),假设仍为 h(x)=θxh(x) = \theta x。分别取 θ=1\theta = 1 和 θ=2\theta = 2,逐点计算误差 h(x)−yh(x) - y。哪个 θ\theta 更好?由此体会”调参”在干什么。
👉 点击查看参考答案
  • θ=1\theta = 1:预测 (1,2,3)(1, 2, 3),误差 (−1,−2,−3)(-1, -2, -3)——全线偏小,误差很大;
  • θ=2\theta = 2:预测 (2,4,6)(2, 4, 6),误差 (0,0,0)(0, 0, 0)——完美拟合。

θ=2\theta = 2 更好。“调参”就是朝误差变小的方向修改 θ\theta:误差全为负说明预测偏低,应调大 θ\theta。下一节我们要做的,就是把”误差大小”写成一个严格的数学函数(损失函数),让”朝哪调、调多少”不再靠手感。

本章小结

  • 机器学习 = 在假设空间里搜寻最好解释数据的模型;监督学习 = 所有样本都有标签 (x(i),y(i))(x^{(i)}, y^{(i)})。
  • 波特兰房价是第一个完整走通的监督学习问题:预测 3500 平方英尺新房子的价格。
  • 记号是全课程的通用语言:DD 有 NN 对数据(cardinality 为 NN),x(i)x^{(i)} 是 nn 维特征向量,上标括号区分序号与幂。
  • 线性模型 hθ(x)=θ0+θ1xh_\theta(x) = \theta_0 + \theta_1 x 借 x0≡1x_0 \equiv 1 的小技巧统一为 hθ(x)=θTxh_\theta(x) = \theta^T x,天然支持任意多维特征。
  • 在 h=θxh=\theta x 的最简情形下,“试线—看误差—调整”就是学习的雏形:θ=1\theta=1 让 (1,1),(2,2),(3,3)(1,1),(2,2),(3,3) 全部零误差。

📋 行动清单

  • 用自己的话解释 x(2)x^{(2)} 与 x2x^2 的区别,以及 x0≡1x_0 \equiv 1 这个”占位特征”为什么能统一线性模型的写法
  • 手算两点定线:任取两个点,求出 h(x)h(x),再代入验证
  • 预习下一节:把”误差大小”写成一个严格的函数需要什么要素?(提示:正负号怎么处理、多个样本的误差怎么合并)

—— 小象教研组

配套资料 · 直接下载

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

  • 第4章课件:机器学习的数学基础 III
    下载
  • 第4章笔记:梯度下降
    下载