ML 学习站
跳到正文

概率的基本概念

概率定义、加法/乘法原理、互补事件。

30 分钟1 / 33,867
加载中...

本章深入探讨了概率的基本概念,涵盖三种定义:古典定义适用于结果等可能且有限的情况;频率定义用于可重复实验,通过大量实验的频率逼近概率;主观定义基于已有信息和个人判断,适用于一次性事件。读者将学习到概率的三个公理:非负性、归一性和可加性,以及如何区分概率与赔率。此外,本章还介绍了加法原理和乘法原理,包括互斥事件、独立事件和条件概率的处理方法。读者将掌握四种计数法则:乘法计数法则、阶乘、排列和组合,并了解如何根据问题情境选择合适的计数方法。通过蒙特卡洛模拟的实际案例,读者将学会如何用代码验证概率直觉,并理解概率在机器学习中的应用,如朴素贝叶斯分类器、逻辑回归、交叉熵损失等。学完本章后,读者能够准确理解和应用不同场景下的概率定义,掌握概率计算的基本原理,并能够运用编程工具进行概率模拟和分析。

概率的基本概念

本章问题: 天气预报说"明天下雨概率 70%", 是什么意思? 是说 100 天里会下 70 天吗? 是说这朵云 70% 会下雨? 还是说你带伞出门被淋的概率是 70%? 概率有 3 种理解方式, 各有适用场景。

1. 概率的 3 种定义

1.1 古典定义 (Classical)

适用于: 结果等可能且有限 (如掷骰子、抽扑克)。

例: 掷一个公平骰子, 出现偶数的概率 = 3/6 = 0.5。

1.2 频率定义 (Frequentist)

适用于: 实验可重复, 用大量实验的频率逼近概率。

例: 抛 100 万次硬币, 正面出现次数 ≈ 50 万, 频率 ≈ 0.5。

1.3 主观定义 (Subjective / Bayesian)

适用于: 一次性事件 (如"明天下雨"、"这家公司会成功")。

基于已有信息 + 个人判断给出概率。贝叶斯学派的核心。

定义哲学适用
古典客观、确定离散等可能事件
频率客观、长期可重复实验
主观主观、个人一次性事件

2. 概率的 3 个公理 (Kolmogorov)

任何合理的概率都必须满足:

  1. 非负性: P(A) ≥ 0
  2. 归一性: P(整个样本空间) = 1
  3. 可加性: 互斥事件 P(A ∪ B) = P(A) + P(B)
# 验证: 抛硬币 1000 次
import numpy as np
np.random.seed(42)
flips = np.random.choice(["H", "T"], 1000)
p_head = (flips == "H").mean()
print(f"1000 次抛硬币: 正面频率 = {p_head:.3f} (理论 0.500)")
# 10000 次: 更接近 0.5
flips_10k = np.random.choice(["H", "T"], 10000)
print(f"10000 次: 正面频率 = {(flips_10k == 'H').mean():.4f}")

3. 概率与赔率 (Odds)

概率赔率 是两套语言, 经常被搞混:

概率赔率 ("对 A")
0.51:1
0.753:1
0.909:1
0.9999:1

💡 ML 中的赔率: 逻辑回归输出的是 log-odds (对数几率), 不是概率。predict_proba 内部把 log-odds 转换为概率。coef_ 直接对应"特征每变 1 单位, log-odds 变多少"。

4. 加法原理 (Addition Rule)

互斥事件 (Mutually Exclusive)

事件 A 和 B 不可能同时发生 (如掷骰子 1 和 6):

一般情况 (Inclusion-Exclusion)

⚠️ 常见错误: 不减交集就加 — 会重复计算"既属于 A 又属于 B"的事件。

互补事件 (Complement)

技巧: 算"至少一个"的概率, 通常用补集"一个都没有"更简单。

# 例: 10 个灯泡, 3 个坏的, 抽 2 个 (不放回), 至少 1 个坏的概率
from math import comb
n_total = comb(10, 2)              # 总抽法 C(10,2) = 45
n_no_bad = comb(7, 2)              # 都没坏 C(7,2) = 21
p_at_least_one_bad = 1 - n_no_bad / n_total
print(f"P(至少 1 坏) = 1 - 21/45 = {p_at_least_one_bad:.3f}")

5. 乘法原理 (Multiplication Rule)

独立事件 (Independent)

事件 A 和 B 互不影响 (如两次掷骰子):

一般情况 (Dependent)

P(B|A) 是"在 A 发生的条件下 B 发生的概率" (条件概率, 下章讲)。

# 例: 抽 5 张扑克, 都是红桃的概率 (不放回)
p_heart = 13/52
# 第 1 张: 13/52, 第 2 张: 12/51, ...
p_all_hearts = 1
for i in range(5):
    p_all_hearts *= (13 - i) / (52 - i)
print(f"P(5 张都红桃) = {p_all_hearts:.6f}")  # ≈ 0.0005

6. 计数法则:从"原理"到"算概率"

加法/乘法是"原则", 要落地算具体数字, 还需要怎么数。4 个计数法则:

6.1 乘法计数法则 (基础)

