逻辑与集合论基础
之前的章节我们介绍了代数、函数、几何,都是在"数"和"图形"上做文章。
本章节我们要处理更底层的东西:怎么描述"条件"(逻辑)、怎么描述"一堆东西的集合"(集合论)。
机器学习里几乎所有涉及"概率""不确定性"的内容,底层语言都是集合论;所有涉及"条件判断""算法流程"的内容,底层语言都是逻辑。
基本逻辑运算:与、或、非、蕴含
逻辑与(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 里没有 "蕴含" 运算符,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)执行以上代码输出结果为:
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 的集合运算:与数学符号一一对应
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执行以上代码输出结果为:
{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%,阳性中真正患病的人也可能不到两成--大量误报淹没了真阳性。
实例
# 贝叶斯定理:疾病检测的经典计算
# 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%!执行以上代码输出结果为:
0.059000000000000004
0.16101694915254236结论很反直觉:检测"准确率 95%",但阳性结果中真正患病的概率只有约 16%--因为患病率本身只有 1%,大量误报淹没了真阳性。
这正是贝叶斯定理的价值:它告诉你如何用新证据(检测结果)更新旧信念(患病率),这也是朴素贝叶斯分类器、贝叶斯优化的共同思想源头。
练习:一副 52 张牌中,事件 A = "抽到红桃"(13 张),事件 B = "抽到 A"(4 张,其中 1 张是红桃 A)。求 和 。
点击查看答案
本章小结
| 主题 | 一句话核心 |
|---|---|
| 逻辑运算 | ∧ 要求都真,∨ 只需一个真,⇒ 只有"前真后假"时才是假的(最反直觉) |
| 集合运算 | ∪ 是合并,∩ 是共有部分,与逻辑运算一一对应 |
| 概率与集合 | 事件就是集合,P(A∪B)、P(A∩B)、条件概率都能用集合的重叠关系直观理解 |
AI 思考中...