涵盖随机变量、条件概率、全概率公式、贝叶斯公式、独立性与互斥,并补充手工计算示例、Python代码示例及学习资料链接。


1. 概率基础

核心目标:掌握概率的核心概念及常用公式,理解贝叶斯公式的本质与应用,区分独立性与互斥性,为后续学习朴素贝叶斯分类器、贝叶斯优化、概率模型(如EM算法)奠定基础——AI中大量场景依赖概率思维(如分类任务的概率预测、模型参数的后验估计)。
说明:知识点侧重“AI实战应用”,不深究复杂的概率公理推导,重点掌握“如何理解”“如何计算”“如何应用”。


1.1 随机变量

1.1.1 定义与分类
  • 随机变量:将随机试验的结果映射为实数的变量。通俗说,就是“取值随机会而定的变量”。
  • 离散型随机变量:取值有限或可数无限(如掷骰子的点数、分类任务的类别标签)。概率描述用概率质量函数(PMF) P ( X = x ) P(X=x) P(X=x)
  • 连续型随机变量:取值充满一个区间(如身高、模型预测的概率值)。概率描述用概率密度函数(PDF) f ( x ) f(x) f(x),满足 ∫ − ∞ ∞ f ( x ) d x = 1 \int_{-\infty}^{\infty} f(x) dx = 1 f(x)dx=1,且 P ( a ≤ X ≤ b ) = ∫ a b f ( x ) d x P(a \le X \le b) = \int_a^b f(x) dx P(aXb)=abf(x)dx

在AI中的应用

  • 离散型:分类标签(如猫/狗)、词频统计。
  • 连续型:高斯分布(用于初始化神经网络权重、生成模型)、特征值(如图像像素强度)。
1.1.2 手工计算示例

例1(离散):掷一颗均匀骰子,记 X X X 为点数。求 P ( X = 3 ) P(X=3) P(X=3) P ( X ≥ 5 ) P(X \ge 5) P(X5)
解: P ( X = 3 ) = 1 6 P(X=3)=\frac{1}{6} P(X=3)=61 P ( X ≥ 5 ) = P ( X = 5 ) + P ( X = 6 ) = 2 6 = 1 3 P(X\ge5)=P(X=5)+P(X=6)=\frac{2}{6}=\frac{1}{3} P(X5)=P(X=5)+P(X=6)=62=31

例2(连续):连续随机变量 X X X 服从区间 [ 0 , 2 ] [0,2] [0,2] 上的均匀分布,其PDF为 f ( x ) = 1 2 f(x)=\frac{1}{2} f(x)=21 0 ≤ x ≤ 2 0\le x\le2 0x2)。求 P ( 0.5 ≤ X ≤ 1.5 ) P(0.5 \le X \le 1.5) P(0.5X1.5)
解: P ( 0.5 ≤ X ≤ 1.5 ) = ∫ 0.5 1.5 1 2 d x = 1 2 × ( 1.5 − 0.5 ) = 0.5 P(0.5 \le X \le 1.5) = \int_{0.5}^{1.5} \frac{1}{2} dx = \frac{1}{2} \times (1.5-0.5) = 0.5 P(0.5X1.5)=0.51.521dx=21×(1.50.5)=0.5

例3(AI分类场景):二分类任务中,离散随机变量 X X X(标签)取值为 { 0 , 1 } \{0,1\} {0,1},概率 P ( X = 0 ) = 0.3 P(X=0)=0.3 P(X=0)=0.3 P ( X = 1 ) = 0.7 P(X=1)=0.7 P(X=1)=0.7,验证概率和为1: 0.3 + 0.7 = 1 0.3+0.7=1 0.3+0.7=1

1.1.3 Python代码示例
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import uniform

# 离散随机变量:模拟掷骰子10000次
dice_rolls = np.random.randint(1, 7, size=10000)
prob_3 = np.sum(dice_rolls == 3) / 10000
print(f"P(X=3) 模拟值: {prob_3:.4f} (理论值 1/6 ≈ 0.1667)")

