从房价预测理解线性回归

现实场景

假设我们想要预测一套房子的价格,我们知道房价通常与房屋面积密切相关。一般来说:

  • 面积越大的房子,价格越高
  • 面积越小的房子,价格越低

数据观察

我们收集了一些历史数据:

房屋面积(㎡) 价格(万元)
60 120
80 160
100 200
120 240
140 280

建立线性关系

从数据中我们可以发现一个规律:

价格=2×面积价格 = 2 \times 面积

这就是一个最简单的线性回归模型

y=wx+by = wx + b

其中:

  • yy:要预测的目标变量(房价)
  • xx:特征变量(房屋面积)
  • ww:权重系数(每平米价格)
  • bb:偏置项(基础价格)

扩展到多特征

现实中,房价不仅取决于面积,还受其他因素影响:

  • 卧室数量
  • 地理位置
  • 房龄
  • 周边设施
  • 是不是有两个卫生间~

这时就需要多元线性回归

y=w1x1+w2x2+...+wnxn+by = w_1x_1 + w_2x_2 + ... + w_nx_n + b*

一般用向量形式写成

f(x)=wT+bf(x)=w^T+b

核心思想

线性回归的目标就是找到最佳的 wwbb,使得预测值与真实值之间的误差最小。
Need:

  • 评价模型的标准
  • 优化模型的方法

线性模型形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想.许多功能更为强大的非线性模型(nonlinearmodel)可在线性模型的基础上通过引入层级结构或高维映射而得.此外,由于
直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性.

非线性回归

相比于线性回归会有交叉影响项,例如 y=w1x2+w2sin(x)+by=w_1x^2+w_2sin(x)+b
适合:

  • 特征与目标呈复杂曲线关系
  • 预测精度要求高
  • 数据量充足
  • 可以接受"黑箱"模型

训练数据

定义:收集到的用于确认参数(weights&bias)的历史数据

损失函数(评价手段)

为什么需要损失函数?

线性回归的目标是找到最佳的参数 wwbb,但我们需要一个量化标准来衡量模型的好坏。损失函数就是这个评价标准。

平方误差(Square Error)

对于单个样本 (xi,yi)(x_i, y_i),平方误差定义为:

SE=(f(xi)yi)2=(y^iyi)2SE = (f(x_i) - y_i)^2 = (\hat{y}_i - y_i)^2

其中:

  • y^i\hat{y}_i 是模型预测值
  • yiy_i 是真实值

平方误差的问题

虽然平方误差直观易懂,但它存在几个问题:

  1. 量纲依赖:误差的单位是原单位的平方
  2. 样本数量影响:样本越多,总误差越大,难以比较不同数据集
  3. 对异常值敏感:由于平方操作,大误差会被放大

均方误差(MSE)的出现

为了解决这些问题,我们引入均方误差(Mean Square Error)

MSE=1mi=1m(f(xi)yi)2MSE = \frac{1}{m}\sum_{i=1}^{m}(f(x_i) - y_i)^2

其中 mm 是样本数量。

MSE的优势:

  • 消除了样本数量的影响
  • 保持了误差的单调性
  • 数学性质良好(可微、凸函数)

损失函数的数学表达

对于线性回归模型 f(x)=wTx+bf(x) = w^Tx + b,损失函数为:

J(w,b)=12mi=1m(f(xi)yi)2J(w,b) = \frac{1}{2m}\sum_{i=1}^{m}(f(x_i) - y_i)^2

这里引入 12\frac{1}{2} 是为了求导时消去系数2,简化计算。

损失函数的几何意义

在二维空间中,MSE可以理解为:

  • 每个数据点到回归直线的垂直距离的平方和
  • 我们的目标就是找到使这个距离平方和最小的直线

优化目标

线性回归的训练过程就是求解:

minw,bJ(w,b)=minw,b12mi=1m(wTxi+byi)2\min_{w,b} J(w,b) = \min_{w,b} \frac{1}{2m}\sum_{i=1}^{m}(w^Tx_i + b - y_i)^2

