AI_概率统计-1.概率基础
涵盖随机变量、条件概率、全概率公式、贝叶斯公式、独立性与互斥,并补充手工计算示例、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(a≤X≤b)=∫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(X≥5)。
解: 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(X≥5)=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 0≤x≤2)。求 P ( 0.5 ≤ X ≤ 1.5 ) P(0.5 \le X \le 1.5) P(0.5≤X≤1.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.5≤X≤1.5)=∫0.51.521dx=21×(1.5−0.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(A∣B)。
公式:
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(A∣B)=P(B)P(A∩B),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(A∩B)=P(A∣B)P(B)=P(B∣A)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(A∣B)(正例中具有特征 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(A∩B)=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(A∣B)=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(A∣B)。
解: 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(A∩B)=61, P ( A ∣ B ) = 1 / 6 0.5 = 1 3 P(A|B)=\frac{1/6}{0.5}=\frac{1}{3} P(A∣B)=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=1∑nP(A∣Bi)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(A∣B1)=0.02, P ( A ∣ B 2 ) = 0.03 P(A|B_2)=0.03 P(A∣B2)=0.03, P ( A ∣ B 3 ) = 0.05 P(A|B_3)=0.05 P(A∣B3)=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(Bi∣A)=∑j=1nP(A∣Bj)P(Bj)P(A∣Bi)P(Bi)=P(A)P(A∣Bi)P(Bi)
- P ( B i ) P(B_i) P(Bi):先验概率(原因的先验信念)
- P ( A ∣ B i ) P(A|B_i) P(A∣Bi):似然概率(原因 B i B_i Bi 下结果 A A A 的可能性)
- P ( B i ∣ A ) P(B_i|A) P(Bi∣A):后验概率(观察到 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(B1∣A)。
解: 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(B1∣A)=P(A)P(A∣B1)P(B1)=0.0290.02×0.5≈0.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(A∣B)=P(A),等价于 P ( A ∩ B ) = P ( A ) P ( B ) P(A \cap B)=P(A)P(B) P(A∩B)=P(A)P(B)。
- 互斥事件: A A A 与 B B B 不能同时发生,即 A ∩ B = ∅ A \cap B = \emptyset A∩B=∅,因此 P ( A ∩ B ) = 0 P(A \cap B)=0 P(A∩B)=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(A∩B)=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(A∩B)=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应用,避免纯理论)
- 可汗学院:概率基础(条件概率、贝叶斯)
- 3Blue1Brown:贝叶斯定理的直观理解(视频)
- 朴素贝叶斯分类器(Scikit-learn官方文档)
- 贝叶斯优化论文与教程
- NumPy概率计算常用方法
- 独立性与互斥性通俗讲解
1.8 小结与学习建议
| 概念 | 核心公式 | AI重要性 |
|---|---|---|
| 随机变量 | PMF / PDF | ★★★ |
| 条件概率 | P ( A ∣ B ) = P ( A B ) / P ( B ) P(A|B)=P(AB)/P(B) P(A∣B)=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(A∣Bi)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(Bi∣A)=P(A)P(A∣Bi)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 | ★★★ |
学习路径:
- 先手工计算小例子,理解公式含义。
- 用Python模拟随机试验,验证概率结果。
- 动手实现朴素贝叶斯分类器(垃圾邮件分类)并理解其假设。
- 了解贝叶斯优化的基本思想(先验→后验→采集函数)。
注意:概率是AI中处理不确定性的核心工具,贝叶斯公式尤为重要,后续学习贝叶斯统计、概率图模型、变分推断等都会反复用到。无需深究概率公理,重点掌握“公式怎么用”“在AI中对应什么场景”。
更多推荐
所有评论(0)