机器学习基础二:线性回归与逻辑回归原理与实现
机器学习基础二:线性回归与逻辑回归原理与实现
13.1 本章导学:为什么从线性模型入门
线性模型是机器学习体系中最基础、最经典的一类算法,也是所有学习者深入机器学习的第一站。很多初学者觉得线性模型过于简单,远不如大模型、深度学习有吸引力,因而跳过基础直接学复杂算法,这是非常典型的学习误区。 线性模型的价值,远不止于完成简单的预测任务。它承载了机器学习几乎所有核心思想:参数化建模、损失函数设计、优化求解、正则化抑制过拟合、评估指标体系。后续所有复杂算法,包括决策树、深度学习、大模型,本质都是在线性模型的框架上扩展演化而来。比如大模型中每一个全连接层,本质就是多元线性变换;分类任务通用的交叉熵损失,最早就成型于逻辑回归。 本章内容打破传统教材 “只讲公式推导” 的单一模式,从数学原理、优化求解、正则化理论、代码实现、工程调参、业务落地、大模型关联七个维度展开,兼顾理论深度与实践价值。学完本章你不仅能掌握两类经典线性模型,更能建立 “模型 - 损失 - 优化 - 正则 - 评估” 的完整机器学习方法论,为后续所有算法学习打下统一的认知框架。
13.2 线性回归:原理与数学推导
13.2.1 模型定义与几何意义
线性回归的核心假设是:输入特征与输出结果之间存在线性相关关系。模型通过学习特征的权重,拟合出一条最优直线(二维)、一个超平面(高维),尽可能贴近所有样本点。 单变量线性回归的表达式非常简洁:
\(y = w x + b\) 其中w是权重,决定直线的斜率;b是偏置,决定直线的截距。 推广到多元场景,样本有n个特征,写成向量形式:
\(\hat{y} = \boldsymbol{w}^T \boldsymbol{x} + b\) \(\boldsymbol{w}\)是权重向量,每个特征对应一个权重,代表该特征对结果的影响程度;\(\hat{y}\)是模型的预测值。 从几何视角看,线性回归就是在高维特征空间中,寻找一个超平面,让所有样本点到这个超平面的距离总和最小。从业务视角看,权重的正负和大小,直接反映了特征对结果的影响方向和影响程度,这也是线性模型可解释性强的根源。
13.2.2 损失函数:均方误差的由来
要找到最优的权重,首先需要定义 “好坏” 的标准,也就是损失函数。线性回归最经典的损失函数是均方误差(MSE),即预测值与真实值差值的平方的平均值:
\(\mathcal{L} = \frac{1}{N}\sum_{i=1}^N (\hat{y}_i - y_i)^2\) 很多教材直接给出这个公式,却不解释为什么用平方而不用绝对值。我们可以从两个视角理解: 第一,几何视角。平方误差对应欧氏距离,衡量样本点到拟合直线的垂直距离,几何意义直观,且平方函数处处可导,非常适合梯度优化。 第二,概率视角。假设数据的噪声服从高斯分布,通过极大似然估计推导,可以严格证明:最小化均方误差,等价于最大化观测数据出现的概率。这不是人为规定的经验公式,而是有坚实的统计学理论支撑。
13.2.3 优化方法一:最小二乘法(解析解)
线性回归是极少数拥有解析解的机器学习模型。令损失函数对权重的导数等于零,可以直接推导出最优权重的闭式解,这个方法就是最小二乘法。 写成矩阵形式的解析解:
\(\boldsymbol{w}^* = (\boldsymbol{X}^T\boldsymbol{X})^{-1}\boldsymbol{X}^T\boldsymbol{y}\) 最小二乘法的优势是一步到位,不需要迭代,直接算出最优解,在小数据集上效率极高。但它也有明显的局限:一是当特征维度很高时,矩阵求逆计算量极大,甚至无法求解;二是如果特征之间存在共线性,矩阵不可逆,解析解不存在;三是无法适配海量数据的分布式训练。 因此在工业界大规模数据场景下,更常用的是梯度下降法。
13.2.4 优化方法二:梯度下降法(数值解)
梯度下降是通用的优化算法,也是深度学习、大模型训练的核心优化方法。对于线性回归,它的逻辑非常直观:
- 随机初始化权重和偏置;
- 计算损失函数对每个参数的梯度;
- 沿着负梯度方向更新参数,步长由学习率控制;
- 重复迭代,直到损失收敛。 梯度下降的优势是通用性强,无论模型多复杂,只要能求导就能用;支持分批迭代,适配海量数据和分布式训练。缺点是需要调学习率,需要多轮迭代,只能找到局部最优解。不过对于线性回归的凸损失函数,局部最优就是全局最优,梯度下降可以稳定收敛到最优解。
13.2.5 多项式回归:线性模型的非线性扩展
线性模型只能拟合线性关系,但现实中很多数据是非线性的。这时候不需要换模型,只需要对特征做多项式变换,构造平方项、交叉项等新特征,再用线性回归训练,这就是多项式回归。 比如二阶多项式回归,模型形式为:
\(\hat{y} = w_1 x + w_2 x^2 + b\) 本质上依然是线性回归,只是特征空间从原始特征变成了多项式特征。它既保留了线性模型简单易解释的优点,又能拟合一定的非线性关系,是工业界处理非线性小样本问题的常用方案。 但多项式阶数不能太高,否则模型会变得极其复杂,很容易过拟合。高阶多项式在训练集上拟合完美,在测试集上误差极大,这也是所有机器学习模型的通用规律。
13.3 线性回归的正则化:解决过拟合
13.3.1 过拟合的根源与正则化思想
当模型复杂度超过数据真实规律时,模型会把训练数据中的噪声也当成规律学习进去,导致训练集误差很低,但测试集误差很高,这就是过拟合。线性模型中,特征越多、多项式阶数越高,权重绝对值越大,过拟合风险就越高。 正则化是解决过拟合的核心手段,核心思想是:在损失函数中加入对参数的惩罚项,限制权重的大小,避免权重过度拟合噪声。正则化不是牺牲训练精度来换取泛化能力,而是通过约束模型复杂度,让模型学到更本质的规律。
13.3.2 Ridge 回归(L2 正则)
Ridge 回归也叫岭回归,是在线性回归的损失函数中加入 L2 正则项,也就是权重平方和的惩罚:
\(\mathcal{L} = MSE + \lambda \sum w_i^2\) \(\lambda\)是正则化系数,越大代表惩罚越强,模型越保守。 L2 正则的特点是让所有权重都趋近于 0,但不会等于 0,它倾向于让所有特征都发挥一点作用,得到平滑稳定的解。L2 正则从贝叶斯视角等价于给权重施加高斯先验,是最经典、最常用的正则化方式。
13.3.3 Lasso 回归(L1 正则)
Lasso 回归加入的是 L1 正则项,即权重绝对值之和:
\(\mathcal{L} = MSE + \lambda \sum |w_i|\) L1 正则最显著的特点是会让很多权重变为 0,天然具备特征选择的能力。它会自动筛选出重要的特征,把不重要的特征权重直接压为 0,得到稀疏的解。 在特征数量很多、需要做特征筛选的场景下,Lasso 非常实用。它的贝叶斯对应是拉普拉斯先验。
13.3.4 弹性网:L1+L2 融合
L1 和 L2 各有优劣,弹性网把二者结合起来,同时加入两种正则项,用比例参数调节二者权重。它既保留了 L1 的特征选择能力,又继承了 L2 的稳定性,解决了 L1 在特征高度相关时选择不稳定的问题。 在真实业务场景中,如果特征数量多、存在相关性,优先考虑弹性网;如果追求简单稳定,选 Ridge;如果需要特征筛选,选 Lasso。
13.4 线性回归的评估指标
模型训练完成后,需要量化评估效果,回归任务有三类核心指标: 第一类是误差类指标。均方误差 MSE,量纲是原量纲的平方,数值越大代表误差越大;均方根误差 RMSE,是 MSE 开平方,量纲和原数据一致,更直观;平均绝对误差 MAE,对异常值更鲁棒。 第二类是拟合优度指标,最核心的是决定系数\(R^2\)。它衡量模型解释了多少数据的波动,取值范围 0 到 1,越接近 1 代表模型拟合效果越好。\(R^2\)的优势是无量纲,可以在不同数据集之间对比模型效果,是回归任务的黄金指标。 第三类是相对误差指标,比如平均绝对百分比误差 MAPD,用百分比表示误差,适合业务层面解读,直观反映预测的相对偏差。
13.5 逻辑回归:分类任务的线性模型
13.5.1 为什么不用线性回归做分类
分类任务输出的是离散类别,最直接的想法是用线性回归输出数值,设定阈值划分类别。但这种方法有致命缺陷:一是线性回归的输出是无界的,和概率的 0 到 1 范围不匹配;二是样本分布偏移时,阈值会非常不稳定;三是误差假设不符合分类任务的分布。 因此分类任务需要专门的线性模型,这就是逻辑回归。它本质上是用线性回归的输出去拟合事件发生的对数几率,再通过 Sigmoid 函数映射到 0 到 1 之间,得到样本属于正类的概率。
13.5.2 Sigmoid 函数与对数几率
Sigmoid 函数是逻辑回归的核心组件,它把任意实数映射到 0 到 1 之间,形状是光滑的 S 型曲线:
\(\sigma(z) = \frac{1}{1+e^{-z}}\) 其中\(z = \boldsymbol{w}^T\boldsymbol{x}+b\)就是线性回归的输出。 从概率视角看,逻辑回归拟合的是正例的概率\(P(y=1|x)\)。从对数几率视角看,它拟合的是事件发生的对数几率与特征的线性关系。对数几率就是发生概率与不发生概率比值的对数,这个视角解释了为什么逻辑回归本质是广义线性模型。
13.5.3 损失函数:交叉熵与极大似然
逻辑回归不能用均方误差作为损失函数,因为 Sigmoid 加 MSE 会导致非凸损失,容易陷入局部最优,且深层网络梯度消失。 标准的损失函数是二元交叉熵:
\(\mathcal{L} = -\frac{1}{N}\sum_{i=1}^N \left[ y_i \log \hat{y}_i + (1-y_i)\log(1-\hat{y}_i) \right]\) 这个公式不是凭空设计的,从极大似然估计可以严格推导出来:最大化观测样本出现的概率,等价于最小化交叉熵损失。 交叉熵是深度学习、大模型分类任务的通用损失函数,逻辑回归就是最简单的交叉熵应用场景。理解了逻辑回归的损失,就能无缝理解大模型的预训练损失。
13.5.4 梯度下降优化逻辑回归
逻辑回归没有解析解,标准求解方法是梯度下降。交叉熵损失搭配 Sigmoid 函数,梯度形式非常简洁,训练收敛稳定。 工业界实现逻辑回归时,通常还会加入 L2 正则,防止过拟合。正则化系数是逻辑回归最重要的超参数,直接决定模型的泛化能力。
13.5.5 多分类逻辑回归
二分类逻辑回归可以很自然地扩展到多分类,使用 Softmax 函数替代 Sigmoid,损失函数变为多分类交叉熵。这种模型也叫 Softmax 回归。 多分类逻辑回归是大模型输出层的标准结构:模型最后一层输出每个类别的 logits,经过 Softmax 转换为概率分布,用交叉熵计算损失。可以说,大模型的分类头,本质就是一个多分类逻辑回归。
13.6 代码实战:从零实现与工具库调用
13.6.1 NumPy 手写线性回归
只依赖 NumPy,可以用不到 30 行代码实现完整的线性回归,包括前向计算、损失计算、梯度更新。核心逻辑就是矩阵乘法计算预测值,MSE 计算损失,梯度下降更新权重。手写实现的价值在于彻底理解模型的每一步运算,而不是只会调用黑盒接口。
13.6.2 NumPy 手写逻辑回归
逻辑回归的手写实现比线性回归只多一步 Sigmoid 变换,损失函数换成交叉熵,梯度推导略有不同,但整体框架完全一致。掌握了线性回归的手写,逻辑回归只需要修改损失和激活函数即可。
13.6.3 Scikit-learn 工业级调用
真实项目中不需要重复造轮子,Scikit-learn 提供了工业级的线性模型实现。线性回归、Ridge、Lasso、逻辑回归都有对应的封装好的类,只需要几行代码就能完成训练和预测,同时内置了正则化、归一化、多分类等完整功能。 工业界使用线性模型的标准流程是:先做特征工程,再用线性模型做基线,快速得到基准效果,再考虑更复杂的模型。
13.7 线性模型的工程调参与落地
13.7.1 特征工程对线性模型的影响
线性模型对特征的质量非常敏感。特征处理得当,线性模型的效果可以逼近复杂模型;特征不好,再复杂的模型也没用。 针对线性模型的特征处理要点包括:数值特征归一化,避免量纲差异导致权重不可比;类别特征做独热编码或目标编码;构造交叉特征、多项式特征,引入非线性;异常值处理,线性模型对异常值非常敏感。
13.7.2 共线性问题与排查方法
多重共线性是线性模型的常见问题:特征之间高度相关,会导致权重不稳定、符号反常、解释性下降。排查方法有两种:一是计算相关系数矩阵,查看高相关的特征对;二是计算方差膨胀因子 VIF,VIF 大于 10 就说明存在严重共线性。 解决共线性的方案包括:删除冗余特征、用 PCA 降维、使用 Ridge 回归。其中 Ridge 回归是最简单有效的方案,L2 正则天然能够缓解共线性问题。
13.7.3 阈值选择与类别不均衡处理
逻辑回归输出的是概率,默认 0.5 作为分类阈值。但在类别不均衡场景下,默认阈值效果很差。可以根据业务需求,通过调整阈值来权衡精确率和召回率。比如风控场景宁愿误判也不能漏判,就调低阈值;推荐场景要保证准确率,就调高阈值。 严重不均衡的场景,还可以通过样本加权、过采样欠采样等方式处理,再配合阈值调整,达到业务最优效果。
13.8 线性模型与大模型的关联
很多人觉得线性模型和大模型是两个时代的技术,实际上二者底层逻辑高度贯通。 第一,大模型的全连接层、注意力输出投影,本质都是线性变换。整个 Transformer 可以看作是无数个线性变换加非线性激活的堆叠。 第二,大模型的分类任务、预训练任务,使用的交叉熵损失和逻辑回归完全同源,都是极大似然估计的产物。 第三,线性模型的正则化思想,在大模型中演化为权重衰减、Dropout 等技术,核心逻辑都是约束模型复杂度,提升泛化能力。 第四,线性模型的可解释性方法,比如权重分析、特征重要性,也可以迁移到大模型的可解释性研究中。 从这个角度看,大模型不是对线性模型的颠覆,而是线性模型在深度、规模上的极致扩展。
13.9 本章小结
本章从七个维度系统讲解了线性回归与逻辑回归,搭建起完整的线性模型知识体系。核心知识点回顾:
- 线性回归拟合线性关系,均方误差为损失,有最小二乘和梯度下降两种求解方式;
- 正则化是解决过拟合的核心手段,L1、L2、弹性网各有特点,适配不同场景;
- 逻辑回归是分类线性模型,基于 Sigmoid 和交叉熵,是分类任务的基准方案;
- 线性模型高度依赖特征工程,共线性、阈值选择是工程落地的核心问题;
- 线性模型承载了机器学习的核心方法论,与大模型底层逻辑高度贯通。
课后实践任务:用 NumPy 手写二元逻辑回归,在公开数据集上训练,对比和 sklearn 的结果差异;尝试调整正则化系数,观察权重和模型效果的变化;绘制不同阈值下的精确率召回率曲线。
更多推荐
所有评论(0)