其他损失函数

虽然MSE最常用,但还有其他选择:

损失函数 公式 特点
平均绝对误差(MAE) 1mf(xi)yi\frac{1}{m}\sum\|f(x_i)-y_i\| 对异常值不敏感
Huber损失 分段函数 MSE和MAE的折中
Log-Cosh损失 log(cosh(f(xi)yi))\sum\log(\cosh(f(x_i)-y_i)) 平滑版本MAE

参数求解方法

单变量线性回归求解

对于模型 y=wx+by = wx + b,损失函数为:

E(w,b)=i=1m(yiwxib)2E(w,b) = \sum_{i=1}^{m}(y_i - wx_i - b)^2

bb 求偏导

Eb=i=1m2(yiwxib)(1)=2i=1m(yiwxib)\frac{\partial E}{\partial b} = \sum_{i=1}^{m} 2(y_i - wx_i - b)(-1) = -2\sum_{i=1}^{m}(y_i - wx_i - b)

令导数为零:

i=1m(yiwxib)=0\sum_{i=1}^{m}(y_i - wx_i - b) = 0

i=1myiwi=1mximb=0\sum_{i=1}^{m}y_i - w\sum_{i=1}^{m}x_i - mb = 0

b=1mi=1myiw1mi=1mxi=yˉwxˉb = \frac{1}{m}\sum_{i=1}^{m}y_i - w\frac{1}{m}\sum_{i=1}^{m}x_i = \bar{y} - w\bar{x}

ww 求偏导

Ew=i=1m2(yiwxib)(xi)=2i=1mxi(yiwxib)\frac{\partial E}{\partial w} = \sum_{i=1}^{m} 2(y_i - wx_i - b)(-x_i) = -2\sum_{i=1}^{m}x_i(y_i - wx_i - b)

令导数为零,并代入 b=yˉwxˉb = \bar{y} - w\bar{x}

i=1mxi(yiwxi(yˉwxˉ))=0\sum_{i=1}^{m}x_i(y_i - wx_i - (\bar{y} - w\bar{x})) = 0

i=1mxi(yiyˉ)wi=1mxi(xixˉ)=0\sum_{i=1}^{m}x_i(y_i - \bar{y}) - w\sum_{i=1}^{m}x_i(x_i - \bar{x}) = 0

解得:

