Skip to content

逻辑与集合论基础

之前的章节我们介绍了代数、函数、几何,都是在"数"和"图形"上做文章。

本章节我们要处理更底层的东西:怎么描述"条件"(逻辑)、怎么描述"一堆东西的集合"(集合论)。

机器学习里几乎所有涉及"概率""不确定性"的内容,底层语言都是集合论;所有涉及"条件判断""算法流程"的内容,底层语言都是逻辑。


基本逻辑运算:与、或、非、蕴含

逻辑与(AND,符号 ∧)

为真,当且仅当 p 和 q 都为真

直觉:两个条件必须同时满足,少一个都不行--就像"必须同时下雨并且没带伞,才会淋湿"。

逻辑或(OR,符号 ∨)

为真,只要 p 和 q 至少有一个为真

数学里的"或"是"可兼或":两个都为真时,整体也是真。它不是日常口语里"二选一"的意思。

逻辑非(NOT,符号 ¬)

就是把 p 的真假值反过来:p 为真时 为假,p 为假时 为真。

逻辑蕴含(IMPLIES,符号 ⇒)

读作"如果 p,那么 q",它是最容易反直觉的一个:

p(前件)q(后件)说明
正常情况
唯一为假的情况:"前真后假"
前件为假,整体算真
前件为假,整体算真

最反直觉的两行:当 p 为假时,无论 q 是什么, 都被判定为

一个帮助理解的例子:"如果明天下雨(p),我就带伞(q)"。

如果明天没有下雨(p 为假),那么无论你带没带伞,都不能说这句话是"假的"--它根本没有对"不下雨"的情况做出任何承诺。

逻辑等价(IFF,符号 ⇔)

读作"p 当且仅当 q",表示 p 和 q 的真假值永远一致(要么同真,要么同假)。

点击下面的开关,亲手"点亮"每一种组合,观察四种运算的结果。

交互演示:逻辑运算真值开关

点击 p、q 两个开关切换真假,下方四张卡片实时显示各逻辑运算的结果。重点观察 p 为假时,p ⇒ q 永远为真。

p

q

p ∧ q

p ∨ q

¬p

p ⇒ q

试着把 p 关成"假"、q 保持"真"--p ⇒ q 依然是"真",这就是蕴含最反直觉的地方。

为什么这些符号对 AI 重要

阅读算法伪代码、模型训练的条件判断(比如"提前停止"的触发条件)时,都是逻辑表达式的组合。

决策树模型本质上就是一层层的"如果……那么……"(蕴含)判断组成的。

概率论的很多定理,在证明过程中大量使用逻辑运算来描述事件之间的关系。

实例

python

# 用 Python 的布尔运算打印完整真值表

# 注意:Python 里没有 "蕴含" 运算符,p ⇒ q 等价于 (not p) or q

print('p      q      p∧q    p∨q    ¬p     p⇒q')

for p in [True, False]:

    for q in [True, False]:

        implies = (not p) or q     # 蕴含:唯一为假的情况是 "p 真且 q 假"

        print(p, q, p and q, p or q, not p, implies)

执行以上代码输出结果为:

python
p      q      p∧q    p∨q    ¬p     p⇒q
True True True True False True
True False False True False False
False True False True True True
False False False False True True

第二行就是那个唯一的"假":p 真、q 假,蕴含不成立。

练习:p = "今天是周末"为假,q = "我要上班"为真。请判断 的真假。

点击查看答案

p 为假,根据真值表,无论 q 是什么, 都为真。


集合的概念:交集、并集、子集

集合是什么

集合就是"一堆确定的东西"的整体,比如 表示包含 1、2、3 三个元素的集合。

符号含义示例
x 是集合 A 的元素(属于)
x 不是集合 A 的元素
空集,不包含任何元素
全集,讨论范围内"所有东西"掷骰子的所有可能结果

子集

如果集合 A 中的每一个元素都同时是集合 B 的元素,就说 A 是 B 的子集,记作 。

例如 ,则 。

并集、交集、差集、补集

设 :

运算符号含义结果
并集A 和 B 的元素合在一起(重复只算一次)
交集既在 A 又在 B 里的元素
差集属于 A 但不属于 B
补集全集 U 中不属于 A 的部分,即取决于 U

集合运算与逻辑运算的对应关系

集合论和逻辑运算其实是"同一件事的两种语言":

集合语言逻辑语言

这也是为什么这两节放在同一章:它们是同一套底层逻辑的两种表达方式。

点击按钮切换集合运算,看 Venn 图中被点亮的区域。

交互演示:Venn 图与集合运算

设 U = {1..10},A = {1,2,3,4,5},B = {4,5,6,7}。点击按钮切换运算,橙色区域是被选中的结果。