# 连续随机变量:均匀分布U(0,2)
x = np.linspace(-0.5, 2.5, 200)
pdf = uniform.pdf(x, loc=0, scale=2)   # loc=下限, scale=区间长度
plt.plot(x, pdf, 'b-', label='PDF f(x)=1/2')
plt.fill_between(x, 0, pdf, where=(x>=0.5)&(x<=1.5), alpha=0.3, color='red', label='P(0.5≤X≤1.5)')
plt.title('均匀分布 U(0,2) 的概率密度')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

1.2 条件概率

1.2.1 定义与公式

条件概率:在事件 B B B 已经发生的条件下,事件 A A A 发生的概率,记为 P ( A ∣ B ) P(A|B) P(AB)
公式:
P ( A ∣ B ) = P ( A ∩ B ) P ( B ) , P ( B ) > 0 P(A|B) = \frac{P(A \cap B)}{P(B)}, \quad P(B) > 0 P(AB)=P(B)P(AB),P(B)>0

乘法公式
P ( A ∩ B ) = P ( A ∣ B ) P ( B ) = P ( B ∣ A ) P ( A ) P(A \cap B) = P(A|B) P(B) = P(B|A) P(A) P(AB)=P(AB)P(B)=P(BA)P(A)

通俗理解:“在 B B B 发生的前提下 A A A 发生的概率”,本质是“缩小样本空间”——只考虑 B B B 发生的所有可能结果,再计算其中 A A A 发生的比例。

在AI中的应用:朴素贝叶斯分类器的核心基础、特征之间的关联分析、模型的后验概率计算。

1.2.2 手工计算示例

例1(朴素贝叶斯场景):一批样本中,有100个正例( B B B)、200个负例,正例中80个具有特征 A A A。求 P ( A ∣ B ) P(A|B) P(AB)(正例中具有特征 A A A 的概率)。
解: P ( B ) = 100 300 = 1 3 P(B)=\frac{100}{300}=\frac{1}{3} P(B)=300100=31 P ( A ∩ B ) = 80 300 = 4 15 P(A \cap B)=\frac{80}{300}=\frac{4}{15} P(AB)=30080=154
P ( A ∣ B ) = 4 / 15 1 / 3 = 4 5 = 0.8 P(A|B)=\frac{4/15}{1/3}=\frac{4}{5}=0.8 P(AB)=1/34/15=54=0.8
解读:正例样本中,80%具有特征 A A A,这是朴素贝叶斯中“特征条件概率”的核心计算逻辑。

例2(简单验证):掷骰子,事件 B B B=“点数为偶数”( { 2 , 4 , 6 } \{2,4,6\} {2,4,6}),事件 A A A=“点数为4”,求 P ( A ∣ B ) P(A|B) P(AB)
解: P ( B ) = 0.5 P(B)=0.5 P(B)=0.5 P ( A ∩ B ) = 1 6 P(A\cap B)=\frac{1}{6} P(AB)=61 P ( A ∣ B ) = 1 / 6 0.5 = 1 3 P(A|B)=\frac{1/6}{0.5}=\frac{1}{3} P(AB)=0.51/6=31

1.2.3 Python代码示例(模拟验证)
import numpy as np

# 模拟不放回抽球(条件概率)
np.random.seed(42)
n_trials = 100000
first_red = 0
both_red = 0

for _ in range(n_trials):
    balls = ['R','R','R','B','B']
    np.random.shuffle(balls)
    if balls[0] == 'R':
        first_red += 1
        if balls[1] == 'R':
            both_red += 1

conditional_prob = both_red / first_red
print(f"P(第二个红|第一个红) 模拟值: {conditional_prob:.4f} (理论值 0.5)")

1.3 全概率公式

1.3.1 定义与公式

