1. 假设检验框架
| 要素 | 说明 |
| 原假设 H₀ | 默认成立(通常"没有效果") |
| 备择假设 H₁ | 想要证明的假设 |
| p值 | 在H₀下,观测到当前或更极端结果的概率 |
| 显著性水平 α | 拒绝H₀的阈值(通常0.05) |
决策: p ≤ α → 拒绝H₀;p > α → 不拒绝H₀
两类错误
| H₀为真 | H₀为假 |
| 拒绝H₀ | I类错误(假阳性) α | ✅正确(功效1-β) |
| 不拒绝H₀ | ✅正确 | II类错误(假阴性) β |
权衡: 减小α会增加β,样本量是唯一能同时减小两者的手段。
2. 常用检验方法
Z检验: 大样本/已知方差。Z = (x̄ - μ₀)/(σ/√n)
t检验: 小样本/σ未知。单样本、独立样本、配对样本三种。
卡方检验: 拟合优度 χ²=Σ(Oᵢ-Eᵢ)²/Eᵢ,独立性检验。
ANOVA: F = MSB/MSW,检验多组均值是否相等。
非参数检验: Mann-Whitney U(替代t)、Kruskal-Wallis(替代ANOVA)
3. 多重比较校正
Bonferroni: α'=α/m,控制FWER但过于保守。
Benjamini-Hochberg(FDR): 控制错误发现率,更有检验功效。
4. 效应量与置信区间
Cohen's d = (x̄₁-x̄₂)/s_pooled: |d|<0.2微小, 0.5中等, 0.8大效应
置信区间: 比单一p值更有信息量
Python代码实现与验证
💡 代码说明:以下代码使用 Python / Scikit-learn 实现,已实机运行验证。
完整代码
import numpy as np
from scipy import stats
np.random.seed(42)
print("=== 假设检验验证 ===")
samples = np.random.normal(5, 2, 30)
t_stat, p_val = stats.ttest_1samp(samples, 5)
print("单样本t检验 H0:mu=5, t={:.4f}, p={:.4f}".format(t_stat, p_val))
ga = np.random.normal(10, 3, 50)
gb = np.random.normal(11, 3, 50)
t2, p2 = stats.ttest_ind(ga, gb)
print("独立t检验 t={:.4f}, p={:.4f}".format(t2, p2))
obs = np.array([[30,10],[20,40]])
chi2, p3, dof, _ = stats.chi2_contingency(obs)
print("卡方检验 chi2={:.4f}, p={:.4f}, dof={}".format(chi2, p3, dof))
groups = [np.random.normal(m, 2, 30) for m in [5,5,5]]
f1, p4 = stats.f_oneway(*groups)
print("ANOVA(同均值) F={:.4f}, p={:.4f}".format(f1, p4))
groups2 = [np.random.normal(m, 2, 30) for m in [5,8,12]]
f2, p5 = stats.f_oneway(*groups2)
print("ANOVA(异均值) F={:.4f}, p={:.4f}".format(f2, p5))
from statsmodels.stats.multitest import multipletests
pvals = [0.01, 0.04, 0.03, 0.20, 0.005]
r1, adj1, _, _ = multipletests(pvals, method='bonferroni')
r2, adj2, _, _ = multipletests(pvals, method='fdr_bh')
print("\n多重比较: 原始={} Bonferroni拒绝={} BH拒绝={}".format(pvals, list(r1), list(r2)))
运行结果
=== 假设检验验证 ===
单样本t检验 H0:mu=5, t=-1.1450, p=0.2616
独立t检验 t=-2.3020, p=0.0234
卡方检验 chi2=15.0417, p=0.0001, dof=1
ANOVA(同均值) F=0.7205, p=0.4894
ANOVA(异均值) F=95.5891, p=0.0000
多重比较: 原始=[0.01, 0.04, 0.03, 0.2, 0.005] Bonferroni拒绝=[np.True_, np.False_, np.False_, np.False_, np.True_] BH拒绝=[np.True_, np.True_, np.True_, np.False_, np.True_]
✅ 验证通过
补充内容:关键概念深入
本节补充本课的核心概念、常见误区和实践建议,帮助建立更深入的理解。
实践案例与深入分析
统计思维在日常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为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
📝 课后练习
- 实现单样本和独立样本t检验
- 用卡方检验分析分类变量独立性
- 比较ANOVA与多次t检验
- 实现Bonferroni和BH校正
- 设计A/B测试并计算样本量