【机器学习】02_线性模型

32 阅读1分钟

一、 线性回归 (Linear Regression) —— 基础中的基础

1. 核心公式(必背)
  • 模型定义f(x)=wTx+bf(x) = w^T x + b 向量形式为 f(x)=wTxf(x) = w^T x(通常将 bb 吸收进 ww,即 xx 增加一维常数1),。
  • 优化目标(损失函数): 通常使用均方误差 (MSE, Mean Squared Error)。目标是最小化 EEE(w)=i=1m(yiwTxi)2E(w) = \sum_{i=1}^{m} (y_i - w^T x_i)^2 向量形式:E(w)=(yXw)T(yXw)E(w) = (y - Xw)^T (y - Xw),。
2. 求解方法(计算题考点)
  • 最小二乘法 (Least Squares) - 闭式解: 令损失函数对 ww 的导数为 0,解得: w=(XTX)1XTyw^* = (X^T X)^{-1} X^T y 考点提示
    • 这个解存在的条件是 XTXX^T X满秩(可逆)的。
    • 如果特征数 dd 大于样本数 mmd>md > m),或者特征之间存在多重共线性,XTXX^T X 往往不可逆,此时需要使用正则化
  • 梯度下降法 (Gradient Descent): 当无法直接求逆或计算量太大时使用。 迭代公式:wwηEww \leftarrow w - \eta \frac{\partial E}{\partial w}
3. 正则化 (Regularization) —— 难点与重点

这是防止过拟合的核心手段,也是概念辨析题常客。

特性岭回归 (Ridge / L2)Lasso 回归 (L1)
公式E+λE + \lambdaw
几何意义下降等高线与圆形约束区域相切下降等高线与菱形约束区域相切
核心作用限制参数大小,防止过拟合,但参数不会变为0易获得稀疏解(即让某些参数直接为0),可用于特征选择
闭式解w=(XTX+λI)1XTyw^* = (X^T X + \lambda I)^{-1} X^T y无直接闭式解,需用近端梯度下降等方法

考试金句L1正则化更容易产生稀疏解(Feature Selection),L2正则化主要用于防止模型参数过大(Weight Decay)。

简单来说,岭回归就是L2L2 正则化的线性回归。它的核心目标是通过牺牲一点点偏差,来大幅度降低模型的方差,从而解决过拟合问题。


1. 为什么要用岭回归?

在标准的线性回归(最小二乘法)中,如果特征之间存在高度相关性(多重共线性),或者特征数量很多,模型为了拟合每一个训练数据点,权重系数 ww 可能会变得非常大。

  • 问题: 权重越大,模型对输入数据的微小扰动就越敏感。
  • 后果: 导致模型方差(Variance)极大,在训练集上表现完美,但在测试集上表现糟糕(过拟合)。 岭回归通过在损失函数中添加一个“惩罚项”,强制让权重 ww 保持在较小的数值范围内。

2. 数学定义

岭回归的损失函数由两部分组成:均方误差(MSE)L2L2 惩罚项J(w)=i=1n(yiy^i)2+λj=1mwj2J(w) = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 + \lambda \sum_{j=1}^{m} w_j^2

  • 第一部分: 传统的平方误差,希望模型预测得准。
  • 第二部分(λw2\lambda \sum w^2): L2L2 正则化项。λ\lambda(Lambda)是一个超参数,用来控制惩罚的力度。
    • λ=0\lambda = 0 时:岭回归退化为普通的线性回归。
    • λ\lambda 非常大时:为了让总损失最小,模型会倾向于让所有的 ww 都接近于 0,导致模型变简单(偏差变大,方差变小)。

3. 几何直观理解

我们可以把正则化看作是对参数空间的限制。 在图中,左侧圆形的区域代表了岭回归对权重 ww 的约束范围。

  • 线性回归的目标是找到椭圆的中心(误差最小点)。
  • 岭回归则要求解必须落在圆圈内或圆圈边缘。
  • 最终的解是圆圈与椭圆相切的地方。由于圆形没有“尖角”,岭回归倾向于把 ww 缩小到接近 0,但很难让它精确等于 0

