什么是逻辑回归?
想象一下,你在玩一个游戏:根据一些线索,猜一个人是'猫派'还是'狗派'。机器学习里的逻辑回归(Logistic Regression)就是这样一个'猜分类'的算法。它不是用来预测连续的数字(比如房价),而是用来预测'属于哪一类'的概率,比如'是'或'否'、'spam 邮件'还是'正常邮件'。
逻辑回归是用于二分类的机器学习算法,通过 Sigmoid 函数将线性输出映射为 0 到 1 之间的概率。文章阐述了其与线性回归的区别、Sigmoid 函数特性、决策边界、交叉熵损失函数及正则化方法。通过手动计算样本 A 和 B 的预测与梯度更新过程,演示了模型训练原理。最后总结了该算法的优缺点及适用场景。

想象一下,你在玩一个游戏:根据一些线索,猜一个人是'猫派'还是'狗派'。机器学习里的逻辑回归(Logistic Regression)就是这样一个'猜分类'的算法。它不是用来预测连续的数字(比如房价),而是用来预测'属于哪一类'的概率,比如'是'或'否'、'spam 邮件'还是'正常邮件'。
它叫'回归',但其实是分类算法,因为它基于线性回归,但加了个'魔法'来处理分类问题。简单说,它先用一条直线拟合数据,然后把结果挤压成 0 到 1 之间的概率。
线性回归就像画一条直线来预测连续值,比如根据房子大小预测价格。但如果用它来分类,比如预测'是否会下雨'(0 或 1),它可能会给出负数或大于 1 的值,这没意义。
逻辑回归解决了这个问题:它用同样的直线,但输出不是直接的数值,而是概率。

如上图所示,线性回归的线可以无限延伸,而逻辑回归的输出被限制在 0 和 1 之间,看起来像一条 S 形的曲线。
逻辑回归的秘密武器是 Sigmoid 函数。它把线性方程的输出(叫 $z = w^\top x + b$,其中 $w$ 是权重,$x$ 是特征,$b$ 是偏置)转化成概率。
公式如下:
$$\phi(z) = \frac{1}{1 + e^{-z}}$$
这就像一个'挤压机',把无限的直线输出挤成 0-1 的概率曲线。

