3. 逻辑回归与分类:从Sigmoid到Softmax
逻辑回归,名字里带个「回归」,干的却是分类的活。我第一次接触时也觉得奇怪——明明要分猫和狗,怎么叫回归?后来才明白,它回归的是「概率」,而不是类别本身。
这一章我们聊聊逻辑回归的核心:Sigmoid函数怎么把实数压成概率,决策边界怎么画,交叉熵为什么比均方误差更合适,以及多分类时怎么用Softmax。嗯,内容不少,但都很实用。
3.1 Sigmoid函数:把实数变成概率
线性回归输出的是任意实数,但分类问题需要0到1之间的概率。怎么办?Sigmoid函数就是干这个的。
公式很简单:
σ(z) = 1 / (1 + e^(-z))
其中z是线性模型的输出,z = w·x + b。Sigmoid把z映射到(0, 1)区间。z越大,输出越接近1;z越小,输出越接近0。z=0时,输出正好是0.5。
我个人习惯把Sigmoid理解成一个「软开关」。z很大时,开关打开(接近1);z很小时,开关关闭(接近0);中间区域是平滑过渡。这种平滑性很重要——它让梯度可以传播,模型才能学习。
关键点:Sigmoid的输出可以解释为「正类的概率」。比如输出0.8,意味着模型认为样本有80%的概率属于类别1。
我在项目中遇到过一个问题:Sigmoid在z值很大时,梯度几乎为0。这会导致梯度消失,模型学不动。所以输入特征最好做归一化,让z不要太大或太小。
3.2 决策边界:模型怎么划清界限?
逻辑回归的决策边界是线性的。为什么?因为决策规则是:
如果 σ(w·x + b) > 0.5,预测为正类
否则预测为负类
σ(z) > 0.5 等价于 z > 0,也就是 w·x + b > 0。这是一个线性不等式,对应的边界是 w·x + b = 0,一条直线(或超平面)。
你想想看,如果数据本身不是线性可分的,逻辑回归就搞不定了。这时候需要特征工程——加多项式特征、做核变换,或者直接上更复杂的模型。
小技巧:画决策边界时,我习惯在二维平面上画出网格,计算每个网格点的预测概率,然后用等高线图展示。这样能直观看到模型的分界线在哪里。
我曾经在一个风控项目里,用逻辑回归做欺诈检测。数据有20多个特征,决策边界是一个19维的超平面。虽然没法可视化,但通过查看权重系数,我能判断哪些特征对分类贡献最大——这算是线性模型的一个优势。
3.3 交叉熵损失函数:为什么不用均方误差?
分类问题如果用均方误差(MSE),效果往往不好。原因有两个:
- 非凸优化:MSE在Sigmoid上不是凸函数,容易陷入局部最优。
- 梯度太小:预测错得离谱时,MSE的梯度反而很小,模型学得慢。
交叉熵损失函数长这样:
L = -[y·log(ŷ) + (1-y)·log(1-ŷ)]
其中y是真实标签(0或1),ŷ是预测概率。这个公式很巧妙:
- 当y=1时,L = -log(ŷ)。ŷ越接近1,损失越小;ŷ接近0时,损失非常大。
- 当y=0时,L = -log(1-ŷ)。ŷ越接近0,损失越小;ŷ接近1时,损失非常大。
说白了,交叉熵对「错误且自信」的预测惩罚特别重。模型预测错了还觉得自己很对?损失直接爆炸。这种特性让模型学得更快、更稳。
注意:计算交叉熵时,ŷ不能等于0或1,否则log(0)会报错。实践中会在ŷ上加一个极小值,比如1e-7。
我记得刚做分类任务时,习惯性地用了MSE。结果训练了半天,准确率卡在60%上不去。换成交叉熵后,几轮迭代就收敛了。嗯,选对损失函数真的很重要。
3.4 多分类问题:Softmax登场
二分类用Sigmoid,多分类怎么办?答案是Softmax。
Softmax把K个实数变成K个概率,且概率之和为1。公式:
Softmax(z_i) = e^(z_i) / Σ e^(z_j) (j从1到K)
说白了,就是先取指数,再归一化。指数操作放大了差异——大的z_i变得更大,小的变得更小。这样模型能更自信地做出选择。
多分类的交叉熵损失是二分类的推广:
L = -Σ y_i·log(ŷ_i) (i从1到K)
其中y_i是one-hot编码,只有真实类别对应的位置为1,其余为0。所以实际上只计算真实类别对应的那个概率的负对数。
核心思想:Softmax + 交叉熵 = 多分类的标准配置。Softmax负责输出概率,交叉熵负责衡量预测与真实分布的差距。
我在一个图像分类项目里用过Softmax。当时有10个类别,模型输出10个概率。训练时发现,如果某个类别样本太少,模型会倾向于不预测那个类别。解决办法是加类别权重,让少数类的损失更大一些。
3.5 知识体系总览
下面这张图总结了逻辑回归与分类的核心逻辑:
3.6 实践中的几个坑
逻辑回归虽然简单,但用起来也有不少门道。分享几个我踩过的坑:
| 问题 | 现象 | 解决办法 |
|---|---|---|
| 特征尺度差异大 | 训练不收敛,权重震荡 | 标准化或归一化特征 |
| 类别不平衡 | 模型总预测多数类 | 调整类别权重或过采样/欠采样 |
| 特征共线性 | 权重不稳定,解释性差 | 加L2正则化或做PCA降维 |
| 学习率太大 | 损失震荡不下降 | 减小学习率或用学习率衰减 |
我的习惯:每次训练逻辑回归,我都会先检查特征的分布。如果某个特征的方差特别大,我会先做标准化。这一步看似简单,但能省去后面很多调试时间。
逻辑回归虽然不如深度学习那么「高大上」,但它可解释性强、训练速度快、在小数据集上表现稳定。很多工业场景里,逻辑回归仍然是baseline的首选。嗯,别小看它。