w=i=1mxi(yiyˉ)i=1mxi(xixˉ)=i=1m(xixˉ)(yiyˉ)i=1m(xixˉ)2w = \frac{\sum_{i=1}^{m}x_i(y_i - \bar{y})}{\sum_{i=1}^{m}x_i(x_i - \bar{x})} = \frac{\sum_{i=1}^{m}(x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{m}(x_i - \bar{x})^2}

多元线性回归求解

对于多元线性回归 f(x)=wTx+bf(\boldsymbol{x}) = \boldsymbol{w}^T\boldsymbol{x} + b,我们将其改写为:

f(x)=w^Tx^f(\boldsymbol{x}) = \boldsymbol{\hat{w}}^T\boldsymbol{\hat{x}}

其中:

  • w^=(w;b)\boldsymbol{\hat{w}} = (\boldsymbol{w}; b)
  • x^=(x;1)\boldsymbol{\hat{x}} = (\boldsymbol{x}; 1)

矩阵形式损失函数

E(w^)=(yXw^)T(yXw^)E(\boldsymbol{\hat{w}}) = (\boldsymbol{y} - \boldsymbol{X}\boldsymbol{\hat{w}})^T(\boldsymbol{y} - \boldsymbol{X}\boldsymbol{\hat{w}})

其中:

  • X\boldsymbol{X}m×(d+1)m \times (d+1) 的设计矩阵
  • y\boldsymbol{y}m×1m \times 1 的目标向量

w^\boldsymbol{\hat{w}} 求导

Ew^=2XT(Xw^y)\frac{\partial E}{\partial \boldsymbol{\hat{w}}} = 2\boldsymbol{X}^T(\boldsymbol{X}\boldsymbol{\hat{w}} - \boldsymbol{y})

令导数为零:

XTXw^=XTy\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{\hat{w}} = \boldsymbol{X}^T\boldsymbol{y}

最优解

XTX\boldsymbol{X}^T\boldsymbol{X} 为满秩矩阵时:

w^=(XTX)1XTy\boldsymbol{\hat{w}}^* = (\boldsymbol{X}^T\boldsymbol{X})^{-1}\boldsymbol{X}^T\boldsymbol{y}

最终学得的多元线性回归模型为:

f(x)=xT(XTX)1XTyf(\boldsymbol{x}) = \boldsymbol{x}^T(\boldsymbol{X}^T\boldsymbol{X})^{-1}\boldsymbol{X}^T\boldsymbol{y}

凸函数性质

损失函数 E(w^)E(\boldsymbol{\hat{w}}) 是关于 w^\boldsymbol{\hat{w}} 的凸函数,因为:

  • 二阶导数矩阵 XTX\boldsymbol{X}^T\boldsymbol{X} 是半正定的
  • 对于凸函数,局部最小值就是全局最小值

实际应用考虑

  1. 满秩条件:当特征数多于样本数时,XTX\boldsymbol{X}^T\boldsymbol{X} 可能不满秩
  2. 数值稳定性:矩阵求逆可能数值不稳定
  3. 正则化:可通过添加正则项解决上述问题

梯度下降求解

为什么需要梯度下降?

虽然最小二乘法有解析解,但在以下情况下梯度下降更适用:

  • 数据量很大,矩阵求逆计算成本高
  • 特征维度很高
  • 在线学习场景(数据逐步到达)
  • 非凸优化问题(虽然线性回归是凸的)

梯度下降基本思想

梯度下降是一种迭代优化算法,通过不断沿着梯度反方向更新参数,逐步逼近最优解。

核心公式:

θ=θαJ(θ)\theta = \theta - \alpha \cdot \nabla J(\theta)

其中:

  • θ\theta:参数向量 (w,b)(w, b)
  • α\alpha:学习率(步长)
  • J(θ)\nabla J(\theta):损失函数的梯度

单变量线性回归的梯度下降

梯度计算

对于损失函数 J(w,b)=12mi=1m(wxi+byi)2J(w,b) = \frac{1}{2m}\sum_{i=1}^{m}(wx_i + b - y_i)^2

Jw=1mi=1mxi(wxi+byi)\frac{\partial J}{\partial w} = \frac{1}{m}\sum_{i=1}^{m}x_i(wx_i + b - y_i)

Jb=1mi=1m(wxi+byi)\frac{\partial J}{\partial b} = \frac{1}{m}\sum_{i=1}^{m}(wx_i + b - y_i)

参数更新

w:=wαJww := w - \alpha \cdot \frac{\partial J}{\partial w}

b:=bαJbb := b - \alpha \cdot \frac{\partial J}{\partial b}

多元线性回归的梯度下降

梯度计算

对于损失函数 J(w)=12mi=1m(wTxiyi)2J(\boldsymbol{w}) = \frac{1}{2m}\sum_{i=1}^{m}(\boldsymbol{w}^T\boldsymbol{x}_i - y_i)^2

J(w)=1mXT(Xwy)\nabla J(\boldsymbol{w}) = \frac{1}{m}\boldsymbol{X}^T(\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y})

参数更新

w:=wαJ(w)\boldsymbol{w} := \boldsymbol{w} - \alpha \cdot \nabla J(\boldsymbol{w})

梯度下降的变种

1. 批量梯度下降(Batch Gradient Descent)

  • 使用全部训练数据计算梯度
  • 每次迭代稳定但计算量大
  • 适合数据量不大的情况

2. 随机梯度下降(Stochastic Gradient Descent)

  • 每次使用单个样本计算梯度
  • 更新频繁,收敛快但波动大
  • 适合在线学习和大数据