{ B 1 , B 2 , … , B n } \{B_1, B_2, \dots, B_n\} {B1,B2,,Bn} 是样本空间的一个划分(互斥且完备),则对任意事件 A A A 有:
P ( A ) = ∑ i = 1 n P ( A ∣ B i ) P ( B i ) P(A) = \sum_{i=1}^{n} P(A|B_i) P(B_i) P(A)=i=1nP(ABi)P(Bi)

通俗理解:总概率等于每个“原因” B i B_i Bi A A A 发生的概率乘以该“原因”的概率,再求和。

在AI中的应用:贝叶斯公式的前置基础(贝叶斯公式中 P ( A ) P(A) P(A) 需用全概率公式计算)、朴素贝叶斯的概率归一化、混合模型中的边缘概率计算。

1.3.2 手工计算示例

问题:某工厂有3条生产线( B 1 , B 2 , B 3 B_1, B_2, B_3 B1,B2,B3),产量占比分别为 P ( B 1 ) = 0.5 P(B_1)=0.5 P(B1)=0.5 P ( B 2 ) = 0.3 P(B_2)=0.3 P(B2)=0.3 P ( B 3 ) = 0.2 P(B_3)=0.2 P(B3)=0.2;各生产线的次品率分别为 P ( A ∣ B 1 ) = 0.02 P(A|B_1)=0.02 P(AB1)=0.02 P ( A ∣ B 2 ) = 0.03 P(A|B_2)=0.03 P(AB2)=0.03 P ( A ∣ B 3 ) = 0.05 P(A|B_3)=0.05 P(AB3)=0.05 A A A为“产品是次品”)。求该厂产品的总次品率 P ( A ) P(A) P(A)
解:
P ( A ) = 0.02 × 0.5 + 0.03 × 0.3 + 0.05 × 0.2 = 0.01 + 0.009 + 0.01 = 0.029 P(A) = 0.02\times0.5 + 0.03\times0.3 + 0.05\times0.2 = 0.01 + 0.009 + 0.01 = 0.029 P(A)=0.02×0.5+0.03×0.3+0.05×0.2=0.01+0.009+0.01=0.029
即次品率为2.9%。

1.3.3 Python代码示例
# 全概率公式直接计算
p_A_given_B1 = 0.02
p_B1 = 0.5
p_A_given_B2 = 0.03
p_B2 = 0.3
p_A_given_B3 = 0.05
p_B3 = 0.2

p_A = p_A_given_B1 * p_B1 + p_A_given_B2 * p_B2 + p_A_given_B3 * p_B3
print(f"总次品率 = {p_A:.4f}")

# 模拟验证
np.random.seed(42)
samples = 100000
defective = 0
for _ in range(samples):
    factory = np.random.choice(['B1','B2','B3'], p=[0.5,0.3,0.2])
    if factory == 'B1':
        if np.random.rand() < 0.02: defective += 1
    elif factory == 'B2':
        if np.random.rand() < 0.03: defective += 1
    else:
        if np.random.rand() < 0.05: defective += 1
print(f"模拟次品率: {defective/samples:.4f}")

1.4 贝叶斯公式 —— 朴素贝叶斯、贝叶斯优化的基础

1.4.1 定义与推导

贝叶斯公式描述了已知结果 A A A 发生后,归因于某个“原因” B i B_i Bi 的后验概率:
P ( B i ∣ A ) = P ( A ∣ B i ) P ( B i ) ∑ j = 1 n P ( A ∣ B j ) P ( B j ) = P ( A ∣ B i ) P ( B i ) P ( A ) P(B_i|A) = \frac{P(A|B_i)P(B_i)}{\sum_{j=1}^{n} P(A|B_j)P(B_j)} = \frac{P(A|B_i)P(B_i)}{P(A)} P(BiA)=j=1nP(ABj)P(Bj)P(ABi)P(Bi)=P(A)P(ABi)P(Bi)

  • P ( B i ) P(B_i) P(Bi)先验概率(原因的先验信念)
  • P ( A ∣ B i ) P(A|B_i) P(ABi)似然概率(原因 B i B_i Bi 下结果 A A A 的可能性)
  • P ( B i ∣ A ) P(B_i|A) P(BiA)后验概率(观察到 A A A 后对原因的更新)

