机器学习线性模型总复习:从最小二乘到LDA的实战指南
发布时间:2026/10/14 16:59:59 锦皓数字建站

1. 从“找一条直线”说起线性模型到底在解决什么问题很多人第一次翻开《机器学习》这本书翻到第3章线性模型的时候心里都会冒出一个念头这不就是初中数学里的直线方程吗确实线性模型的形式简单到令人发指——无非就是给每个特征配一个权重加起来再决定输出。但恰恰是这个“简单到不像话”的模型撑起了机器学习领域最庞大的一支家族从最基础的线性回归、对数几率回归到工业界用得最多的支持向量机、神经网络本质上都脱胎于这一章的思想。我在带新人做项目的时候发现一个很普遍的现象大家能背出线性回归的公式能写出对数几率回归的损失函数但一旦被问到“为什么逻辑回归要用sigmoid函数而不是别的”“为什么线性判别分析要做类内散度矩阵和类间散度矩阵的比值”这类问题时就卡壳了。这说明什么说明第3章的内容如果只是当成公式来记那基本等于白学。这一章真正的价值在于它用最简单的数学形式把机器学习里几个最核心的问题——如何定义模型、如何定义损失、如何优化求解、如何防止过拟合——全部串了一遍。所以这篇总复习我不打算按教材的目录顺序把公式再抄一遍。我想做的是把第3章拆成几个真正需要理解的问题一个一个讲清楚。每个问题我都会先说明“为什么会有这个问题”再讲“教材是怎么解决的”最后补充“实际用的时候要注意什么”。如果你正在准备考试这篇内容可以帮你把散落的知识点串成一条线如果你是在做实际项目这里面的很多细节能帮你避开一些常见的坑。线性模型的核心思想可以用一句话概括试图学得一个通过属性的线性组合来进行预测的函数。用数学语言说就是 ( f(x) w^T x b )。这个形式看起来平平无奇但它有几个非常好的性质第一它是最容易解释的模型权重 ( w ) 的每个分量直接告诉你对应特征的重要性第二它是很多复杂模型的基础组件神经网络的一层本质上就是线性变换加非线性激活第三它的优化问题通常是凸的有闭式解或者能保证收敛到全局最优。这三点加起来就解释了为什么线性模型在深度学习时代依然没有被淘汰——它简单、可解释、可靠。2. 线性回归从最小二乘到正则化的完整推导链路2.1 最小二乘法的几何直觉与代数推导线性回归要解决的问题很直接给定一组样本每个样本有多个属性我们想找到一组权重使得预测值尽可能接近真实值。那“尽可能接近”怎么度量最自然的想法就是用欧氏距离也就是预测值和真实值之差的平方和。这就是最小二乘法的由来。教材上给出的推导是把损失函数写成 ( E(w) (y - Xw)^T(y - Xw) )然后对 ( w ) 求导令导数为零得到 ( w^* (X^T X)^{-1} X^T y )。这个推导本身不难但有几个细节值得展开说。第一个细节是为什么用平方而不是绝对值。从数学上看平方函数处处可导而绝对值在零点不可导这给优化带来了麻烦。从统计上看假设噪声服从高斯分布那么最大化似然函数等价于最小化平方误差。从几何上看平方误差对应的是欧氏空间中的投影——我们实际上是在找目标向量 ( y ) 在由 ( X ) 的列向量张成的子空间上的正交投影。这三个角度都指向同一个结论这也是最小二乘法如此经典的原因。第二个细节是矩阵可逆性的问题。公式里出现了 ( (X^T X)^{-1} )但 ( X^T X ) 不一定可逆。什么时候不可逆当特征之间存在线性相关关系或者样本数少于特征数的时候。这时候就需要引入正则化或者用伪逆来求解。实际项目中如果发现 ( X^T X ) 接近奇异那说明特征之间共线性很严重这时候直接求逆得到的权重会非常大模型极不稳定。第三个细节是计算复杂度。直接求逆的复杂度是 ( O(d^3) )其中 ( d ) 是特征维度。当特征维度很高的时候这个计算量是不可接受的。所以实际中更多用梯度下降来求解或者用QR分解、SVD分解等数值更稳定的方法。教材上还提到了用矩阵微分的方法来推导这个技巧在后面很多章节都会用到值得熟练掌握。2.2 岭回归与Lasso两种正则化思路的本质区别当 ( X^T X ) 不可逆或者模型过拟合的时候我们就需要正则化。教材在这一节介绍了两种正则化方法岭回归和Lasso。很多人学到这里的时候只是记住了“岭回归加L2范数Lasso加L1范数”但不知道为什么一个产生稠密解、一个产生稀疏解。要理解这个区别得从优化问题的几何形状入手。岭回归的约束区域是一个球体Lasso的约束区域是一个菱形。当损失函数的等高线与约束区域相切的时候切点的位置决定了最优解的性质。对于菱形来说切点更容易落在坐标轴上这就意味着某些权重会变成零从而产生稀疏解。对于球体来说切点落在坐标轴上的概率很低所以权重通常都是非零的。这个几何解释很直观但实际用的时候还有几个点需要注意。第一正则化系数 ( \lambda ) 的选择非常关键。( \lambda ) 太大模型会欠拟合( \lambda ) 太小正则化效果不明显。通常用交叉验证来选择。第二特征标准化在正则化之前是必须做的。因为正则化是对权重大小进行惩罚如果特征尺度不一样惩罚就会不公平。比如一个特征的范围是0到1另一个是0到10000那第二个特征的权重自然会很小但这不代表它不重要。第三Lasso的求解比岭回归复杂因为L1范数不可导。教材上提到了用近端梯度下降或者坐标下降法来求解实际中更多用坐标下降法因为它每次只优化一个变量有闭式解收敛速度也不错。还有一个容易被忽略的点弹性网。弹性网是岭回归和Lasso的结合同时加L1和L2正则。当特征之间存在分组相关性的时候Lasso倾向于只选其中一个而弹性网能把一组相关特征都选进来。这个性质在基因数据分析等场景中特别有用。3. 对数几率回归为什么是sigmoid而不是其他函数3.1 从广义线性模型的角度理解sigmoid的必然性对数几率回归这个名字本身就透露了它的本质它是在对对数几率进行线性建模。所谓几率就是事件发生的概率与不发生的概率之比。对数几率就是几率的对数。教材上给出的公式是 ( \ln \frac{p}{1-p} w^T x b )反解出 ( p ) 就得到了sigmoid函数。但这里有一个问题为什么我们要对对数几率建模而不是直接对概率建模直接对概率建模的话模型就是 ( p w^T x b )但这样有一个致命问题( w^T x b ) 的取值范围是负无穷到正无穷而概率必须在0到1之间。所以我们需要一个函数把实数域映射到(0,1)区间。sigmoid函数正好满足这个要求而且它还有一个很好的性质它的导数可以用自身表示即 ( \sigma(z) \sigma(z)(1-\sigma(z)) )这让梯度计算变得非常简洁。更深层的原因是对数几率回归实际上是广义线性模型的一个特例。广义线性模型假设输出变量服从指数族分布然后通过一个链接函数把线性预测子映射到分布的均值。对于二分类问题输出服从伯努利分布而伯努利分布的自然参数正好就是对数几率。所以sigmoid函数不是随便选的它是从概率分布推导出来的必然结果。3.2 极大似然估计与交叉熵损失的等价性教材上推导对数几率回归的损失函数时用的是极大似然估计。写出似然函数取对数然后最大化。最后得到的损失函数形式是 ( \sum [-y_i \ln p_i - (1-y_i) \ln(1-p_i)] )这就是交叉熵损失。这里有一个很重要的等价关系需要理解最小化交叉熵等价于最大化似然。这个等价性不是巧合而是信息论的基本结论。交叉熵衡量的是用预测分布去编码真实分布所需的平均编码长度当预测分布和真实分布完全一致时交叉熵达到最小值。从优化的角度看交叉熵损失函数是凸函数有唯一的全局最优解这保证了梯度下降能找到最优解。实际用的时候有几个点需要注意。第一数值稳定性。当预测值接近0或1的时候对数运算会出现数值问题。所以实际实现中通常会把sigmoid和交叉熵损失合并在一起计算避免中间结果溢出。第二类别不平衡。如果正负样本比例悬殊交叉熵损失会被多数类主导导致模型偏向多数类。这时候可以用加权交叉熵或者Focal Loss来缓解。第三多分类的推广。二分类的对数几率回归推广到多分类就是Softmax回归损失函数变成多类交叉熵形式和二分类完全一致。3.3 牛顿法与梯度下降两种优化策略的取舍教材上介绍了用牛顿法来求解对数几率回归的优化问题。牛顿法的核心思想是用二阶导数信息来指导搜索方向收敛速度是二次的比梯度下降快很多。但牛顿法也有明显的缺点需要计算和存储Hessian矩阵当特征维度很高的时候这个开销是不可接受的。实际中怎么选如果特征维度在几百以内样本量也不大牛顿法或者拟牛顿法如L-BFGS是很好的选择收敛快且稳定。如果特征维度上万甚至更高那就只能用梯度下降或者随机梯度下降。还有一个折中方案是小批量梯度下降每次用一小部分样本来估计梯度既降低了计算量又保持了梯度的稳定性。这里分享一个实际经验学习率的设置对梯度下降的收敛影响极大。学习率太大损失会震荡甚至发散学习率太小收敛太慢。常用的策略是先用一个较大的学习率快速下降然后逐渐减小学习率。另外特征标准化对梯度下降的收敛速度也有很大影响因为不同特征的梯度尺度不一样标准化之后可以让梯度下降走得更“直”。4. 线性判别分析从降维视角理解分类4.1 类内散度与类间散度的博弈线性判别分析LDA的思想非常优雅投影之后同类样本尽可能近异类样本尽可能远。用数学语言说就是要最大化类间散度与类内散度的比值。教材上给出的广义瑞利商形式是 ( J \frac{w^T S_b w}{w^T S_w w} )其中 ( S_b ) 是类间散度矩阵( S_w ) 是类内散度矩阵。这个优化问题的解是 ( S_w^{-1} S_b ) 的最大特征值对应的特征向量。这个结论的推导用到了拉格朗日乘子法思路和主成分分析很像但目标不同PCA是无监督的目标是最大化投影方差LDA是有监督的目标是最大化类间区分度。实际用LDA的时候有几个坑需要注意。第一( S_w ) 的可逆性。当样本数少于特征数的时候( S_w ) 是奇异的无法直接求逆。这时候需要先做降维或者用正则化的LDA。第二LDA假设各类协方差矩阵相同。如果这个假设不成立LDA的效果会大打折扣。这时候可以考虑用二次判别分析QDA它允许各类有不同的协方差矩阵。第三LDA对异常值敏感。因为均值和协方差都容易受异常值影响所以用之前最好先做异常值检测和处理。4.2 多分类LDA的推广与实现细节二分类的LDA只需要找一个投影方向多分类的LDA需要找多个投影方向。具体来说如果有 ( K ) 个类别那么最多能找 ( K-1 ) 个投影方向。这是因为类间散度矩阵 ( S_b ) 的秩最多是 ( K-1 )。多分类LDA的求解方法和二分类类似也是求 ( S_w^{-1} S_b ) 的特征向量然后取前 ( K-1 ) 个最大特征值对应的特征向量组成投影矩阵。投影之后样本的维度从原来的 ( d ) 维降到了 ( K-1 ) 维然后再用其他分类器如最近邻分类器进行分类。这里有一个实现细节值得注意数值稳定性。直接计算 ( S_w^{-1} S_b ) 的特征值可能会遇到数值问题更稳定的做法是先对 ( S_w ) 做Cholesky分解然后转化为标准特征值问题。另外特征标准化在LDA之前也是必须的否则量纲大的特征会主导散度矩阵的计算。5. 类别不平衡与多分类线性模型的实战扩展5.1 再缩放与阈值移动解决类别不平衡的两种策略教材在第3章的最后提到了类别不平衡问题。这个问题在实际项目中非常常见比如欺诈检测、疾病诊断等场景正样本的比例可能只有百分之几甚至更低。如果直接用标准的对数几率回归模型会倾向于把所有样本都预测为负类因为这样损失函数最小。解决类别不平衡的基本思路是再缩放。具体来说如果正样本的比例是 ( \pi )负样本的比例是 ( 1-\pi )那么我们可以调整预测阈值使得模型的输出经过阈值移动后正负样本的预测比例与真实比例一致。教材上给出的公式是 ( \frac{y}{1-y} \frac{p}{1-p} \cdot \frac{\pi}{1-\pi} )其中 ( p ) 是模型输出的概率。实际中再缩放有三种实现方式欠采样、过采样和阈值移动。欠采样是减少多数类样本过采样是增加少数类样本阈值移动是调整决策阈值。三种方法各有优劣欠采样简单但会丢失信息过采样容易过拟合阈值移动不改变数据分布但需要知道真实比例。实际中常用的是SMOTE合成少数类过采样技术它通过在少数类样本之间插值来生成新样本比简单的复制过采样效果更好。5.2 从二分类到多分类OvO与OvR的取舍线性模型天然是二分类器要处理多分类问题就需要一些策略。最常用的两种是一对一OvO和一对其余OvR。OvO的策略是对于 ( K ) 个类别每两个类别之间训练一个分类器总共训练 ( K(K-1)/2 ) 个分类器。预测的时候每个分类器投一票得票最多的类别作为最终预测。OvO的优点是每个分类器只需要用两个类别的数据来训练训练速度快缺点是分类器数量随类别数平方增长当类别很多的时候存储和计算开销都很大。OvR的策略是对于 ( K ) 个类别每个类别训练一个分类器把这个类别作为正类其他所有类别作为负类。预测的时候选择输出概率最大的那个分类器对应的类别。OvR的优点是分类器数量少只有 ( K ) 个缺点是每个分类器的训练都用了全部数据而且正负样本比例可能很不平衡。实际中怎么选如果类别数不多比如10以内OvO和OvR差别不大。如果类别数很多比如上百OvR更合适因为分类器数量少。还有一个更优雅的方案是多分类Softmax回归它直接输出每个类别的概率不需要组合多个二分类器。Softmax回归的损失函数是交叉熵的推广优化方法和二分类类似。6. 复习中的常见误区与实战建议6.1 公式记忆之外真正需要理解的核心概念复习第3章的时候很多人会把精力花在背公式上。但根据我的经验公式忘了可以查但有几个核心概念如果没理解遇到实际问题就会束手无策。第一个核心概念是损失函数的选择与优化目标的关系。最小二乘对应高斯噪声假设下的极大似然交叉熵对应伯努利分布下的极大似然。理解了这个对应关系就能明白为什么不同的问题要用不同的损失函数。第二个核心概念是正则化的本质。正则化不是简单的“防止过拟合”它实际上是在引入先验知识。L2正则对应高斯先验L1正则对应拉普拉斯先验。理解了这一点就能明白为什么L1能产生稀疏解而L2不能。第三个核心概念是优化算法的收敛性。梯度下降、牛顿法、坐标下降每种算法都有自己的适用场景。理解它们的收敛速度和计算复杂度才能在实际中做出正确的选择。6.2 从教材到实战几个容易踩的坑第一个坑是特征标准化。线性模型对特征的尺度很敏感尤其是用了正则化或者梯度下降的时候。我见过很多次模型效果不好不是因为算法选错了而是因为忘了做标准化。第二个坑是多重共线性。当特征之间存在高度相关关系的时候线性回归的权重会变得很不稳定甚至符号都可能是反的。这时候可以用方差膨胀因子VIF来检测如果VIF大于10就说明共线性很严重需要处理。第三个坑是过拟合的判断。训练集上的效果很好测试集上效果很差这是典型的过拟合。但有时候训练集和测试集效果都不好那可能是欠拟合。区分这两种情况才能选择正确的应对策略。第四个坑是类别不平衡的处理时机。类别不平衡应该在训练之前处理而不是在训练之后调整阈值。因为模型在训练的时候如果被多数类主导学到的权重本身就是有偏的事后调整阈值只能部分纠正。6.3 一个完整的实战检查清单最后我整理了一个线性模型实战的检查清单每次做项目的时候可以对照着过一遍检查项具体内容常见问题数据预处理缺失值处理、异常值检测、特征标准化忘记标准化导致正则化失效特征工程共线性检测、特征选择、多项式特征共线性导致权重不稳定模型选择线性回归、岭回归、Lasso、逻辑回归用错损失函数正则化L1/L2/弹性网、正则化系数选择正则化系数过大或过小优化算法梯度下降、牛顿法、坐标下降学习率设置不当类别不平衡再缩放、SMOTE、阈值移动处理时机不对模型评估交叉验证、混淆矩阵、AUC只看准确率这个清单不是万能的但能帮你避免大部分低级错误。实际项目中最重要的还是理解数据、理解问题然后选择最合适的工具。线性模型虽然简单但用好它需要对这些细节有深入的理解。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。