n 步骤, 每步 k_i 种选择 → 总数 = k_1 × k_2 × ... × k_n

6.2 阶乘 (Factorial)

n 个不同元素的排列数 = n!

from math import factorial
# 5! = 120
print(factorial(5))

6.3 排列 (Permutation)

n 个里选 r 个有序排列:

from math import perm
# 5 个里选 3 个排列: P(5,3) = 60
print(perm(5, 3))

6.4 组合 (Combination)

n 个里选 r 个无序:

from math import comb
# 5 个里选 3 个组合: C(5,3) = 10
print(comb(5, 3))

💡 怎么选?

  • 题目说"中奖号码" → 排列 (顺序重要)
  • 题目说"选 3 个人" → 组合 (顺序无关)
  • 题目说"密码" → 排列
  • 题目说"手牌" → 组合

7. Python 实战:蒙特卡洛模拟

概率难理解时, 写代码模拟 比公式更直观。

例: 三门问题 (Monty Hall) — 直觉与概率冲突

3 扇门, 1 扇后面有车, 2 扇后面是羊。你选 1 扇, 主持人 (知道答案) 打开 1 扇剩下的羊门。问你还是不换?

直觉: 剩 2 扇, 各 1/2, 换不换一样。 事实: 换门获胜概率 2/3, 不换 1/3

import numpy as np

def monty_hall(n_trials=100_000, switch=True):
    """模拟 Monty Hall 游戏"""
    wins = 0
    for _ in range(n_trials):
        # 随机放车
        car = np.random.randint(0, 3)             # 0, 1, 2
        # 你随机选
        choice = np.random.randint(0, 3)
        # 主持人开 1 扇 (不是你选的, 且不是车)
        available = [d for d in range(3) if d != choice and d != car]
        host_opens = np.random.choice(available)
        # 如果换, 你选剩下那扇
        if switch:
            choice = [d for d in range(3) if d not in (choice, host_opens)][0]
        if choice == car:
            wins += 1
    return wins / n_trials

print(f"不换: 胜率 = {monty_hall(switch=False):.4f} (理论 1/3)")
print(f"换:   胜率 = {monty_hall(switch=True):.4f} (理论 2/3)")
不换: 胜率 = 0.3335 (理论 1/3 = 0.3333)
换:   胜率 = 0.6668 (理论 2/3 = 0.6667)

🎯 为什么? 你最初选的 1/3 概率不变, 主持人给的信息把剩下 2 扇的"2/3 概率"集中到了 1 扇上。直觉的 1/2 错在忽略了主持人的"信息"。

8. 概率在 ML 中的应用

ML 概念概率论对应
朴素贝叶斯分类器P(类别 | 特征) ∝ P(特征 | 类别) × P(类别)
逻辑回归输出P(y=1 | x), 用 sigmoid 把 log-odds 转概率
交叉熵损失-log P(真实类别), 来自最大似然估计
Dropout随机丢弃神经元 = 给输出加噪声, 模拟"概率分布"
集成学习 (Bagging)多个模型投票, 多数票 ≈ 概率
VAE / Diffusion显式建模 P(x) 或 P(x|y) 的分布

9. 小结

你学到了关键点
概率 3 定义古典/频率/主观, 不同场景
3 公理非负/归一/可加
加法原理互斥直接加, 一般减交集, "至少一个"用补集
乘法原理独立直接乘, 一般乘条件概率
计数 4 法则基础/阶乘/排列/组合, 顺序是判断标准
蒙特卡洛写代码模拟, 验证直觉

10. 习题

  1. 一副 52 张扑克 (无大小王), 抽 1 张:

    • P(红桃) = ?
    • P(人头牌 J/Q/K) = ?
    • P(人头牌 ∪ 红桃) = ? (用加法原理)
    • P(人头牌 | 红桃) = ? (条件概率, 下一章)
  2. 写蒙特卡洛模拟: 抛 3 个公平骰子, 点数之和 = 10 的概率 (理论 = 27/216 = 0.125)。用 10 万次模拟验证。

👉 查看参考答案
  1. 答案:

    • P(红桃) = 13/52 = 0.25
    • P(人头牌) = 12/52 = 3/13
    • P(人头牌 ∪ 红桃) = 12/52 + 13/52 - 3/52 = 22/52 = 11/26 (有 3 张红桃人头牌, 减一次)
    • P(人头牌 | 红桃) = 3/13 (见下章)
  2. 提示: sums = np.random.randint(1, 7, (100_000, 3)).sum(axis=1); p = (sums == 10).mean() 应得 ≈ 0.125。

11. 下一章


📚 本章来源: 改编自 Triola《基础统计学》第 14 版 第 4 章 4-1、4-2、4-4 节, 加入 Python 蒙特卡洛实战。

章末小测验

检验你对《概率的基本概念》的掌握程度。

1

关于概率的古典定义,以下哪些说法是正确的?

2

关于概率的频率定义,以下哪些说法是正确的?

3

关于概率的3个公理,以下哪些说法是正确的?

4

关于加法原理,以下哪些说法是正确的?

5

关于计数法则,以下哪些说法是正确的?

讨论区(0)

加载评论中...