核心本质:“逆概率”计算——由“结果”反推“原因”。

在AI中的应用

  • 朴素贝叶斯分类器:假设特征条件独立,用贝叶斯公式计算后验类别概率。
  • 贝叶斯优化:利用先验分布(高斯过程)更新后验,高效搜索超参数。
  • 垃圾邮件过滤:根据词频计算邮件属于垃圾邮件的概率。
1.4.2 手工计算示例

例1(工厂次品溯源):沿用1.3节的工厂数据,已知产品是次品( A A A),求它来自生产线 B 1 B_1 B1 的概率 P ( B 1 ∣ A ) P(B_1|A) P(B1A)
解: P ( B 1 ∣ A ) = P ( A ∣ B 1 ) P ( B 1 ) P ( A ) = 0.02 × 0.5 0.029 ≈ 0.345 P(B_1|A) = \frac{P(A|B_1)P(B_1)}{P(A)} = \frac{0.02 \times 0.5}{0.029} \approx 0.345 P(B1A)=P(A)P(AB1)P(B1)=0.0290.02×0.50.345
解读:观察到次品后,来自 B 1 B_1 B1 的概率从先验50%降为34.5%。

例2(朴素贝叶斯分类):二分类任务中,正类先验 P ( Y = 1 ) = 0.6 P(Y=1)=0.6 P(Y=1)=0.6,负类先验 P ( Y = 0 ) = 0.4 P(Y=0)=0.4 P(Y=0)=0.4;特征 X = 1 X=1 X=1 在正类中的条件概率 P ( X = 1 ∣ Y = 1 ) = 0.8 P(X=1|Y=1)=0.8 P(X=1∣Y=1)=0.8,在负类中 P ( X = 1 ∣ Y = 0 ) = 0.3 P(X=1|Y=0)=0.3 P(X=1∣Y=0)=0.3。求样本 X = 1 X=1 X=1 属于正类的后验概率 P ( Y = 1 ∣ X = 1 ) P(Y=1|X=1) P(Y=1∣X=1)
解:
先计算 P ( X = 1 ) = 0.8 × 0.6 + 0.3 × 0.4 = 0.48 + 0.12 = 0.6 P(X=1) = 0.8\times0.6 + 0.3\times0.4 = 0.48+0.12=0.6 P(X=1)=0.8×0.6+0.3×0.4=0.48+0.12=0.6
P ( Y = 1 ∣ X = 1 ) = 0.8 × 0.6 0.6 = 0.8 P(Y=1|X=1) = \frac{0.8\times0.6}{0.6} = 0.8 P(Y=1∣X=1)=0.60.8×0.6=0.8
即样本具有特征 X = 1 X=1 X=1 时,属于正类的概率为80%,朴素贝叶斯分类器会将其判为正类。

1.4.3 Python代码实现(朴素贝叶斯分类器完整示例)
import numpy as np
from collections import defaultdict

# 训练数据(天气与打网球)
data = [
    ('Sunny', 'No'), ('Sunny', 'No'), ('Overcast', 'Yes'),
    ('Rainy', 'Yes'), ('Rainy', 'Yes'), ('Rainy', 'No'), ('Overcast', 'Yes')
]

# 先验与条件概率计数
prior = defaultdict(int)
cond = defaultdict(lambda: defaultdict(int))
vocab = set()

for outlook, play in data:
    prior[play] += 1
    cond[play][outlook] += 1
    vocab.add(outlook)

total = len(data)
classes = list(prior.keys())
alpha = 1.0   # 拉普拉斯平滑
v = len(vocab)

