一、 线性回归 (Linear Regression) ------ 基础中的基础
1. 核心公式(必背)
- 模型定义 : f(x)=wTx+bf(x) = w^T x + bf(x)=wTx+b 向量形式为 f(x)=wTxf(x) = w^T xf(x)=wTx(通常将 bbb 吸收进 www,即 xxx 增加一维常数1),。
- 优化目标(损失函数) : 通常使用均方误差 (MSE, Mean Squared Error) 。目标是最小化 EEE: E(w)=∑i=1m(yi−wTxi)2E(w) = \sum_{i=1}^{m} (y_i - w^T x_i)^2E(w)=i=1∑m(yi−wTxi)2 向量形式:E(w)=(y−Xw)T(y−Xw)E(w) = (y - Xw)^T (y - Xw)E(w)=(y−Xw)T(y−Xw),。
2. 求解方法(计算题考点)
- 最小二乘法 (Least Squares) - 闭式解 : 令损失函数对 www 的导数为 0,解得: w∗=(XTX)−1XTyw^* = (X^T X)^{-1} X^T yw∗=(XTX)−1XTy 考点提示 :
- 这个解存在的条件是 XTXX^T XXTX 是满秩(可逆)的。
- 如果特征数 ddd 大于样本数 mmm(d>md > md>m),或者特征之间存在多重共线性,XTXX^T XXTX 往往不可逆,此时需要使用正则化。
- 梯度下降法 (Gradient Descent) : 当无法直接求逆或计算量太大时使用。 迭代公式:w←w−η∂E∂ww \leftarrow w - \eta \frac{\partial E}{\partial w}w←w−η∂w∂E。
3. 正则化 (Regularization) ------ 难点与重点
这是防止过拟合的核心手段,也是概念辨析题常客。
| 特性 | 岭回归 (Ridge / L2) | Lasso 回归 (L1) |
|---|---|---|
| 公式 | E+λE + \lambdaE+λ | w |
| 几何意义 | 下降等高线与圆形约束区域相切 | 下降等高线与菱形约束区域相切 |
| 核心作用 | 限制参数大小,防止过拟合,但参数不会变为0 | 易获得稀疏解 (即让某些参数直接为0),可用于特征选择 |
| 闭式解 | w∗=(XTX+λI)−1XTyw^* = (X^T X + \lambda I)^{-1} X^T yw∗=(XTX+λI)−1XTy | 无直接闭式解,需用近端梯度下降等方法 |
考试金句 :L1正则化更容易产生稀疏解(Feature Selection),L2正则化主要用于防止模型参数过大(Weight Decay)。
简单来说,岭回归就是带 L2L2L2 正则化的线性回归 。它的核心目标是通过牺牲一点点偏差,来大幅度降低模型的方差,从而解决过拟合问题。
1. 为什么要用岭回归?
在标准的线性回归(最小二乘法)中,如果特征之间存在高度相关性(多重共线性),或者特征数量很多,模型为了拟合每一个训练数据点,权重系数 www 可能会变得非常大。
- 问题: 权重越大,模型对输入数据的微小扰动就越敏感。
- 后果: 导致模型方差(Variance)极大,在训练集上表现完美,但在测试集上表现糟糕(过拟合)。
岭回归通过在损失函数中添加一个"惩罚项",强制让权重 www 保持在较小的数值范围内。
2. 数学定义
岭回归的损失函数由两部分组成:均方误差(MSE) 和 L2L2L2 惩罚项 。
J(w)=∑i=1n(yi−y^i)2+λ∑j=1mwj2J(w) = \sum_{i=1}^{n} (y_i - \hat{y}i)^2 + \lambda \sum{j=1}^{m} w_j^2J(w)=i=1∑n(yi−y^i)2+λj=1∑mwj2
- 第一部分: 传统的平方误差,希望模型预测得准。
- 第二部分(λ∑w2\lambda \sum w^2λ∑w2): L2L2L2 正则化项。λ\lambdaλ(Lambda)是一个超参数,用来控制惩罚的力度。
- 当 λ=0\lambda = 0λ=0 时:岭回归退化为普通的线性回归。
- 当 λ\lambdaλ 非常大时:为了让总损失最小,模型会倾向于让所有的 www 都接近于 0,导致模型变简单(偏差变大,方差变小)。
3. 几何直观理解
我们可以把正则化看作是对参数空间的限制。
在图中,左侧圆形的区域代表了岭回归对权重 www 的约束范围。
- 线性回归的目标是找到椭圆的中心(误差最小点)。
- 岭回归则要求解必须落在圆圈内或圆圈边缘。
- 最终的解是圆圈与椭圆相切的地方。由于圆形没有"尖角",岭回归倾向于把 www 缩小到接近 0,但很难让它精确等于 0。
4. 岭回归的主要特点
| 特点 | 说明 |
|---|---|
| 权重收缩 (Shrinkage) | 它会将模型的参数推向 0,但不会像 Lasso 那样直接变为 0。 |
| 处理多重共线性 | 当特征高度相关时,普通回归的解会变得极不稳定,岭回归能有效稳定参数。 |
| 降低方差 | 它是解决过拟合的利器,特别是在特征维度 ppp 接近或大于样本量 nnn 时。 |
| 不具备特征选择功能 | 因为参数不会变为 0,所以所有特征都会保留在模型中。 |
二、 对数几率回归 (Logistic Regression, LR) ------ 分类任务的核心
注意 :虽然叫"回归",但它是分类算法!用于解决二分类问题(0或1)。
1. 模型推导
- Sigmoid 函数(激活函数) : 将线性输出 z=wTx+bz = w^T x + bz=wTx+b 压缩到 (0,1)(0, 1)(0,1) 区间,表示概率。 y=11+e−zy = \frac{1}{1 + e^{-z}}y=1+e−z1
- 物理意义(对数几率) : 模型实际上是在拟合"对数几率"(Log-odds): lny1−y=wTx+b\ln \frac{y}{1-y} = w^T x + bln1−yy=wTx+b 其中 y1−y\frac{y}{1-y}1−yy 称为几率(odds),即正例概率与反例概率的比值。
2. 损失函数:为什么不用 MSE?(高频简答题)
- 最大似然估计 (MLE):LR 的目标是最大化样本属于其真实标记的概率。
- 交叉熵损失 (Cross-Entropy Loss) :推导出的损失函数为: L(w)=∑i=1m(−yilny^i−(1−yi)ln(1−y^i))L(w) = \sum_{i=1}^{m} \left( -y_i \ln \hat{y}_i - (1-y_i) \ln (1-\hat{y}_i) \right)L(w)=i=1∑m(−yilny^i−(1−yi)ln(1−y^i))
- 不用 MSE 的原因 :如果用 MSE(平方误差),在 Sigmoid 函数作用下,损失函数关于 www 非凸 (Non-convex),包含多个局部极小值,难以用梯度下降求解。而交叉熵损失是凸函数,保证能找到全局最优解。
三、 线性判别分析 (LDA) ------ 既分类又降维
核心思想 (Fisher准则):"类内尽可能紧凑,类间尽可能远离"。
1. 两个关键矩阵(需记忆定义)
- 类内散度矩阵 (SwS_wSw) :衡量每一类内部样本的离散程度(越小越好)。 Sw=Σ0+Σ1S_w = \Sigma_0 + \Sigma_1Sw=Σ0+Σ1
- 类间散度矩阵 (SbS_bSb) :衡量不同类别中心点之间的距离(越大越好)。 Sb=(μ0−μ1)(μ0−μ1)TS_b = (\mu_0 - \mu_1)(\mu_0 - \mu_1)^TSb=(μ0−μ1)(μ0−μ1)T
2. 优化目标
最大化广义瑞利商: J=wTSbwwTSwwJ = \frac{w^T S_b w}{w^T S_w w}J=wTSwwwTSbw
3. 最终解(计算结论)
不需要做复杂的特征值分解,对于二分类,投影方向 www 直接正比于: w=Sw−1(μ0−μ1)w = S_w^{-1} (\mu_0 - \mu_1)w=Sw−1(μ0−μ1) 即:最优投影方向 = 类内散度矩阵的逆 ×\times× 两类均值之差,。
四、 多分类与类别不平衡 (Extensions)
-
多分类策略:
- OvO (一对一) :训练 N(N−1)/2N(N-1)/2N(N−1)/2 个分类器,投票决定。
- OvR (一对其余) :训练 NNN 个分类器,取置信度最高的。
- MvM (多对多):如纠错输出码 (ECOC)。
-
类别不平衡 (Class Imbalance): 当正负样本比例严重失调(如 1:99)时,标准学习器往往会失效(倾向于预测大类)。
- 欠采样 (Undersampling):扔掉一些大类样本(EasyEnsemble)。
- 过采样 (Oversampling) :增加小类样本(SMOTE算法,不是简单复制,而是插值生成新样本)。
- 阈值移动 (Threshold Moving):调整分类阈值,不再以 0.5 为界。
考试通关 CheckList:
- 计算 :给几个数据点,能列出 XXX 和 yyy,写出线性回归的 www 计算公式。
- 推导:能简单说明 LR 为什么要用交叉熵而不是 MSE。
- 画图:能画出 L1(菱形)和 L2(圆形)正则化的约束示意图,并解释为何 L1 产生稀疏解。
- LDA :记住口诀"类内小、类间大",并记住 www 的最终公式。
这一讲的内容非常硬核,特别是公式部分。如果您对某个具体的推导(比如 LR 的梯度或 LDA 的瑞利商)感到困惑,我们可以单独展开讲。如果没有问题,我们随时可以进入"第4讲:贝叶斯分类器"。
思考题
1.
证明∂αTA∂α=A\frac{\partial \boldsymbol{\alpha}^T \mathbf{A}}{\partial \boldsymbol{\alpha}} = \mathbf{A}∂α∂αTA=A
这是一个在线性回归(尤其是推导正规方程时)非常基础且重要的**矩阵微积分(Matrix Calculus)**恒等式。
为了证明这个等式,我们通常采用分量分析法(Element-wise analysis)。这种方法最直观,能让你看清矩阵运算背后的本质。
1. 定义符号与维度
首先,为了使运算有意义,我们假设:
-
α\boldsymbol{\alpha}α 是一个 n×1n \times 1n×1 的列向量 :α=[α1,α2,...,αn]T\boldsymbol{\alpha} = [\alpha_1, \alpha_2, \dots, \alpha_n]^Tα=[α1,α2,...,αn]T。
-
A\mathbf{A}A 是一个 n×mn \times mn×m 的矩阵。
-
那么 αTA\boldsymbol{\alpha}^T \mathbf{A}αTA 是一个 1×m1 \times m1×m 的行向量。
设 y=αTA\mathbf{y} = \boldsymbol{\alpha}^T \mathbf{A}y=αTA,则 y\mathbf{y}y 是一个包含 mmm 个元素的行向量,记为 y=[y1,y2,...,ym]\mathbf{y} = [y_1, y_2, \dots, y_m]y=[y1,y2,...,ym]。
2. 展开分量
我们来看向量 y\mathbf{y}y 中的第 jjj 个元素 yjy_jyj 是如何计算的。根据矩阵乘法定义:
yj=∑k=1nαkAkjy_j = \sum_{k=1}^n \alpha_k A_{kj}yj=k=1∑nαkAkj
这里 AkjA_{kj}Akj 表示矩阵 A\mathbf{A}A 中第 kkk 行、第 jjj 列的元素。
3. 求偏导
根据矩阵对向量求导的定义(通常在机器学习中使用的是分母布局,即求导结果的行数与自变量 α\boldsymbol{\alpha}α 的维数一致):
结果矩阵中的第 iii 行、第 jjj 列的元素,等于 y\mathbf{y}y 的第 jjj 个分量对 α\boldsymbol{\alpha}α 的第 iii 个分量求导:
(∂y∂α)ij=∂yj∂αi\left( \frac{\partial \mathbf{y}}{\partial \boldsymbol{\alpha}} \right)_{ij} = \frac{\partial y_j}{\partial \alpha_i}(∂α∂y)ij=∂αi∂yj
我们将第 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)∂αi∂yj=∂αi∂(k=1∑nαkAkj)
在这个求和式中,只有当 k=ik=ik=i 时,αk\alpha_kαk 对 αi\alpha_iαi 的导数才为 111;当 k≠ik \neq ik=i 时,导数均为 000。因此:
∂yj∂αi=Aij\frac{\partial y_j}{\partial \alpha_i} = A_{ij}∂αi∂yj=Aij
4. 结论
既然结果矩阵中每一个位置 (i,j)(i, j)(i,j) 的元素都恰好等于矩阵 A\mathbf{A}A 中对应位置的元素 AijA_{ij}Aij,那么:
∂αTA∂α=A\frac{\partial \boldsymbol{\alpha}^T \mathbf{A}}{\partial \boldsymbol{\alpha}} = \mathbf{A}∂α∂αTA=A
证明完毕。
💡 学习小贴士
在学习线性回归时,你可能很快就会遇到更复杂的求导,比如对平方损失函数 J(θ)=(Xθ−y)T(Xθ−y)J(\theta) = (\mathbf{X}\theta - \mathbf{y})^T(\mathbf{X}\theta - \mathbf{y})J(θ)=(Xθ−y)T(Xθ−y) 求导。
掌握了上面这个简单的例子,你可以试着记住以下两个常用的"大招":
-
∂(aTx)∂x=a\frac{\partial (\mathbf{a}^T \mathbf{x})}{\partial \mathbf{x}} = \mathbf{a}∂x∂(aTx)=a (这是上面公式在 m=1m=1m=1 时的特例)
-
∂(xTAx)∂x=(A+AT)x\frac{\partial (\mathbf{x}^T \mathbf{A} \mathbf{x})}{\partial \mathbf{x}} = (\mathbf{A} + \mathbf{A}^T)\mathbf{x}∂x∂(xTAx)=(A+AT)x (如果是对称阵,结果就是 2Ax2\mathbf{Ax}2Ax)
2. 既然岭回归有闭式解,为什么还要用梯度下降法求参数?
这是一个非常棒的问题。在线性代数层面,闭式解(Normal Equation)看起来非常完美:一步到位,没有调参烦恼,直接给到最优值。
但在实际的工程实践和机器学习中,梯度下降法(Gradient Descent) 往往比闭式解更受欢迎,原因主要集中在以下四个维度:
1. 计算复杂度:当特征数量 ddd 爆炸时
闭式解公式如下:
θ^=(XTX+λI)−1XTy\hat{\theta} = (\mathbf{X}^T\mathbf{X} + \lambda \mathbf{I})^{-1}\mathbf{X}^T\mathbf{y}θ^=(XTX+λI)−1XTy
- 闭式解的瓶颈: 最核心的一步是矩阵求逆 。对于一个有 ddd 个特征的矩阵,(XTX)(\mathbf{X}^T\mathbf{X})(XTX) 的维度是 d×dd \times dd×d。求逆运算的时间复杂度大约是 O(d3)O(d^3)O(d3)。
- 如果 d=1,000d=1,000d=1,000,计算机算起来很快。
- 如果 d=100,000d=100,000d=100,000(这在推荐系统或图像处理中很常见),d3d^3d3 达到了 101510^{15}1015 量级,现代计算机的单机算力根本无法在合理时间内完成。
- 梯度下降的优势: 梯度下降每一轮迭代的复杂度仅为 O(nd)O(nd)O(nd)(nnn 是样本数)。只要迭代次数 kkk 不太大,它的总开销远小于 O(d3)O(d^3)O(d3)。
2. 内存限制:存不下整个矩阵
- 闭式解: 计算 XTX\mathbf{X}^T\mathbf{X}XTX 需要一次性将数据加载到内存中。如果数据集非常巨大(TB级别),普通服务器的内存(RAM)会直接崩溃。
- 梯度下降(特别是 SGD): 随机梯度下降(SGD)或小批量梯度下降(Mini-batch GD)一次只需要读取一小部分数据。这意味着你可以处理远超内存容量的"大数据"。
3. 算法的通用性与扩展性
- 闭式解: 它是"量身定做"的。线性回归和岭回归有闭式解,是因为它们的损失函数是二次的(凸函数且导数是一阶线性的)。但如果你稍微改一下损失函数(比如变成 L1L_1L1 正则化的 Lasso 回归,或者逻辑回归),闭式解就消失了。
- 梯度下降: 它是"万能钥匙"。学会了梯度下降处理岭回归,你就学会了处理深度学习中的神经元更新。在 Andrew Ng 的深度学习课程中,你会发现一切皆可梯度下降。
4. 在线学习(Online Learning)
- 闭式解: 如果此时又有 1000 条新数据进来了,你必须把旧数据和新数据合在一起,重新进行昂贵的矩阵求逆。
- 梯度下降: 模型不需要重新训练。你只需要用这 1000 条新数据对现有的参数 θ\thetaθ 再进行几次梯度更新即可。这种"增量更新"的能力在实时推荐系统中至关重要。
总结对比
| 特性 | 闭式解 (Normal Equation) | 梯度下降 (Gradient Descent) |
|---|---|---|
| 计算速度 | 小规模数据极快 | 大规模数据(d>104d > 10^4d>104)更优 |
| 超参数 | 无需设置学习率 α\alphaα | 需要细心调校 α\alphaα 和迭代次数 |
| 内存占用 | 高(需存储 XTX\mathbf{X}^T\mathbf{X}XTX) | 低(可按批次加载数据) |
| 适用范围 | 仅限线性回归等极少数模型 | 几乎适用于所有机器学习模型 |
直观理解:
闭式解就像是**"瞬移",虽然快,但对身体(计算资源)要求极高,且只能去特定的目的地。
梯度下降就像是"走路"**,虽然慢点,但只要方向对,你可以走到任何你想去的地方(各种复杂的模型),而且对身体要求很低。
**