1. 线性回归:机器学习世界的"Hello World"
线性回归之于机器学习,就像"Hello World"之于编程语言学习。作为统计学习和机器学习的基石算法,它用最简单的数学形式揭示了预测模型的本质。我在工业界十多年的数据科学实践中发现,90%的预测问题都可以先用线性回归建立baseline,这比直接上复杂模型更能帮助理解数据特性。
1.1 算法本质与核心假设
线性回归的核心假设是目标变量y与特征x之间存在线性关系,这种关系可以表示为:
y = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
其中w是权重向量,b是偏置项。这个看似简单的公式却蕴含着机器学习最基础的思想——通过线性组合特征来预测目标值。在实际项目中,我经常用这个公式向业务部门解释模型的工作原理,因为它比神经网络的黑箱更容易被理解。
注意:虽然叫"线性"回归,但它可以通过特征工程处理非线性关系。比如对房价预测,我们可以在特征中加入房屋面积的平方项,这样模型就能拟合二次曲线关系。
1.2 损失函数:模型优化的指南针
均方误差(MSE)是线性回归最常用的损失函数:
L(w,b) = 1/(2n) * Σ(yᵢ - ŷᵢ)²
这个公式中的1/2是为了后续求导方便而添加的常数项。在我的实践中,MSE对异常值比较敏感,当数据中存在极端值时,可以考虑使用平均绝对误差(MAE)或者Huber损失。
损失函数的选择直接影响模型表现。我曾在一个销售预测项目中对比过不同损失函数:
- MSE:对异常值敏感但收敛快
- MAE:对异常值鲁棒但收敛慢
- Huber损失:综合两者优点,但需要调整δ参数
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 两种求解路径:解析解与迭代法
2.1 解析解:数学之美
正规方程给出了线性回归的闭式解:
w = (XᵀX)⁻¹Xᵀy
这个解在数学上非常优雅,但实际应用中存在三个主要限制:
- 计算复杂度高(O(n³)),当特征维度超过10000时就难以承受
- 需要矩阵可逆,当特征间存在高度相关性时会出问题
- 不适合在线学习场景
我在教学过程中发现,理解正规方程的推导对掌握线性代数在机器学习中的应用非常有帮助。建议读者手动推导一次,能加深对矩阵运算的理解。
2.2 梯度下降:实践中的主力军
梯度下降的更新规则非常简单:
w := w - α(∂L/∂w)
其中α是学习率,这是最重要的超参数之一。选择学习率时,我的经验法则是:
- 从0.01开始尝试
- 观察损失曲线:震荡过大则减小α,下降过慢则增大α
- 可以考虑学习率衰减策略
在实际编码实现时,有几点需要特别注意:
- 特征缩放:不同特征尺度差异大时,应先进行标准化
- 梯度检查:在复杂模型中可以用数值梯度验证解析梯度
- 早停机制:验证集误差开始上升时停止训练
3. PyTorch实现:从零开始与高级API
3.1 从零实现:理解底层原理
下面是我在教学中使用的从零实现代码的关键点解析:
python复制class LinearRegressionScratch:
def __init__(self, num_inputs, lr=0.03):
# 初始化权重:使用正态分布,避免全零初始化
self.w = torch.normal(0, 0.01, size=(num_inputs, 1), requires_grad=True)