def naive_bayes_predict(outlook):
    probs = {}
    for cls in classes:
        prior_prob = prior[cls] / total
        likelihood = (cond[cls][outlook] + alpha) / (prior[cls] + alpha * v)
        probs[cls] = prior_prob * likelihood
    # 归一化
    total_prob = sum(probs.values())
    for cls in probs:
        probs[cls] /= total_prob
    return probs

result = naive_bayes_predict('Sunny')
print(f"P(Yes|Sunny) = {result['Yes']:.4f}, P(No|Sunny) = {result['No']:.4f}")
1.4.4 贝叶斯优化简介(概念+代码示意)

核心思想:在优化黑盒函数时,用高斯过程(GP)作为先验,根据已评估的点计算后验均值和方差,通过采集函数(如EI)选择下一个最有可能提升的点。

# 示意代码(使用scikit-optimize库)
# pip install scikit-optimize
from skopt import gp_minimize
import numpy as np

def objective(x):
    return (x - 2)**2 + 0.5

res = gp_minimize(objective, [(-10.0, 10.0)], n_calls=20, random_state=42)
print(f"最优参数: x={res.x[0]:.4f}, 最小值={res.fun:.4f}")

1.5 独立性与互斥

1.5.1 定义与区别
  • 独立事件:事件 A A A 的发生不影响 B B B 的概率,即 P ( A ∣ B ) = P ( A ) P(A|B)=P(A) P(AB)=P(A),等价于 P ( A ∩ B ) = P ( A ) P ( B ) P(A \cap B)=P(A)P(B) P(AB)=P(A)P(B)
  • 互斥事件 A A A B B B 不能同时发生,即 A ∩ B = ∅ A \cap B = \emptyset AB=,因此 P ( A ∩ B ) = 0 P(A \cap B)=0 P(AB)=0

重要结论

  • 独立 ⇒ 不互斥(除非概率为0)
  • 互斥 ⇒ 不独立(除非某个概率为0)

在AI中的应用

  • 朴素贝叶斯的“特征条件独立”假设(特征在给定类别下独立)。
  • 随机梯度下降中,样本独立同分布(i.i.d.)假设。
  • 多类别分类中,不同类别标签是互斥事件。
1.5.2 手工计算示例

例1(独立但不互斥):抛两枚硬币, A A A=“第一枚正面”, B B B=“第二枚正面”。
P ( A ) = 0.5 P(A)=0.5 P(A)=0.5 P ( B ) = 0.5 P(B)=0.5 P(B)=0.5 P ( A ∩ B ) = 0.25 = P ( A ) P ( B ) P(A\cap B)=0.25 = P(A)P(B) P(AB)=0.25=P(A)P(B),故独立。 A A A B B B可同时发生,不互斥。

例2(互斥但不独立):掷一颗骰子, A A A=“点数为奇数”, B B B=“点数为偶数”。
P ( A ) = 0.5 P(A)=0.5 P(A)=0.5 P ( B ) = 0.5 P(B)=0.5 P(B)=0.5 P ( A ∩ B ) = 0 P(A\cap B)=0 P(AB)=0,故互斥。但 P ( A ) P ( B ) = 0.25 ≠ 0 P(A)P(B)=0.25 \neq 0 P(A)P(B)=0.25=0,所以不独立。

1.5.3 Python代码验证
import numpy as np

# 模拟掷骰子验证互斥性
np.random.seed(42)
rolls = np.random.randint(1, 7, size=10000)
A = (rolls % 2 == 1)   # 奇数
B = (rolls % 2 == 0)   # 偶数

p_A = np.mean(A)
p_B = np.mean(B)
p_AB = np.mean(A & B)

print(f"P(A)={p_A:.3f}, P(B)={p_B:.3f}, P(A∩B)={p_AB:.3f}")
print(f"P(A)P(B)={p_A*p_B:.3f} → 不相等,所以不独立(互斥事件)")