U A B

实例

python

# Python 的集合运算:与数学符号一一对应

A = {1, 2, 3, 4, 5}

B = {4, 5, 6, 7}

U = set(range(1, 11))     # 全集 {1, 2, ..., 10}

print(A | B)      # 并集 A ∪ B

print(A & B)      # 交集 A ∩ B

print(A - B)      # 差集 A \ B

print(A ^ B)      # 对称差 A △ B(只在其中一个集合里的元素)

print(U - A)      # 补集 Ā = U \ A

执行以上代码输出结果为:

python
{1, 2, 3, 4, 5, 6, 7}
{4, 5}
{1, 2, 3}
{1, 2, 3, 6, 7}
{6, 7, 8, 9, 10}

练习:,(在 1~12 范围内)。求 和 。

点击查看答案


为什么概率论建立在集合论之上

事件就是集合

概率论里的"事件",本质上就是一个集合:所有满足某个条件的"可能结果"的集合。

比如掷一枚骰子,"掷出偶数"这个事件对应的集合就是 。

概率运算直接对应集合运算

概率语言集合语言含义
A 或 B 发生事件 A、B 至少一个发生
A 且 B 都发生事件 A、B 同时发生
A 不发生A 的补集
A、B 互斥两个事件不可能同时发生

加法公式:容斥原理

这个公式的几何直觉:两个圆圈重叠部分被算了两次,要减掉一次。

用 Venn 图(集合的图形化表示)可以非常直观地看到这一点。

条件概率

读作"在 B 已经发生的条件下,A 发生的概率"。

直觉:一旦知道 B 发生了,讨论问题的"全集"就从原来的 U 缩小到了 B。

这时候 A 发生的概率,自然就是"A 和 B 的交集"占"新全集 B"的比例。

贝叶斯定理的雏形

条件概率还可以反过来写:

整理一下,就得到贝叶斯定理的核心式:

它是很多机器学习模型(如朴素贝叶斯分类器)的理论基础,推导起点正是"条件概率是集合交集占比"这个朴素的集合直觉。

经典的疾病检测问题最能体现贝叶斯的威力:检测"准确率 95%"不等于"检测阳性后患病概率 95%"。拖动滑块亲手算一算。

交互演示:贝叶斯定理与疾病检测

100 个圆点代表 100 个人。调整患病率、检测灵敏度、误报率,观察"检测阳性后真正患病"的比例如何变化。

患病率 P(A)10% 灵敏度 P(B|A)90% 误报率 P(B|¬A)9%

患病且阳性 患病但漏检 健康但误报阳性 健康且阴性

试试把患病率拉到 1%:即使检测灵敏度高达 90%,阳性中真正患病的人也可能不到两成--大量误报淹没了真阳性。

实例

python

# 贝叶斯定理:疾病检测的经典计算

# A = 患病,B = 检测阳性

p_a = 0.01       # 患病率(先验概率)

p_b_given_a = 0.95   # 灵敏度:患病者检测为阳性的概率

p_b_given_na = 0.05  # 误报率:健康者检测为阳性的概率

# 全概率公式:P(B) = P(B|A)P(A) + P(B|¬A)P(¬A)

p_b = p_b_given_a * p_a + p_b_given_na * (1 - p_a)

# 贝叶斯公式:P(A|B) = P(B|A)P(A) / P(B)

p_a_given_b = p_b_given_a * p_a / p_b

print(p_b)          # 检测阳性的总概率约 5.9%

print(p_a_given_b)  # 阳性中真正患病的比例:只有约 16.1%!

执行以上代码输出结果为:

python
0.059000000000000004
0.16101694915254236

结论很反直觉:检测"准确率 95%",但阳性结果中真正患病的概率只有约 16%--因为患病率本身只有 1%,大量误报淹没了真阳性。

这正是贝叶斯定理的价值:它告诉你如何用新证据(检测结果)更新旧信念(患病率),这也是朴素贝叶斯分类器、贝叶斯优化的共同思想源头。

练习:一副 52 张牌中,事件 A = "抽到红桃"(13 张),事件 B = "抽到 A"(4 张,其中 1 张是红桃 A)。求 和 。

点击查看答案


本章小结

主题一句话核心
逻辑运算∧ 要求都真,∨ 只需一个真,⇒ 只有"前真后假"时才是假的(最反直觉)
集合运算∪ 是合并,∩ 是共有部分,与逻辑运算一一对应
概率与集合事件就是集合,P(A∪B)、P(A∩B)、条件概率都能用集合的重叠关系直观理解

AI 思考中...

符号运算能力

基于 VitePress 构建,部署于 GitHub Pages