4. 岭回归的主要特点

特点说明
权重收缩 (Shrinkage)它会将模型的参数推向 0,但不会像 Lasso 那样直接变为 0。
处理多重共线性当特征高度相关时,普通回归的解会变得极不稳定,岭回归能有效稳定参数。
降低方差它是解决过拟合的利器,特别是在特征维度 pp 接近或大于样本量 nn 时。
不具备特征选择功能因为参数不会变为 0,所以所有特征都会保留在模型中。

二、 对数几率回归 (Logistic Regression, LR) —— 分类任务的核心

注意:虽然叫“回归”,但它是分类算法!用于解决二分类问题(0或1)。

1. 模型推导
  • Sigmoid 函数(激活函数): 将线性输出 z=wTx+bz = w^T x + b 压缩到 (0,1)(0, 1) 区间,表示概率。 y=11+ezy = \frac{1}{1 + e^{-z}}
  • 物理意义(对数几率): 模型实际上是在拟合“对数几率”(Log-odds): lny1y=wTx+b\ln \frac{y}{1-y} = w^T x + b 其中 y1y\frac{y}{1-y} 称为几率(odds),即正例概率与反例概率的比值。
2. 损失函数:为什么不用 MSE?(高频简答题)
  • 最大似然估计 (MLE):LR 的目标是最大化样本属于其真实标记的概率。
  • 交叉熵损失 (Cross-Entropy Loss):推导出的损失函数为: L(w)=i=1m(yilny^i(1yi)ln(1y^i))L(w) = \sum_{i=1}^{m} \left( -y_i \ln \hat{y}_i - (1-y_i) \ln (1-\hat{y}_i) \right)
  • 不用 MSE 的原因:如果用 MSE(平方误差),在 Sigmoid 函数作用下,损失函数关于 ww 非凸(Non-convex),包含多个局部极小值,难以用梯度下降求解。而交叉熵损失是凸函数,保证能找到全局最优解。

三、 线性判别分析 (LDA) —— 既分类又降维

核心思想(Fisher准则):“类内尽可能紧凑,类间尽可能远离”

1. 两个关键矩阵(需记忆定义)
  • 类内散度矩阵 (SwS_w):衡量每一类内部样本的离散程度(越小越好)。 Sw=Σ0+Σ1S_w = \Sigma_0 + \Sigma_1
  • 类间散度矩阵 (SbS_b):衡量不同类别中心点之间的距离(越大越好)。 Sb=(μ0μ1)(μ0μ1)TS_b = (\mu_0 - \mu_1)(\mu_0 - \mu_1)^T
2. 优化目标

最大化广义瑞利商: J=wTSbwwTSwwJ = \frac{w^T S_b w}{w^T S_w w}

3. 最终解(计算结论)

不需要做复杂的特征值分解,对于二分类,投影方向 ww 直接正比于: w=Sw1(μ0μ1)w = S_w^{-1} (\mu_0 - \mu_1) 即:最优投影方向 = 类内散度矩阵的逆 ×\times 两类均值之差,。


四、 多分类与类别不平衡 (Extensions)

  1. 多分类策略

    • OvO (一对一):训练 N(N1)/2N(N-1)/2 个分类器,投票决定。
    • OvR (一对其余):训练 NN 个分类器,取置信度最高的。
    • MvM (多对多):如纠错输出码 (ECOC)。
  2. 类别不平衡 (Class Imbalance): 当正负样本比例严重失调(如 1:99)时,标准学习器往往会失效(倾向于预测大类)。

    • 欠采样 (Undersampling):扔掉一些大类样本(EasyEnsemble)。
    • 过采样 (Oversampling):增加小类样本(SMOTE算法,不是简单复制,而是插值生成新样本)。
    • 阈值移动 (Threshold Moving):调整分类阈值,不再以 0.5 为界。

考试通关 CheckList:

  1. 计算:给几个数据点,能列出 XXyy,写出线性回归的 ww 计算公式。
  2. 推导:能简单说明 LR 为什么要用交叉熵而不是 MSE。
  3. 画图:能画出 L1(菱形)和 L2(圆形)正则化的约束示意图,并解释为何 L1 产生稀疏解。
  4. LDA:记住口诀“类内小、类间大”,并记住 ww 的最终公式。