# 验证独立性:抛两枚硬币
coin1 = np.random.choice([0,1], size=10000)
coin2 = np.random.choice([0,1], size=10000)
p_A2 = np.mean(coin1 == 1)
p_B2 = np.mean(coin2 == 1)
p_AB2 = np.mean((coin1 == 1) & (coin2 == 1))
print(f"\n抛硬币: P(A)P(B)={p_A2*p_B2:.3f}, P(AB)={p_AB2:.3f} → 独立成立")

1.6 综合代码实践:垃圾邮件分类(朴素贝叶斯完整示例)

import numpy as np
from collections import defaultdict

# 邮件数据(词袋模型)
emails = [
    ("free money now", "spam"),
    ("meeting tomorrow", "ham"),
    ("free meeting", "ham"),
    ("money free cash", "spam"),
    ("schedule meeting", "ham")
]

def tokenize(text):
    return text.split()

class NaiveBayesClassifier:
    def __init__(self, alpha=1.0):
        self.alpha = alpha
        self.class_prior = defaultdict(int)
        self.word_count = defaultdict(lambda: defaultdict(int))
        self.class_total = defaultdict(int)
        self.vocab = set()

    def fit(self, X, y):
        for text, label in zip(X, y):
            self.class_prior[label] += 1
            words = tokenize(text)
            for w in words:
                self.word_count[label][w] += 1
                self.vocab.add(w)
        for label in self.class_prior:
            self.class_total[label] = sum(self.word_count[label].values())

    def predict_proba(self, text):
        words = tokenize(text)
        log_probs = {}
        for label in self.class_prior:
            log_prob = np.log(self.class_prior[label] / sum(self.class_prior.values()))
            for w in words:
                count = self.word_count[label][w]
                prob_word = (count + self.alpha) / (self.class_total[label] + self.alpha * len(self.vocab))
                log_prob += np.log(prob_word)
            log_probs[label] = log_prob
        exp_probs = np.exp(list(log_probs.values()))
        total = np.sum(exp_probs)
        return {label: exp_probs[i]/total for i, label in enumerate(log_probs.keys())}

clf = NaiveBayesClassifier(alpha=0.5)
X = [email[0] for email in emails]
y = [email[1] for email in emails]
clf.fit(X, y)

test_email = "free money meeting"
proba = clf.predict_proba(test_email)
print(f"邮件 '{test_email}' 分类概率: {proba}")

1.7 学习资料链接(聚焦AI应用,避免纯理论)


1.8 小结与学习建议

概念 核心公式 AI重要性
随机变量 PMF / PDF ★★★
条件概率 P ( A ∣ B ) = P ( A B ) / P ( B ) P(A|B)=P(AB)/P(B) P(AB)=P(AB)/P(B) ★★★★
全概率公式 P ( A ) = ∑ P ( A ∣ B i ) P ( B i ) P(A)=\sum P(A|B_i)P(B_i) P(A)=P(ABi)P(Bi) ★★★★
贝叶斯公式 P ( B i ∣ A ) = P ( A ∣ B i ) P ( B i ) P ( A ) P(B_i|A)=\frac{P(A|B_i)P(B_i)}{P(A)} P(BiA)=P(A)P(ABi)P(Bi) ★★★★★
独立性 P ( A B ) = P ( A ) P ( B ) P(AB)=P(A)P(B) P(AB)=P(A)P(B) ★★★★
互斥 P ( A B ) = 0 P(AB)=0 P(AB)=0 ★★★

学习路径

  1. 先手工计算小例子,理解公式含义。
  2. 用Python模拟随机试验,验证概率结果。
  3. 动手实现朴素贝叶斯分类器(垃圾邮件分类)并理解其假设。
  4. 了解贝叶斯优化的基本思想(先验→后验→采集函数)。

注意:概率是AI中处理不确定性的核心工具,贝叶斯公式尤为重要,后续学习贝叶斯统计、概率图模型、变分推断等都会反复用到。无需深究概率公理,重点掌握“公式怎么用”“在AI中对应什么场景”。

Logo

分享最新、最前沿的AI大模型技术,吸纳国内前几批AI大模型开发者

更多推荐