参数设置
数据由指定种子的LCG确定性生成(每类30个点,共60个点,σ=1.2)。梯度下降使用全批量更新。
散点图·决策边界·概率等值线
上方=散点图·决策边界(绿线 p=0.5)·概率等值线(p=0.3, 0.5, 0.7)/下方=S形函数 σ(z) 与 p=0.5 阈值。随着梯度下降推进,边界移动、曲线变陡、损失下降。
理论·主要公式
逻辑回归是一种线性分类器,将线性评分 $z = \mathbf{w}\cdot\mathbf{x} + b$ 通过S形函数转换为概率,用交叉熵损失通过梯度下降法最小化。
S形函数对预测概率的定义:
$$p(y=1 \mid \mathbf{x}) = \sigma(z) = \frac{1}{1 + e^{-z}}$$
交叉熵损失(n为样本数,$y_i \in \{0,1\}$):
$$L = -\frac{1}{n}\sum_{i=1}^{n}\bigl[y_i \log p_i + (1 - y_i)\log(1 - p_i)\bigr]$$
梯度与权重更新(包含L2正则化 λ):
$$\frac{\partial L}{\partial \mathbf{w}} = \frac{1}{n}\mathbf{X}^{\top}(\mathbf{p}-\mathbf{y}) + \lambda\mathbf{w}, \quad \mathbf{w} \leftarrow \mathbf{w} - \eta\frac{\partial L}{\partial \mathbf{w}}$$
决策边界(p=0.5的等值线)是 $\mathbf{w}\cdot\mathbf{x}+b=0$,即 $w_1 x_1 + w_2 x_2 + b = 0$ 的直线。
逻辑回归模拟器简介
🙋
听说逻辑「回归」用来做2类分类。它是回归还是分类呀?我有点搞不明白…
🎓
这是很多初学者都会犯的误区。简单说,逻辑回归「回归」的是「属于第1类的概率」这个连续值。线性评分 $z = w \cdot x + b$ 通过S形函数 $\sigma(z)$ 转换成0~1之间的概率,再用0.5作为阈值分开两个类。上面的模拟器里,红蓝两点中间的绿线就是决策边界——也就是p=0.5的地方。
🎓
这就是「概率等值线」。S形函数 $\sigma(z) = 1/(1+e^{-z})$ 把线性评分 $z$ 转换为0~1的概率。虚线标出的红边p=0.3和蓝边p=0.7。靠近绿线中心的地方,颜色变浅说明「预测的自信度低」。你可以仔细观察中间那条带状区域。
🙋
我把「学习率」降到0.001,边界线就没有动了。
🎓
学习率(η)决定梯度下降的步长。太小的话,即使跑500次迭代也跑不到最优值,权重基本停留在0。反过来,η=1.0这样太大的值会造成一步迈得太大,跳过最优值然后来回摇晃。实务中通常从0.01~0.1开始试,边看损失值边调。用模拟器的「最终交叉熵损失」那个卡片,就能找到最合适的学习率。
🙋
「L2正则化 λ」从0调到1.0时,权重 w₁ 变得很小,边界也变平缓了。
🎓
观察得很好!L2正则化在损失函数里加上 $\lambda\|\mathbf{w}\|^2$ 这个罚项,用来「约束权重不要太大」。当数据是线性可分的,S形函数会想办法把权重放得特别大来输出「非常自信的」预测,这反而会造成过度拟合。用λ来制约,你的模型反而能对未知数据表现得更好。在实务中,为了降低训练精度来换取更好的测试精度,通常会加强λ。
常见问题
用Softmax函数 $\sigma(z_k) = e^{z_k}/\sum_j e^{z_j}$ 取代S形函数,为每个类准备权重向量 $\mathbf{w}_k$。这种方法叫「Softmax回归」或「多项逻辑回归」。损失函数变成多类交叉熵,梯度形式和二元版本差不多。scikit-learn的 LogisticRegression(multi_class='multinomial') 一行代码就可以实现。
L2正则化($\lambda\sum w_i^2$)是平顺地缩小权重,得到光滑模型。L1正则化($\lambda\sum|w_i|$)能把无用权重变成恰好为0的「稀疏」状态,兼具特征选择的功能。实务里通常默认用L2,要进行特征选择的时候才用L1或Elastic Net(L1+L2的组合)。本模拟器只实现了L2。
逻辑回归本身只能用直线分开,遇到圆形或异或的分布就无能为力了。解决办法有两个:(1) 给输入加多项式特征 $x_1^2, x_2^2, x_1 x_2$ 等,进行「特征工程」,(2) 用更强表达力的模型,比如神经网络、支持向量机、梯度提升等。本模拟器的数据设计成线性可分的,用默认参数就能跑出95%以上的精度。
本模拟器用的是批量梯度下降:每次用全部数据算一遍梯度。这样比较稳定但数据量大时速度慢。SGD是每个样本(或小批次)就算一次梯度、更新一次权重,计算快但噪声大,有利于逃离局部最优。大规模数据的实务中通常用小批量SGD,是两者的折中。
实际应用
医疗诊断辅助:从患者的检查值(血压、血糖、年龄等)预测患病概率或治疗反应,这是很常见的应用。线性模型的好处是系数 $w_i$ 直接反映「哪个特征有多大影响」,医生容易理解。医学统计教科书里,逻辑回归系数的比值解释一直是必教内容。
营销和信用评估:预测客户是否购买商品、申请人是否会逾期等,这是逻辑回归的经典应用场景。虽然更复杂的模型精度有时更高,但金融、保险等受管制行业非常看重「可解释性」,到现在逻辑回归仍然是首选。信用评分卡就是直接从逻辑回归系数生成的。
广告点击率预测(CTR):互联网广告的点击预测中,特征可能高达几亿维,但L1正则化的逻辑回归一直是行业的可扩展方案。Google、Facebook等大公司的早期广告系统就用分布式的逻辑回归。
机器学习的基准:数据科学家做新任务时,第一步往往是「用逻辑回归刷个基准精度」。简单模型意外地能达到不错的效果,这很常见。所以在上更复杂的模型前,逻辑回归基准必须跑一遍,这是业界规范。本模拟器就是为了让你看清楚这个「基准模型」的工作原理。
常见误区和注意点
最常见的误解是「逻辑回归是线性回归的变种,太简单,不值一提」。实际上,S形函数加上交叉熵损失的组合,数学上等价于神经网络的一层。在深度学习出现之前,逻辑回归就是「最可信赖的线性分类器」,迄今为止,如果特征工程做得好,逻辑回归的效果往往能和复杂模型平分秋色。在模拟器里调好η和λ,你会看到训练精度冲到95%以上——「简单≠弱」的活生生例证。
另一个常见陷阱是「训练精度高就是好模型」。本模拟器显示的是对训练数据的精度,只说明你对「学过的数据」记得有多牢,不代表真实性能。真正重要的是「对陌生数据的预测精度」,也就是泛化能力。训练精度只看的话,容易陷入过度拟合。加强L2正则化λ会让训练精度下降,反而能改善泛化。实务中必须把数据分成训练/验证/测试三部分,分别看三个精度,这是业界标准。
最后一个陷阱是「跑梯度下降就一定能收敛到最优解」。逻辑回归的损失函数数学上是凸的,理论上肯定能收敛到全局最优。但实际上,学习率η太大会造成振荡发散,太小则500次迭代也收不动。在模拟器里试试η=0.001和η=1.0,看「权重w₁」和「损失」卡片的行为,你就能体会这个细节。实务中通常用学习率衰减(逐步降低η)或者Adam、RMSProp这样的自适应优化器。
具体计算示例
假设样本200个(第0/1类各100个,特征x₁∈[-3,3]、x₂∈[-3,3]),学习率η=0.1、迭代500次、λ=0.01的情况。初始权重w₁=0.5、w₂=-0.3、偏置b=0开始,计算梯度∇L=(∂L/∂w₁, ∂L/∂w₂),经过50次迭代后交叉熵损失从0.65降到0.42,150次后降到0.38,500次后收敛到0.35。最终训练精度达到87.5%,权重更新为w₁=1.2、w₂=0.9、偏置b=0.15。决策边界成为w₁x₁+w₂x₂+b=0的直线,正则化系数越大,边界斜率越平缓。