3. 小批量梯度下降(Mini-batch Gradient Descent)

  • 每次使用一小批样本计算梯度
  • 平衡了计算效率和收敛稳定性
  • 实际应用中最常用

学习率选择

学习率 α\alpha 的选择至关重要:

学习率 效果 问题
太小 收敛慢 训练时间长
合适 稳定收敛 -
太大 可能发散 无法收敛

收敛判断

  1. 损失函数变化J(θ(t))J(θ(t1))<ϵ|J(\theta^{(t)}) - J(\theta^{(t-1)})| < \epsilon
  2. 参数变化θ(t)θ(t1)<ϵ\|\theta^{(t)} - \theta^{(t-1)}\| < \epsilon
  3. 梯度范数J(θ(t))<ϵ\|\nabla J(\theta^{(t)})\| < \epsilon

梯度下降 vs 最小二乘法

特性 梯度下降 最小二乘法
计算复杂度 O(kmn)O(k \cdot m \cdot n) O(n3)O(n^3)
内存需求 O(mn)O(m \cdot n) O(n2)O(n^2)
适用规模 大规模数据 小规模数据
收敛性 迭代收敛 一步到位
在线学习 支持 不支持

停止训练标准

1. 固定轮次(Fixed Epochs)

最简单的停止标准,预先设定训练轮数。

优点:

  • 实现简单
  • 可预测训练时间
  • 适合对收敛性有经验的情况

缺点:

  • 可能过早停止(欠训练)
  • 可能过晚停止(过训练)
  • 需要经验调整

2. 损失收敛(Loss Convergence)

监控损失函数的变化,当变化小于阈值时停止。

判断标准:

J(θ(t))J(θ(t1))J(θ(t1))<ϵ\frac{|J(\theta^{(t)}) - J(\theta^{(t-1)})|}{|J(\theta^{(t-1)})|} < \epsilon

其中 ϵ\epsilon 通常取 10410^{-4}10610^{-6}

3. 梯度范数(Gradient Norm)

当梯度足够小时停止,说明接近最优解。

判断标准:

J(θ(t))2<ϵ\|\nabla J(\theta^{(t)})\|_2 < \epsilon

其中 ϵ\epsilon 通常取 10410^{-4}10610^{-6}

数学意义:

  • 梯度为0是局部最优的必要条件
  • 小梯度意味着参数更新很小

4. 早停(Early Stopping)

使用验证集监控泛化性能,防止过拟合。

实现步骤:

  1. 将数据分为训练集和验证集
  2. 每轮训练后评估验证集性能
  3. 当验证集性能不再提升时停止

5.数值稳定性

数据集类型

在机器学习中,为了有效训练和评估模型,通常将数据划分为三种类型的数据集:

1. 训练数据集(Training Dataset)

定义: 用于模型训练和参数学习的数据子集。

主要作用:

  • 通过最小化损失函数来学习模型参数
  • 确定权重系数 ww 和偏置项 bb
  • 让模型学习输入特征与目标变量之间的关系

特点:

  • 通常占总数据的60-80%
  • 数据量越大,模型学习效果通常越好
  • 需要具有代表性,能够覆盖数据的各种情况

2. 验证数据集(Validation Dataset)

定义: 用于模型选择和超参数调优的数据子集。

主要作用:

  • 评估不同模型架构的性能
  • 调整学习率、正则化参数等超参数
  • 实现早停(Early Stopping)防止过拟合
  • 比较不同特征工程方法的效果

特点:

  • 通常占总数据的10-20%
  • 不参与模型参数的直接学习
  • 用于指导训练过程的决策

3. 测试数据集(Testing Dataset)

定义: 用于最终评估模型泛化能力的数据子集。

主要作用:

  • 评估模型在未见数据上的表现
  • 提供模型性能的无偏估计
  • 比较不同算法的最终效果
  • 作为模型部署前的最终检验

