跳到主要内容机器学习中的逻辑回归 | 极客日志PythonAI算法
机器学习中的逻辑回归
综述由AI生成逻辑回归是用于二分类的机器学习算法,通过 Sigmoid 函数将线性输出映射为 0 到 1 之间的概率。文章阐述了其与线性回归的区别、Sigmoid 函数特性、决策边界、交叉熵损失函数及正则化方法。通过手动计算样本 A 和 B 的预测与梯度更新过程,演示了模型训练原理。最后总结了该算法的优缺点及适用场景。
CloudNative6K 浏览 什么是逻辑回归?
想象一下,你在玩一个游戏:根据一些线索,猜一个人是'猫派'还是'狗派'。机器学习里的逻辑回归(Logistic Regression)就是这样一个'猜分类'的算法。它不是用来预测连续的数字(比如房价),而是用来预测'属于哪一类'的概率,比如'是'或'否'、'spam 邮件'还是'正常邮件'。
它叫'回归',但其实是分类算法,因为它基于线性回归,但加了个'魔法'来处理分类问题。简单说,它先用一条直线拟合数据,然后把结果挤压成 0 到 1 之间的概率。
线性回归 vs 逻辑回归:为什么需要区别?
线性回归就像画一条直线来预测连续值,比如根据房子大小预测价格。但如果用它来分类,比如预测'是否会下雨'(0 或 1),它可能会给出负数或大于 1 的值,这没意义。
逻辑回归解决了这个问题:它用同样的直线,但输出不是直接的数值,而是概率。

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

