从房价预测理解线性回归
现实场景
假设我们想要预测一套房子的价格,我们知道房价通常与房屋面积密切相关。一般来说:
- 面积越大的房子,价格越高
- 面积越小的房子,价格越低
数据观察
我们收集了一些历史数据:
| 房屋面积(㎡) |
价格(万元) |
| 60 |
120 |
| 80 |
160 |
| 100 |
200 |
| 120 |
240 |
| 140 |
280 |
建立线性关系
从数据中我们可以发现一个规律:
价格=2×面积
这就是一个最简单的线性回归模型:
y=wx+b
其中:
- y:要预测的目标变量(房价)
- x:特征变量(房屋面积)
- w:权重系数(每平米价格)
- b:偏置项(基础价格)
扩展到多特征
现实中,房价不仅取决于面积,还受其他因素影响:
- 卧室数量
- 地理位置
- 房龄
- 周边设施
- 是不是有两个卫生间~
这时就需要多元线性回归:
y=w1x1+w2x2+...+wnxn+b∗
一般用向量形式写成
f(x)=wT+b
核心思想
线性回归的目标就是找到最佳的 w 和 b,使得预测值与真实值之间的误差最小。
Need:
线性模型形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想.许多功能更为强大的非线性模型(nonlinearmodel)可在线性模型的基础上通过引入层级结构或高维映射而得.此外,由于
直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性.
非线性回归
相比于线性回归会有交叉影响项,例如 y=w1x2+w2sin(x)+b
适合:
- 特征与目标呈复杂曲线关系
- 预测精度要求高
- 数据量充足
- 可以接受"黑箱"模型
训练数据
定义:收集到的用于确认参数(weights&bias)的历史数据
损失函数(评价手段)
为什么需要损失函数?
线性回归的目标是找到最佳的参数 w 和 b,但我们需要一个量化标准来衡量模型的好坏。损失函数就是这个评价标准。
平方误差(Square Error)
对于单个样本 (xi,yi),平方误差定义为:
SE=(f(xi)−yi)2=(y^i−yi)2
其中:
- y^i 是模型预测值
- yi 是真实值
平方误差的问题
虽然平方误差直观易懂,但它存在几个问题:
- 量纲依赖:误差的单位是原单位的平方
- 样本数量影响:样本越多,总误差越大,难以比较不同数据集
- 对异常值敏感:由于平方操作,大误差会被放大
均方误差(MSE)的出现
为了解决这些问题,我们引入均方误差(Mean Square Error):
MSE=m1i=1∑m(f(xi)−yi)2
其中 m 是样本数量。
MSE的优势:
- 消除了样本数量的影响
- 保持了误差的单调性
- 数学性质良好(可微、凸函数)
损失函数的数学表达
对于线性回归模型 f(x)=wTx+b,损失函数为:
J(w,b)=2m1i=1∑m(f(xi)−yi)2
这里引入 21 是为了求导时消去系数2,简化计算。
损失函数的几何意义
在二维空间中,MSE可以理解为:
- 每个数据点到回归直线的垂直距离的平方和
- 我们的目标就是找到使这个距离平方和最小的直线
优化目标
线性回归的训练过程就是求解:
w,bminJ(w,b)=w,bmin2m1i=1∑m(wTxi+b−yi)2
其他损失函数
虽然MSE最常用,但还有其他选择:
| 损失函数 |
公式 |
特点 |
| 平均绝对误差(MAE) |
m1∑∥f(xi)−yi∥ |
对异常值不敏感 |
| Huber损失 |
分段函数 |
MSE和MAE的折中 |
| Log-Cosh损失 |
∑log(cosh(f(xi)−yi)) |
平滑版本MAE |
参数求解方法
单变量线性回归求解
对于模型 y=wx+b,损失函数为:
E(w,b)=i=1∑m(yi−wxi−b)2
对 b 求偏导
∂b∂E=i=1∑m2(yi−wxi−b)(−1)=−2i=1∑m(yi−wxi−b)
令导数为零:
i=1∑m(yi−wxi−b)=0
i=1∑myi−wi=1∑mxi−mb=0
b=m1i=1∑myi−wm1i=1∑mxi=yˉ−wxˉ
对 w 求偏导
∂w∂E=i=1∑m2(yi−wxi−b)(−xi)=−2i=1∑mxi(yi−wxi−b)
令导数为零,并代入 b=yˉ−wxˉ:
i=1∑mxi(yi−wxi−(yˉ−wxˉ))=0
i=1∑mxi(yi−yˉ)−wi=1∑mxi(xi−xˉ)=0
解得:
w=∑i=1mxi(xi−xˉ)∑i=1mxi(yi−yˉ)=∑i=1m(xi−xˉ)2∑i=1m(xi−xˉ)(yi−yˉ)
多元线性回归求解
对于多元线性回归 f(x)=wTx+b,我们将其改写为:
f(x)=w^Tx^
其中:
- w^=(w;b)
- x^=(x;1)
矩阵形式损失函数
E(w^)=(y−Xw^)T(y−Xw^)
其中:
- X 是 m×(d+1) 的设计矩阵
- y 是 m×1 的目标向量
对 w^ 求导
∂w^∂E=2XT(Xw^−y)
令导数为零:
XTXw^=XTy
最优解
当 XTX 为满秩矩阵时:
w^∗=(XTX)−1XTy
最终学得的多元线性回归模型为:
f(x)=xT(XTX)−1XTy
凸函数性质
损失函数 E(w^) 是关于 w^ 的凸函数,因为:
- 二阶导数矩阵 XTX 是半正定的
- 对于凸函数,局部最小值就是全局最小值
实际应用考虑
- 满秩条件:当特征数多于样本数时,XTX 可能不满秩
- 数值稳定性:矩阵求逆可能数值不稳定
- 正则化:可通过添加正则项解决上述问题
梯度下降求解
为什么需要梯度下降?
虽然最小二乘法有解析解,但在以下情况下梯度下降更适用:
- 数据量很大,矩阵求逆计算成本高
- 特征维度很高
- 在线学习场景(数据逐步到达)
- 非凸优化问题(虽然线性回归是凸的)
梯度下降基本思想
梯度下降是一种迭代优化算法,通过不断沿着梯度反方向更新参数,逐步逼近最优解。
核心公式:
θ=θ−α⋅∇J(θ)
其中:
- θ:参数向量 (w,b)
- α:学习率(步长)
- ∇J(θ):损失函数的梯度
单变量线性回归的梯度下降
梯度计算
对于损失函数 J(w,b)=2m1∑i=1m(wxi+b−yi)2:
∂w∂J=m1i=1∑mxi(wxi+b−yi)
∂b∂J=m1i=1∑m(wxi+b−yi)
参数更新
w:=w−α⋅∂w∂J
b:=b−α⋅∂b∂J
多元线性回归的梯度下降
梯度计算
对于损失函数 J(w)=2m1∑i=1m(wTxi−yi)2:
∇J(w)=m1XT(Xw−y)
参数更新
w:=w−α⋅∇J(w)
梯度下降的变种
1. 批量梯度下降(Batch Gradient Descent)
- 使用全部训练数据计算梯度
- 每次迭代稳定但计算量大
- 适合数据量不大的情况
2. 随机梯度下降(Stochastic Gradient Descent)
- 每次使用单个样本计算梯度
- 更新频繁,收敛快但波动大
- 适合在线学习和大数据
3. 小批量梯度下降(Mini-batch Gradient Descent)
- 每次使用一小批样本计算梯度
- 平衡了计算效率和收敛稳定性
- 实际应用中最常用
学习率选择
学习率 α 的选择至关重要:
| 学习率 |
效果 |
问题 |
| 太小 |
收敛慢 |
训练时间长 |
| 合适 |
稳定收敛 |
- |
| 太大 |
可能发散 |
无法收敛 |
收敛判断
- 损失函数变化:∣J(θ(t))−J(θ(t−1))∣<ϵ
- 参数变化:∥θ(t)−θ(t−1)∥<ϵ
- 梯度范数:∥∇J(θ(t))∥<ϵ
梯度下降 vs 最小二乘法
| 特性 |
梯度下降 |
最小二乘法 |
| 计算复杂度 |
O(k⋅m⋅n) |
O(n3) |
| 内存需求 |
O(m⋅n) |
O(n2) |
| 适用规模 |
大规模数据 |
小规模数据 |
| 收敛性 |
迭代收敛 |
一步到位 |
| 在线学习 |
支持 |
不支持 |
停止训练标准
1. 固定轮次(Fixed Epochs)
最简单的停止标准,预先设定训练轮数。
优点:
- 实现简单
- 可预测训练时间
- 适合对收敛性有经验的情况
缺点:
- 可能过早停止(欠训练)
- 可能过晚停止(过训练)
- 需要经验调整
2. 损失收敛(Loss Convergence)
监控损失函数的变化,当变化小于阈值时停止。
判断标准:
∣J(θ(t−1))∣∣J(θ(t))−J(θ(t−1))∣<ϵ
其中 ϵ 通常取 10−4 到 10−6。
3. 梯度范数(Gradient Norm)
当梯度足够小时停止,说明接近最优解。
判断标准:
∥∇J(θ(t))∥2<ϵ
其中 ϵ 通常取 10−4 到 10−6。
数学意义:
- 梯度为0是局部最优的必要条件
- 小梯度意味着参数更新很小
4. 早停(Early Stopping)
使用验证集监控泛化性能,防止过拟合。
实现步骤:
- 将数据分为训练集和验证集
- 每轮训练后评估验证集性能
- 当验证集性能不再提升时停止
5.数值稳定性
数据集类型
在机器学习中,为了有效训练和评估模型,通常将数据划分为三种类型的数据集:
1. 训练数据集(Training Dataset)
定义: 用于模型训练和参数学习的数据子集。
主要作用:
- 通过最小化损失函数来学习模型参数
- 确定权重系数 w 和偏置项 b
- 让模型学习输入特征与目标变量之间的关系
特点:
- 通常占总数据的60-80%
- 数据量越大,模型学习效果通常越好
- 需要具有代表性,能够覆盖数据的各种情况
2. 验证数据集(Validation Dataset)
定义: 用于模型选择和超参数调优的数据子集。
主要作用:
- 评估不同模型架构的性能
- 调整学习率、正则化参数等超参数
- 实现早停(Early Stopping)防止过拟合
- 比较不同特征工程方法的效果
特点:
- 通常占总数据的10-20%
- 不参与模型参数的直接学习
- 用于指导训练过程的决策
3. 测试数据集(Testing Dataset)
定义: 用于最终评估模型泛化能力的数据子集。
主要作用:
- 评估模型在未见数据上的表现
- 提供模型性能的无偏估计
- 比较不同算法的最终效果
- 作为模型部署前的最终检验
特点:
- 通常占总数据的10-20%
- 在整个训练过程中完全不可见
- 只能使用一次,避免数据泄露
数据集划分的重要性
| 数据集类型 |
用途 |
参与训练 |
使用时机 |
| 训练集 |
参数学习 |
是 |
训练过程中 |
| 验证集 |
模型选择 |
否 |
训练过程中 |
| 测试集 |
性能评估 |
否 |
训练完成后 |
划分原则
- 随机性:确保每个子集都能代表整体数据分布
- 独立性:三个数据集之间没有重叠
- 代表性:每个数据集的统计特性与整体数据相似
- 足够性:每个数据集都有足够的数据量支持其功能
实际应用考虑
- 数据量充足时:可采用70-15-15的比例划分
- 数据量较少时:可采用交叉验证方法
- 时间序列数据:需要按时间顺序划分,避免未来信息泄露
- 类别不平衡:需要保持每个数据集中各类别的比例一致
重要超参数
基本概念
超参数(Hyperparameters) 是在模型训练开始前设置的参数,它们不是通过训练学习得到的,而是需要人工设定或通过搜索算法确定。
核心超参数
1. 学习率(Learning Rate)α
定义: 控制参数更新步长的超参数。
作用:
选择策略:
- 太大:可能导致震荡或发散
- 太小:收敛速度过慢
- 常用范围:10−1 到 10−6
调整方法:
- 学习率衰减(Learning Rate Decay)
- 自适应学习率算法(Adam, RMSprop)
2. 批量大小(Batch Size)
定义: 每次迭代中用于计算梯度的样本数量。
类型对比:
| 类型 |
批量大小 |
特点 |
适用场景 |
| 批量梯度下降 |
m(全部样本) |
稳定但慢 |
小数据集 |
| 随机梯度下降 |
1 |
快但波动大 |
在线学习 |
| 小批量梯度下降 |
32−512 |
平衡稳定性和速度 |
大多数情况 |
选择原则:
- 大数据集:较大的批量大小(128-512)
- 小数据集:较小的批量大小(16-64)
- GPU内存限制:根据硬件调整
3. 迭代次数(Iterations)
定义: 完成一次参数更新的过程。
计算关系:
迭代次数=批量大小总样本数
示例:
- 1000个样本,批量大小=100 → 10次迭代完成1个epoch
4. 训练轮次(Epochs)
定义: 整个训练数据集被完整使用一次的周期。
计算关系:
总迭代次数=Epochs×批量大小总样本数
选择策略:
- 简单问题:几十到几百个epochs
- 复杂问题:几百到几千个epochs
- 早停机制:根据验证集性能动态确定
超参数关系总结
| 超参数 |
符号 |
作用 |
典型值 |
| 学习率 |
α |
控制更新步长 |
10−3 |
| 批量大小 |
B |
每次更新样本数 |
32-256 |
| 训练轮次 |
E |
完整训练周期数 |
100-1000 |
| 迭代次数 |
I |
参数更新次数 |
自动计算 |
超参数调优方法
1. 网格搜索(Grid Search)
- 在预设的超参数网格中搜索最优组合
- 全面但计算成本高
2. 随机搜索(Random Search)
3. 贝叶斯优化(Bayesian Optimization)
- 基于历史评估结果智能选择下一组超参数
- 适合计算成本高的场景
实际调优建议
- 先粗调后精调:先在大范围搜索,再在小范围优化
- 监控验证集性能:避免在训练集上过拟合
- 考虑计算资源:平衡调优效果和时间成本
- 记录实验:保存每次实验的超参数和结果
超参数对训练的影响
| 超参数 |
对收敛速度的影响 |
对稳定性的影响 |
对泛化能力的影响 |
| 学习率 |
直接影响 |
高学习率不稳定 |
影响优化轨迹 |
| 批量大小 |
间接影响 |
大批量更稳定 |
影响泛化差距 |
| 训练轮次 |
直接影响 |
过多导致过拟合 |
关键影响因素 |
代码
参考课程代码