特点:

  • 通常占总数据的10-20%
  • 在整个训练过程中完全不可见
  • 只能使用一次,避免数据泄露

数据集划分的重要性

数据集类型 用途 参与训练 使用时机
训练集 参数学习 训练过程中
验证集 模型选择 训练过程中
测试集 性能评估 训练完成后

划分原则

  1. 随机性:确保每个子集都能代表整体数据分布
  2. 独立性:三个数据集之间没有重叠
  3. 代表性:每个数据集的统计特性与整体数据相似
  4. 足够性:每个数据集都有足够的数据量支持其功能

实际应用考虑

  • 数据量充足时:可采用70-15-15的比例划分
  • 数据量较少时:可采用交叉验证方法
  • 时间序列数据:需要按时间顺序划分,避免未来信息泄露
  • 类别不平衡:需要保持每个数据集中各类别的比例一致

重要超参数

基本概念

超参数(Hyperparameters) 是在模型训练开始前设置的参数,它们不是通过训练学习得到的,而是需要人工设定或通过搜索算法确定。

核心超参数

1. 学习率(Learning Rate)α\alpha

定义: 控制参数更新步长的超参数。

作用:

  • 决定每次参数更新的幅度
  • 影响收敛速度和稳定性

选择策略:

  • 太大:可能导致震荡或发散
  • 太小:收敛速度过慢
  • 常用范围10110^{-1}10610^{-6}

调整方法:

  • 学习率衰减(Learning Rate Decay)
  • 自适应学习率算法(Adam, RMSprop)

2. 批量大小(Batch Size)

定义: 每次迭代中用于计算梯度的样本数量。

类型对比:

类型 批量大小 特点 适用场景
批量梯度下降 mm(全部样本) 稳定但慢 小数据集
随机梯度下降 11 快但波动大 在线学习
小批量梯度下降 3251232-512 平衡稳定性和速度 大多数情况

选择原则:

  • 大数据集:较大的批量大小(128-512)
  • 小数据集:较小的批量大小(16-64)
  • GPU内存限制:根据硬件调整

3. 迭代次数(Iterations)

定义: 完成一次参数更新的过程。

计算关系:

迭代次数=总样本数批量大小\text{迭代次数} = \frac{\text{总样本数}}{\text{批量大小}}

示例:

  • 1000个样本,批量大小=100 → 10次迭代完成1个epoch

4. 训练轮次(Epochs)

定义: 整个训练数据集被完整使用一次的周期。

计算关系:

总迭代次数=Epochs×总样本数批量大小\text{总迭代次数} = \text{Epochs} \times \frac{\text{总样本数}}{\text{批量大小}}

选择策略:

  • 简单问题:几十到几百个epochs
  • 复杂问题:几百到几千个epochs
  • 早停机制:根据验证集性能动态确定

超参数关系总结

超参数 符号 作用 典型值
学习率 α\alpha 控制更新步长 10310^{-3}
批量大小 BB 每次更新样本数 32-256
训练轮次 EE 完整训练周期数 100-1000
迭代次数 II 参数更新次数 自动计算

超参数调优方法

  • 在预设的超参数网格中搜索最优组合
  • 全面但计算成本高
  • 在超参数空间中随机采样
  • 效率通常高于网格搜索

3. 贝叶斯优化(Bayesian Optimization)

  • 基于历史评估结果智能选择下一组超参数
  • 适合计算成本高的场景

实际调优建议

  1. 先粗调后精调:先在大范围搜索,再在小范围优化
  2. 监控验证集性能:避免在训练集上过拟合
  3. 考虑计算资源:平衡调优效果和时间成本
  4. 记录实验:保存每次实验的超参数和结果

超参数对训练的影响

超参数 对收敛速度的影响 对稳定性的影响 对泛化能力的影响
学习率 直接影响 高学习率不稳定 影响优化轨迹
批量大小 间接影响 大批量更稳定 影响泛化差距
训练轮次 直接影响 过多导致过拟合 关键影响因素

代码

参考课程代码