跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

机器学习中的逻辑回归

逻辑回归是用于二分类的机器学习算法,通过 Sigmoid 函数将线性输出映射为 0 到 1 之间的概率。文章阐述了其与线性回归的区别、Sigmoid 函数特性、决策边界、交叉熵损失函数及正则化方法。通过手动计算样本 A 和 B 的预测与梯度更新过程,演示了模型训练原理。最后总结了该算法的优缺点及适用场景。

CloudNative发布于 2026/2/8更新于 2026/10/236.1K 浏览
机器学习中的逻辑回归

什么是逻辑回归?

想象一下,你在玩一个游戏:根据一些线索,猜一个人是'猫派'还是'狗派'。机器学习里的逻辑回归(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 函数曲线

这张图画的是 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$$

所以逻辑回归的 决策边界 就是:

$$w^\top x + b = 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 型'还暗示了两个很重要的性质

  1. 概率压缩:再大的正负数,都被压进 $(0,1)$。适合做概率。
  2. 饱和:当 $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$$

逻辑回归做两步:

  1. 线性打分 $z = w^\top x + b$
  2. 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$$

(判为垃圾邮件)

顺便算一下'这次预测有多好':交叉熵损失

交叉熵(log loss):

$$\mathcal{L} = -[y\log p + (1-y)\log(1-p)]$$

  • 如果真实 $y=1$:

$$\mathcal{L} = -\log(0.802) \approx 0.221$$

(损失小,说明预测不错)

  • 如果真实 $y=0$:

$$\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) 关键结论:逻辑回归的梯度特别简单

对单个样本 $(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)$ 可以理解成:'预测概率 - 真实标签'

  • 如果 $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$$

带入 $\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$$

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)。

用在哪? 信用卡欺诈检测、医疗诊断等二分类问题。

目录

  1. 什么是逻辑回归?
  2. 线性回归 vs 逻辑回归:为什么需要区别?
  3. Sigmoid 函数:逻辑回归的核心“魔法”
  4. 1) 逻辑回归在做什么?
  5. 2) 决策边界:为什么图里 $z=0$ 很关键?
  6. 3) 它为什么叫“回归”,但在做“分类”?
  7. 4) 训练时学什么?用什么损失函数?
  8. 5) 图里“S 型”还暗示了两个很重要的性质
  9. 6) 正则化:防止“权重太极端”
  10. 7) 多分类怎么办?
  11. 手动计算示例
  12. 例子设定(二分类:垃圾邮件=1,正常邮件=0)
  13. 样本 A:$x=[2,1]$(“免费”2 次,“会议”1 次)
  14. 1) 算 $z$
  15. 2) 算概率 $p=\sigma(1.4)$
  16. 3) 做分类(阈值 0.5)
  17. 顺便算一下“这次预测有多好”:交叉熵损失
  18. 样本 B:$x=[0,3]$(“免费”0 次,“会议”3 次)
  19. 1) 算 $z$
  20. 2) 算概率
  21. 这张图里“$z=0$ 对应 0.5”的意义(决策边界)
  22. 训练过程演示(SGD & Mini-batch)
  23. 1) 关键结论:逻辑回归的梯度特别简单
  24. 2) 对样本 A 做一次 SGD(假设真实是垃圾邮件 $y=1$)
  25. (1) 误差项
  26. (2) 梯度
  27. (3) 用学习率 $\eta=0.1$ 更新(SGD)
  28. 3) 对样本 B 做一次 SGD(假设真实是正常邮件 $y=0$)
  29. (1) 误差项
  30. (2) 梯度
  31. (3) 学习率 $\eta=0.1$ 更新(从原始参数出发演示)
  32. 4) mini-batch:求平均梯度
  33. 平均的 $g_w$
  34. 平均的 $g_b$
  35. 5) 用平均梯度更新一次参数
  36. 6) (可选验证)更新后概率有没有“往对的方向走”?
  37. 样本 A(希望更接近 1)
  38. 样本 B(希望更接近 0)
  39. 直观理解
  40. 1. 整体原理:像一个天气预报 App
  41. 2. Sigmoid 函数:像一个懒洋洋的开关灯
  42. 3. 决策边界:像球场上的中场线
  43. 4. 损失函数和训练:像打高尔夫找洞
  44. 5. 优点与局限:像一把瑞士军刀
  45. 总结:逻辑回归的优点和局限

更多推荐文章

查看全部
  • 算法修炼:模幂、构造、背包、贪心、剪枝、堆维护六题精析
  • Python 异步编程与协程实战指南
  • OpenDroneMap 无人机图像处理与地图生成指南
  • Java结构体实战:歌唱比赛评分与旗鼓相当对手匹配
  • 基于 LangChain 实现数据库问答机器人
  • 资深程序员分享的 20 条 Python 编程与学习经验
  • C++ 面向对象编程:深入解析继承机制
  • Page-Agent:一行 JS 代码实现大模型前端 DOM 操作
  • Java 部署:Jenkins Pipeline 自动化构建 Java 项目
  • 算法实战:Z 字形变换与外观数列模拟解法
  • 5 种常见运维场景的 Python 脚本实现
  • 上海交大《动手学大模型应用开发》入门指南
  • 2024 年中国 AI 大模型盘点:技术前沿与应用展望
  • Go 语言高性能 HTTP 库 fasthttp 使用指南
  • AI 赋能原则 3 解读:可得性时代重写人类能力结构
  • Spring Security 认证授权机制与实战配置
  • 数据结构:选择排序原理与 Java 代码实现
  • Edict:基于三省六部制的 AI Agent 协作架构解析
  • Android 核心源码与 Framework 精编解析指南
  • DeepSeek 中冷启动数据与多阶段训练的作用解析

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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