这张图画的是 Sigmoid(逻辑)函数:
$$\phi(z) = \frac{1}{1+e^{-z}}$$
横轴是 $z$(可以取任意实数,$-\infty \sim +\infty$)
这正是机器学习里 逻辑回归(Logistic Regression) 的核心:把'线性打分'变成'概率'。
逻辑回归用于 二分类(比如:垃圾邮件/非垃圾邮件,违约/不违约)。
它先算一个线性组合:
$$z = w^\top x + b$$
然后把这个 $z$ 丢进图里的 Sigmoid:
$$p(y=1\mid x) = \phi(z) = \frac{1}{1+e^{-(w^\top x+b)}}$$
于是输出就成了一个概率:
因为 $\phi(0)=0.5$。常见分类规则是:
而
$$p \ge 0.5 \iff z \ge 0$$
所以逻辑回归的 决策边界 就是:
$$w^\top x + b = 0$$
这是一条'直线/平面/超平面'——也就是说逻辑回归本质上学的是 线性可分的边界(在原特征空间里)。
因为它不是直接输出类别,而是回归一个 概率值 $p(y=1\mid x)$。最后再用阈值把概率切成 0/1。
目标是让训练数据在'正确类别'上的概率尽量大(最大似然)。等价地,我们最常用 交叉熵损失(log loss):
$$\mathcal{L} = -[y\log p + (1-y)\log(1-p)]$$
然后用梯度下降或其变体(SGD、Adam 等)去优化 $w, b$。
实际训练常加正则化:
二分类用 Sigmoid;多分类常用 Softmax 回归(多项逻辑回归):
$$p(y=k\mid x) = \frac{e^{w_k^\top x}}{\sum_j e^{w_j^\top x}}$$
我们用一个超小、可手算的逻辑回归例子,把'线性打分 → Sigmoid → 概率 → 分类 → 损失'完整走一遍。
假设我们只用两个特征:
模型参数(随便举一组):
$$w = \begin{bmatrix}1.2\-0.7\end{bmatrix},\quad b=-0.3$$
逻辑回归做两步:
$$z = 1.2\times2 + (-0.7)\times1 - 0.3 = 2.4 - 0.7 - 0.3 = 1.4$$
$$p = \frac{1}{1+e^{-1.4}}$$
用近似:
$$e^{-1.4} \approx 0.2466$$
$$p \approx \frac{1}{1+0.2466} = 0.802$$
解释:模型认为'是垃圾邮件'的概率约 80.2%。
$$p = 0.802 \ge 0.5 \Rightarrow \hat y = 1$$
(判为垃圾邮件)
交叉熵(log loss):
$$\mathcal{L} = -[y\log p + (1-y)\log(1-p)]$$
$$\mathcal{L} = -\log(0.802) \approx 0.221$$
(损失小,说明预测不错)
$$\mathcal{L} = -\log(1-0.802) = -\log(0.198) \approx 1.62$$
(损失大,说明'把正常邮件当垃圾'会被狠狠惩罚)
$$z = 1.2\times0 + (-0.7)\times3 - 0.3 = -2.1 - 0.3 = -2.4$$
$$p = \sigma(-2.4) = \frac{1}{1+e^{2.4}}$$
$$e^{2.4} \approx 11.02$$
$$p \approx \frac{1}{1+11.02} = 0.083$$
解释:是垃圾邮件概率 8.3%,所以判为正常邮件。
因为 $\sigma(0)=0.5$,所以分类阈值 0.5 等价于看 $z$ 的正负:
本例的边界就是:
$$1.2x_1 - 0.7x_2 - 0.3 = 0$$
这是一条直线(高维里是超平面),逻辑回归本质学到的就是这条线/面。
我们把 样本 A、B 放在一起做一次 mini-batch(batch size=2),用'平均梯度'更新一次参数。
继续沿用我们前面的设定: 初始,学习率 $\eta=0.1$ 样本 A 标签 $y_A=1$,样本 B 标签 $y_B=0$
对单个样本 $(x,y)$:
$$p = \sigma(z)$$ $$z = w^\top x + b$$
交叉熵损失对参数的梯度是:
$$\frac{\partial \mathcal L}{\partial w} = (p-y),x,\qquad \frac{\partial \mathcal L}{\partial b} = (p-y)$$
这里的 $(p-y)$ 可以理解成:'预测概率 - 真实标签'
样本 A:$x=[2,1]$
我们之前算过:$z=1.4$,$p=\sigma(1.4)\approx 0.802184$
$$p-y = 0.802184 - 1 = -0.197816$$
$$\frac{\partial \mathcal L}{\partial w} = (p-y)x = -0.197816 \cdot [2,1] = [-0.395632, -0.197816]$$
$$\frac{\partial \mathcal L}{\partial b} = p-y = -0.197816$$
初始参数:
$$w=[1.2,-0.7],\quad b=-0.3$$
$$w \leftarrow w - \eta \frac{\partial \mathcal L}{\partial w},\quad b \leftarrow b - \eta \frac{\partial \mathcal L}{\partial b}$$
逐项算:
$$b = -0.3 - 0.1 \times (-0.197816) = -0.2802184$$
$$w_2 = -0.7 - 0.1 \times (-0.197816) = -0.6802184$$
$$w_1 = 1.2 - 0.1 \times (-0.395632) = 1.2395632$$
直觉解释:真实是 1,但模型只给了 0.80,还不够自信,所以更新把 $w_1$ 提高、把 $w_2$ 变得'没那么负'、把 $b$ 往上推——目的都是让这个样本的 $z$ 更大,从而 $p$ 更接近 1。
样本 B:$x=[0,3]$
我们算过:$z=-2.4$,$p=\sigma(-2.4)\approx 0.083173$
$$p-y = 0.083173 - 0 = 0.083173$$
$$\frac{\partial \mathcal L}{\partial w} = (p-y)x = 0.083173 \cdot [0,3] = [0, 0.249519]$$
$$\frac{\partial \mathcal L}{\partial b} = 0.083173$$
从 $w=[1.2,-0.7],\quad b=-0.3$:
$$b = -0.3 - 0.1 \times 0.083173 = -0.3083173$$
$$w_2 = -0.7 - 0.1 \times 0.249519 = -0.7249519$$
$$w_1 = 1.2 - 0.1 \times 0 = 1.2$$
直觉解释:真实是 0,但模型给了 0.083(还不够接近 0),所以更新会让 $z$ 更负:把 $w_2$ 更往负方向推、把 $b$ 也往下拉,让这个样本的概率更贴近 0。
$$g_w = \frac{g_w^{(A)} + g_w^{(B)}}{2},\quad g_b = \frac{g_b^{(A)} + g_b^{(B)}}{2}$$
第二维:
$$\frac{-0.197816 + 0.249519}{2} = \frac{0.051703}{2} = 0.0258515$$
第一维:
$$\frac{-0.395632 + 0}{2} = -0.197816$$
所以:
$$g_w = [-0.197816, 0.0258515]$$
$$g_b = \frac{-0.197816 + 0.083173}{2} = \frac{-0.114643}{2} = -0.0573215$$
$$w \leftarrow w - \eta g_w,\qquad b \leftarrow b - \eta g_b$$
带入 $\eta=0.1$:
$$b = -0.3 - 0.1(-0.0573215) = -0.29426785$$
$$w_2 = -0.7 - 0.1(0.0258515) = -0.70258515$$
$$w_1 = 1.2 - 0.1(-0.197816) = 1.2197816$$
更新后:
$$w' = [1.2197816, -0.70258515],\quad b' = -0.29426785$$
$$z_A' = 1.2197816\times2 + (-0.70258515)\times1 - 0.29426785 = 1.4427102$$
$z$ 从 1.4 增到约 1.4427,所以 $p_A'$ 会从 0.802 稍微上升到大约 0.809(更像 1 ✅)
$$z_B' = (-0.70258515)\times3 - 0.29426785 = -2.4020233$$
$z$ 从 -2.4 变得更负一点点,所以 $p_B'$ 会从 0.08317 稍微下降(更像 0 ✅)
想象逻辑回归是一个智能天气 App。它不会简单说'今天下雨'或'不下雨',而是根据风速、湿度、气压等线索,给你一个概率,比如'下雨概率 70%'。如果你设个阈值(比如 50% 以上就带伞),它就帮你决定行动。这比线性回归(像直接预测雨量多少)更适合分类,因为概率总在 0-100% 之间,不会乱来。
Sigmoid 是逻辑回归的'心脏',它把原始计算结果(一个无限的数字)转化成 0-1 的概率。比喻成一个懒开关:当输入小(负数大)时,灯几乎不亮(概率近 0);输入中等时,灯慢慢亮起(概率 0.5 左右);输入大时,灯全亮(概率近 1)。不像普通开关'啪'一下,它是渐变的,不会突然跳跃。这让预测更平滑,像现实中事情的'可能性'过渡。
在数据空间里,逻辑回归画一条'边界线',一边是 A 类(概率>0.5),一边是 B 类。比喻成足球场的中场线:根据球员位置、速度等,判断球是进攻还是防守区。如果数据点'越界',概率就翻转。这条线是线性的,但如果数据乱七八糟,可以想象成弯曲的草坪边缘(不过标准逻辑回归假设它直)。
训练逻辑回归就是最小化'损失'——错得多惨。交叉熵损失像高尔夫分数:如果预测'肯定不下雨'(概率 0.01)但实际下大雨,罚分超高(因为你太自信错了);预测准,就低分。训练过程用梯度下降,像推高尔夫球下坡:从随机起点开始,计算最陡方向,一推一推,直到球进洞(损失最小)。如果坡太陡,可能卡在小坑(局部最小),但通常够用。
另一个比喻:像调吉他弦。开始音调乱(随机权重),弹错音(高损失),慢慢拧紧(更新参数),直到和弦完美。
逻辑回归像瑞士军刀:小巧、多功能、易用(解释每个特征的影响,像刀刃的用途),适合二分类如'邮件是垃圾吗'。但它不万能——如果数据像迷宫(非线性),它就力不从心,得换更高级的'工具箱'如神经网络。优点是快如闪电,局限是假设世界太'直线'。
优点:简单、快、解释性强(能看到每个特征的影响)。
局限:假设数据线性可分;多分类需扩展(比如 One-vs-Rest)。
用在哪? 信用卡欺诈检测、医疗诊断等二分类问题。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online