这一讲的内容非常硬核,特别是公式部分。如果您对某个具体的推导(比如 LR 的梯度或 LDA 的瑞利商)感到困惑,我们可以单独展开讲。如果没有问题,我们随时可以进入“第4讲:贝叶斯分类器”。

思考题

1.

证明αTAα=A\frac{\partial \boldsymbol{\alpha}^T \mathbf{A}}{\partial \boldsymbol{\alpha}} = \mathbf{A} 这是一个在线性回归(尤其是推导正规方程时)非常基础且重要的**矩阵微积分(Matrix Calculus)**恒等式。

为了证明这个等式,我们通常采用分量分析法(Element-wise analysis)。这种方法最直观,能让你看清矩阵运算背后的本质。


1. 定义符号与维度

首先,为了使运算有意义,我们假设:

  • α\boldsymbol{\alpha} 是一个 n×1n \times 1列向量α=[α1,α2,,αn]T\boldsymbol{\alpha} = [\alpha_1, \alpha_2, \dots, \alpha_n]^T

  • A\mathbf{A} 是一个 n×mn \times m矩阵

  • 那么 αTA\boldsymbol{\alpha}^T \mathbf{A} 是一个 1×m1 \times m行向量

y=αTA\mathbf{y} = \boldsymbol{\alpha}^T \mathbf{A},则 y\mathbf{y} 是一个包含 mm 个元素的行向量,记为 y=[y1,y2,,ym]\mathbf{y} = [y_1, y_2, \dots, y_m]

2. 展开分量

我们来看向量 y\mathbf{y} 中的第 jj 个元素 yjy_j 是如何计算的。根据矩阵乘法定义:

yj=k=1nαkAkjy_j = \sum_{k=1}^n \alpha_k A_{kj}

这里 AkjA_{kj} 表示矩阵 A\mathbf{A} 中第 kk 行、第 jj 列的元素。

3. 求偏导

根据矩阵对向量求导的定义(通常在机器学习中使用的是分母布局,即求导结果的行数与自变量 α\boldsymbol{\alpha} 的维数一致):

结果矩阵中的第 ii 行、第 jj 列的元素,等于 y\mathbf{y} 的第 jj 个分量对 α\boldsymbol{\alpha} 的第 ii 个分量求导:

(yα)ij=yjαi\left( \frac{\partial \mathbf{y}}{\partial \boldsymbol{\alpha}} \right)_{ij} = \frac{\partial y_j}{\partial \alpha_i}

我们将第 2 步得到的求和式带入:

yjαi=αi(k=1nαkAkj)\frac{\partial y_j}{\partial \alpha_i} = \frac{\partial}{\partial \alpha_i} \left( \sum_{k=1}^n \alpha_k A_{kj} \right)

在这个求和式中,只有当 k=ik=i 时,αk\alpha_kαi\alpha_i 的导数才为 11;当 kik \neq i 时,导数均为 00。因此:

yjαi=Aij\frac{\partial y_j}{\partial \alpha_i} = A_{ij}

4. 结论

既然结果矩阵中每一个位置 (i,j)(i, j) 的元素都恰好等于矩阵 A\mathbf{A} 中对应位置的元素 AijA_{ij},那么:

αTAα=A\frac{\partial \boldsymbol{\alpha}^T \mathbf{A}}{\partial \boldsymbol{\alpha}} = \mathbf{A}

证明完毕。


💡 学习小贴士

在学习线性回归时,你可能很快就会遇到更复杂的求导,比如对平方损失函数 J(θ)=(Xθy)T(Xθy)J(\theta) = (\mathbf{X}\theta - \mathbf{y})^T(\mathbf{X}\theta - \mathbf{y}) 求导。

