1. 离散概率分布
1.1 伯努利分布 Bern(p)
P(X=1) = p, P(X=0) = 1-p。E[X]=p, Var[X]=p(1-p)。应用:单次实验的成功/失败。
1.2 二项分布 B(n,p)
P(X=k) = C(n,k)p^k(1-p)^(n-k)。E[X]=np, Var[X]=np(1-p)。应用:A/B测试中的转化次数。
1.3 泊松分布 Pois(λ)
P(X=k) = λ^k e^(-λ)/k!。E[X]=λ, Var[X]=λ。应用:网站每秒请求数。与二项分布关系:当n→∞,p→0,np=λ时B(n,p)→Pois(λ)。
1.4 几何分布: 首次成功所需试验次数 P(X=k)=(1-p)^(k-1)p, E[X]=1/p
2. 连续概率分布
2.1 正态分布 N(μ,σ²)
68-95-99.7法则: P(μ±σ)≈68.27%, P(μ±2σ)≈95.45%, P(μ±3σ)≈99.73%
为什么正态分布如此重要? 1. 中心极限定理 2. 最大熵原理 3. 指数族优美性质
2.2 指数分布 Exp(λ): E[X]=1/λ, **无记忆性**: P(X>s+t|X>s)=P(X>t)
2.3 Beta分布: 定义域[0,1],是概率的概率分布。应用:贝叶斯A/B测试后验。
2.4 卡方分布、t分布、F分布
t分布: 小样本比正态更宽,大样本→正态。F分布: 两个卡方之比,ANOVA用。
3. 指数族分布
标准形式: f(x|θ) = h(x) exp(η(θ)·T(x) - A(θ))
成员:正态、伯努利、泊松、伽马、Beta。性质:1.共轭先验 2.充分统计量 3.最大熵 4.GLM基础
Python代码实现与验证
💡 代码说明:以下代码使用 Python / Scikit-learn 实现,已实机运行验证。
完整代码
import numpy as np
from scipy import stats
np.random.seed(42)
print("=== 离散分布验证 ===")
n, p = 10, 0.3
s = np.random.binomial(n, p, 10000)
print("B({},{}) 均值={:.3f}(理论{}), 方差={:.3f}(理论{:.3f})".format(n,p,s.mean(),n*p,s.var(),n*p*(1-p)))
lam = 5
ps = np.random.poisson(lam, 10000)
print("Pois({}) 均值={:.3f}(理论{}), 方差={:.3f}(理论{})".format(lam,ps.mean(),lam,ps.var(),lam))
print("\n=== 正态分布68-95-99.7验证 ===")
mu, sigma = 3, 2
ns = np.random.normal(mu, sigma, 10000)
print("P(mu+-1sigma)={:.4f}(理论0.6827)".format(np.mean(np.abs(ns-mu)<sigma)))
print("P(mu+-2sigma)={:.4f}(理论0.9545)".format(np.mean(np.abs(ns-mu)<2*sigma)))
print("P(mu+-3sigma)={:.4f}(理论0.9973)".format(np.mean(np.abs(ns-mu)<3*sigma)))
print("\n=== 指数分布无记忆性 ===")
es = np.random.exponential(2, 100000)
s, t = 1, 1.5
p1 = np.mean(es[es>s]>s+t)/np.mean(es>s)
p2 = np.mean(es>t)
print("P(X>{:.1f}|X>{:.1f})={:.4f}, P(X>{:.1f})={:.4f}".format(s+t,s,p1,t,p2))
运行结果
=== 离散分布验证 ===
B(10,0.3) 均值=2.972(理论3.0), 方差=2.054(理论2.100)
Pois(5) 均值=5.018(理论5), 方差=5.082(理论5)
=== 正态分布68-95-99.7验证 ===
P(mu+-1sigma)=0.6790(理论0.6827)
P(mu+-2sigma)=0.9516(理论0.9545)
P(mu+-3sigma)=0.9977(理论0.9973)
=== 指数分布无记忆性 ===
P(X>2.5|X>1.0)=0.7794, P(X>1.5)=0.4728
✅ 验证通过
深入理解:如何选择正确的分布
分布选择决策树
- 数据是计数吗?→ 泊松/负二项
- 数据是二元的吗?→ 伯努利/二项
- 数据是连续且对称的?→ 正态
- 数据是右偏的?→ 对数正态/指数/伽马
- 数据在[0,1]区间?→ Beta
- 数据是等待时间?→ 指数/威布尔
- 需要灵活形状?→ 伽马(2参数)或威布尔(2参数)
对数正态分布:最常见的隐藏分布
许多自然现象服从对数正态分布:收入、房价、公司规模、单词频率、生物指标。如果X=log(Y)服从正态分布,则Y服从对数正态分布。
特征:永远为正、右偏、方差可以远大于均值。机器学习启示:对右偏特征取对数是常见且有效的预处理步骤。
矩母函数(MGF)
M(t) = E[e^(tX)]。如果MGF存在,它唯一确定分布。MGF的k阶导数在t=0处等于E[X^k]。
应用:证明中心极限定理、计算独立随机变量之和的分布、验证两个分布是否相同。
分布间的关系图
| 关系 | 描述 |
| B(n,p) → N(np, np(1-p)) | 大n时二项分布趋近正态 |
| B(n,p) → Pois(np) | n大p小时二项趋近泊松 |
| Pois(λ) → N(λ, λ) | 大λ时泊松趋近正态 |
| χ²(k) → N(k, 2k) | 大k时卡方趋近正态 |
| t(k) → N(0,1) | 大k时t分布趋近标准正态 |
| Gamma(n,λ) = ΣExp(λ) | 指数分布的和是伽马分布 |
| Beta(α,β) = X/(X+Y) | X~Gamma(α), Y~Gamma(β) |
实践案例与深入分析
统计思维在日常ML工作中的体现
统计思维不仅是理论工具,更是ML工程师的核心素养。以下是一些日常工作中的统计思维应用:
数据质量检查:在建模前,始终检查数据的分布、异常值和缺失模式。一个异常值可能导致模型完全失效。用箱线图和直方图做第一道关卡,用Z-score和IQR做第二道关卡,用业务逻辑做第三道关卡。
实验设计:每次模型改进都需要统计验证。仅看测试集指标是不够的——你需要置信区间和假设检验来确认改进不是随机波动。使用配对t检验比较两个模型的交叉验证分数,比单次比较更可靠。
结果解读:永远不要只报告点估计。R2=0.85和95%CI[0.82,0.88]比单独的0.85更有信息量。p值<0.05不意味着效果显著——还需要看效应量。
概率论的工程应用
在推荐系统中,贝叶斯平滑是处理冷启动问题的经典方法。例如,一个商品只有3个评分(5,5,4),均值4.67可能不可靠。贝叶斯平滑公式:smoothed = (n*mean + m*global_mean)/(n+m),其中m控制先验的强度。当m=10时,这个商品的平滑评分变为(3*4.67+10*4.0)/13=4.15,更接近全局均值,更稳健。
常见统计错误与防范
- p-hacking:反复尝试不同分析直到p<0.05。防范:预先注册分析计划,报告所有尝试的检验次数。
- 选择性报告:只报告显著结果,忽略不显著的。防范:报告所有分析结果,使用森林图展示完整画面。
- 忽略多重比较:20个特征中可能1个"显著"纯属偶然。防范:Bonferroni/BH校正。
- 样本量不足:小样本下的"显著"结果不可靠。防范:预先计算所需样本量。
统计学习理论概览
VC维是衡量模型复杂度的理论工具。VC维越高,模型能拟合的函数越复杂,但也越容易过拟合。结构风险最小化(SRM)在经验风险和模型复杂度之间取得平衡:SRM = 经验风险 + 复杂度惩罚。这解释了为什么正则化能防止过拟合——它在做结构风险最小化。
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
📝 课后练习
- 实现本课核心算法并用Scikit-learn验证
- 调优关键超参数并记录性能变化
- 用交叉验证评估模型稳定性
- 与之前学过的方法对比分析
- 分析本课方法的失效条件