这张图画的是 Sigmoid(逻辑)函数:
$$\phi(z) = \frac{1}{1+e^{-z}}$$
- 纵轴是 $\phi(z)$(被'压缩'到 0∼1 之间)
- 曲线是典型的 S 型:$z$ 很大时输出接近 1;$z$ 很小时输出接近 0;在 $z=0$ 时刚好 $\phi(0)=0.5$
横轴是 $z$(可以取任意实数,$-\infty \sim +\infty$)
这正是机器学习里 逻辑回归(Logistic Regression) 的核心:把'线性打分'变成'概率'。
1) 逻辑回归在做什么?
逻辑回归用于 二分类(比如:垃圾邮件/非垃圾邮件,违约/不违约)。
它先算一个线性组合:
$$z = w^\top x + b$$
- $x$:特征向量(比如邮箱里'中奖''免费'等词出现次数)
- $w$:权重(每个特征的重要性)
- $b$:偏置(整体阈值)
然后把这个 $z$ 丢进图里的 Sigmoid:
$$p(y=1\mid x) = \phi(z) = \frac{1}{1+e^{-(w^\top x+b)}}$$
于是输出就成了一个概率:
- 接近 1:更像正类 $y=1$
- 接近 0:更像负类 $y=0$
2) 决策边界:为什么图里 $z=0$ 很关键?
因为 $\phi(0)=0.5$。常见分类规则是:
- 若 $p \ge 0.5$ 判为 1
- 若 $p < 0.5$ 判为 0
$$p \ge 0.5 \iff z \ge 0$$
这是一条'直线/平面/超平面'——也就是说逻辑回归本质上学的是 线性可分的边界(在原特征空间里)。
3) 它为什么叫'回归',但在做'分类'?
因为它不是直接输出类别,而是回归一个 概率值 $p(y=1\mid x)$。最后再用阈值把概率切成 0/1。
4) 训练时学什么?用什么损失函数?
目标是让训练数据在'正确类别'上的概率尽量大(最大似然)。等价地,我们最常用 交叉熵损失(log loss):
$$\mathcal{L} = -[y\log p + (1-y)\log(1-p)]$$
- 如果真实 $y=0$,就惩罚 $\log(1-p)$(希望 $p$ 越小越好)
- 如果真实 $y=1$,就惩罚 $\log p$(希望 $p$ 越大越好)
然后用梯度下降或其变体(SGD、Adam 等)去优化 $w, b$。
5) 图里'S 型'还暗示了两个很重要的性质
- 概率压缩:再大的正负数,都被压进 $(0,1)$。适合做概率。
- 饱和:当 $z$ 很大或很小时,曲线变平,梯度会变小——这会让极端自信(接近 0 或 1)的样本对参数更新影响变弱。
6) 正则化:防止'权重太极端'
- L1:$\lambda|w|_1$(会做特征选择,让很多权重变 0)
- L2:$\lambda|w|^2$(更常用,权重更平滑)
7) 多分类怎么办?
二分类用 Sigmoid;多分类常用 Softmax 回归(多项逻辑回归):
$$p(y=k\mid x) = \frac{e^{w_k^\top x}}{\sum_j e^{w_j^\top x}}$$
手动计算示例
我们用一个超小、可手算的逻辑回归例子,把'线性打分 → Sigmoid → 概率 → 分类 → 损失'完整走一遍。
例子设定(二分类:垃圾邮件=1,正常邮件=0)
- $x_1$:邮件里'免费'出现次数
- $x_2$:邮件里'会议'出现次数
$$w = \begin{bmatrix}1.2\-0.7\end{bmatrix},\quad b=-0.3$$
- 线性打分 $z = w^\top x + b$
- Sigmoid 变概率 $p = \sigma(z) = \frac{1}{1+e^{-z}}$
样本 A:$x=[2,1]$('免费'2 次,'会议'1 次)
1) 算 $z$
$$z = 1.2\times2 + (-0.7)\times1 - 0.3 = 2.4 - 0.7 - 0.3 = 1.4$$
2) 算概率 $p=\sigma(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%。
3) 做分类(阈值 0.5)
$$p = 0.802 \ge 0.5 \Rightarrow \hat y = 1$$
顺便算一下'这次预测有多好':交叉熵损失
$$\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$$
样本 B:$x=[0,3]$('免费'0 次,'会议'3 次)
1) 算 $z$
$$z = 1.2\times0 + (-0.7)\times3 - 0.3 = -2.1 - 0.3 = -2.4$$
2) 算概率
$$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%,所以判为正常邮件。
这张图里'$z=0$ 对应 0.5'的意义(决策边界)
因为 $\sigma(0)=0.5$,所以分类阈值 0.5 等价于看 $z$ 的正负:
- $z < 0 \Rightarrow p < 0.5 \Rightarrow$ 判 0
- $z \ge 0 \Rightarrow p \ge 0.5 \Rightarrow$ 判 1
$$1.2x_1 - 0.7x_2 - 0.3 = 0$$
这是一条直线(高维里是超平面),逻辑回归本质学到的就是这条线/面。
训练过程演示(SGD & Mini-batch)
我们把 样本 A、B 放在一起做一次 mini-batch(batch size=2),用'平均梯度'更新一次参数。
继续沿用我们前面的设定:
初始,学习率 $\eta=0.1$
样本 A 标签 $y_A=1$,样本 B 标签 $y_B=0$
1) 关键结论:逻辑回归的梯度特别简单
$$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)$ 可以理解成:'预测概率 - 真实标签'
- 如果 $y=1$ 但 $p<1$,则 $p-y<0$:更新会让 $z$ 变大(把概率推向 1)
- 如果 $y=0$ 但 $p>0$,则 $p-y>0$:更新会让 $z$ 变小(把概率压向 0)
2) 对样本 A 做一次 SGD(假设真实是垃圾邮件 $y=1$)
样本 A:$x=[2,1]$
我们之前算过:$z=1.4$,$p=\sigma(1.4)\approx 0.802184$
(1) 误差项
$$p-y = 0.802184 - 1 = -0.197816$$
(2) 梯度
$$\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$$
(3) 用学习率 $\eta=0.1$ 更新(SGD)
$$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。
3) 对样本 B 做一次 SGD(假设真实是正常邮件 $y=0$)
样本 B:$x=[0,3]$
我们算过:$z=-2.4$,$p=\sigma(-2.4)\approx 0.083173$
(1) 误差项
$$p-y = 0.083173 - 0 = 0.083173$$
(2) 梯度
$$\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$$
(3) 学习率 $\eta=0.1$ 更新(从原始参数出发演示)
从 $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。
4) mini-batch:求平均梯度
$$g_w = \frac{g_w^{(A)} + g_w^{(B)}}{2},\quad g_b = \frac{g_b^{(A)} + g_b^{(B)}}{2}$$
平均的 $g_w$
$$\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$
$$g_b = \frac{-0.197816 + 0.083173}{2} = \frac{-0.114643}{2} = -0.0573215$$
5) 用平均梯度更新一次参数
$$w \leftarrow w - \eta g_w,\qquad b \leftarrow b - \eta g_b$$
$$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$$
6) (可选验证)更新后概率有没有'往对的方向走'?
样本 A(希望更接近 1)
$$z_A' = 1.2197816\times2 + (-0.70258515)\times1 - 0.29426785 = 1.4427102$$
$z$ 从 1.4 增到约 1.4427,所以 $p_A'$ 会从 0.802 稍微上升到大约 0.809(更像 1 ✅)
样本 B(希望更接近 0)
$$z_B' = (-0.70258515)\times3 - 0.29426785 = -2.4020233$$
$z$ 从 -2.4 变得更负一点点,所以 $p_B'$ 会从 0.08317 稍微下降(更像 0 ✅)
直观理解
1. 整体原理:像一个天气预报 App
想象逻辑回归是一个智能天气 App。它不会简单说'今天下雨'或'不下雨',而是根据风速、湿度、气压等线索,给你一个概率,比如'下雨概率 70%'。如果你设个阈值(比如 50% 以上就带伞),它就帮你决定行动。这比线性回归(像直接预测雨量多少)更适合分类,因为概率总在 0-100% 之间,不会乱来。
2. Sigmoid 函数:像一个懒洋洋的开关灯
Sigmoid 是逻辑回归的'心脏',它把原始计算结果(一个无限的数字)转化成 0-1 的概率。比喻成一个懒开关:当输入小(负数大)时,灯几乎不亮(概率近 0);输入中等时,灯慢慢亮起(概率 0.5 左右);输入大时,灯全亮(概率近 1)。不像普通开关'啪'一下,它是渐变的,不会突然跳跃。这让预测更平滑,像现实中事情的'可能性'过渡。
3. 决策边界:像球场上的中场线
在数据空间里,逻辑回归画一条'边界线',一边是 A 类(概率>0.5),一边是 B 类。比喻成足球场的中场线:根据球员位置、速度等,判断球是进攻还是防守区。如果数据点'越界',概率就翻转。这条线是线性的,但如果数据乱七八糟,可以想象成弯曲的草坪边缘(不过标准逻辑回归假设它直)。
4. 损失函数和训练:像打高尔夫找洞
训练逻辑回归就是最小化'损失'——错得多惨。交叉熵损失像高尔夫分数:如果预测'肯定不下雨'(概率 0.01)但实际下大雨,罚分超高(因为你太自信错了);预测准,就低分。训练过程用梯度下降,像推高尔夫球下坡:从随机起点开始,计算最陡方向,一推一推,直到球进洞(损失最小)。如果坡太陡,可能卡在小坑(局部最小),但通常够用。
另一个比喻:像调吉他弦。开始音调乱(随机权重),弹错音(高损失),慢慢拧紧(更新参数),直到和弦完美。
5. 优点与局限:像一把瑞士军刀
逻辑回归像瑞士军刀:小巧、多功能、易用(解释每个特征的影响,像刀刃的用途),适合二分类如'邮件是垃圾吗'。但它不万能——如果数据像迷宫(非线性),它就力不从心,得换更高级的'工具箱'如神经网络。优点是快如闪电,局限是假设世界太'直线'。
总结:逻辑回归的优点和局限
优点:简单、快、解释性强(能看到每个特征的影响)。
局限:假设数据线性可分;多分类需扩展(比如 One-vs-Rest)。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online