掌握了上面这个简单的例子,你可以试着记住以下两个常用的“大招”:

  1. (aTx)x=a\frac{\partial (\mathbf{a}^T \mathbf{x})}{\partial \mathbf{x}} = \mathbf{a} (这是上面公式在 m=1m=1 时的特例)

  2. (xTAx)x=(A+AT)x\frac{\partial (\mathbf{x}^T \mathbf{A} \mathbf{x})}{\partial \mathbf{x}} = (\mathbf{A} + \mathbf{A}^T)\mathbf{x} (如果是对称阵,结果就是 2Ax2\mathbf{Ax}

2. 既然岭回归有闭式解,为什么还要用梯度下降法求参数?

这是一个非常棒的问题。在线性代数层面,闭式解(Normal Equation)看起来非常完美:一步到位,没有调参烦恼,直接给到最优值。 但在实际的工程实践和机器学习中,梯度下降法(Gradient Descent) 往往比闭式解更受欢迎,原因主要集中在以下四个维度:

1. 计算复杂度:当特征数量 dd 爆炸时

闭式解公式如下: θ^=(XTX+λI)1XTy\hat{\theta} = (\mathbf{X}^T\mathbf{X} + \lambda \mathbf{I})^{-1}\mathbf{X}^T\mathbf{y}

  • 闭式解的瓶颈: 最核心的一步是矩阵求逆。对于一个有 dd 个特征的矩阵,(XTX)(\mathbf{X}^T\mathbf{X}) 的维度是 d×dd \times d。求逆运算的时间复杂度大约是 O(d3)O(d^3)
    • 如果 d=1,000d=1,000,计算机算起来很快。
    • 如果 d=100,000d=100,000(这在推荐系统或图像处理中很常见),d3d^3 达到了 101510^{15} 量级,现代计算机的单机算力根本无法在合理时间内完成。
  • 梯度下降的优势: 梯度下降每一轮迭代的复杂度仅为 O(nd)O(nd)nn 是样本数)。只要迭代次数 kk 不太大,它的总开销远小于 O(d3)O(d^3)

2. 内存限制:存不下整个矩阵

  • 闭式解: 计算 XTX\mathbf{X}^T\mathbf{X} 需要一次性将数据加载到内存中。如果数据集非常巨大(TB级别),普通服务器的内存(RAM)会直接崩溃。
  • 梯度下降(特别是 SGD): 随机梯度下降(SGD)或小批量梯度下降(Mini-batch GD)一次只需要读取一小部分数据。这意味着你可以处理远超内存容量的“大数据”。

3. 算法的通用性与扩展性

  • 闭式解: 它是“量身定做”的。线性回归和岭回归有闭式解,是因为它们的损失函数是二次的(凸函数且导数是一阶线性的)。但如果你稍微改一下损失函数(比如变成 L1L_1 正则化的 Lasso 回归,或者逻辑回归),闭式解就消失了。
  • 梯度下降: 它是“万能钥匙”。学会了梯度下降处理岭回归,你就学会了处理深度学习中的神经元更新。在 Andrew Ng 的深度学习课程中,你会发现一切皆可梯度下降

4. 在线学习(Online Learning)

  • 闭式解: 如果此时又有 1000 条新数据进来了,你必须把旧数据和新数据合在一起,重新进行昂贵的矩阵求逆。
  • 梯度下降: 模型不需要重新训练。你只需要用这 1000 条新数据对现有的参数 θ\theta 再进行几次梯度更新即可。这种“增量更新”的能力在实时推荐系统中至关重要。

总结对比

特性闭式解 (Normal Equation)梯度下降 (Gradient Descent)
计算速度小规模数据极快大规模数据(d>104d > 10^4)更优
超参数无需设置学习率 α\alpha需要细心调校 α\alpha 和迭代次数
内存占用高(需存储 XTX\mathbf{X}^T\mathbf{X}低(可按批次加载数据)
适用范围仅限线性回归等极少数模型几乎适用于所有机器学习模型

直观理解:

闭式解就像是**“瞬移”,虽然快,但对身体(计算资源)要求极高,且只能去特定的目的地。

梯度下降就像是“走路”**,虽然慢点,但只要方向对,你可以走到任何你想去的地方(各种复杂的模型),而且对身体要求很低。 **